Instantiating a Predicate

Icon Link实例化断言

在 Sway 中,断言可以像下面这样简单:

predicate;
 
fn main() -> bool {
    true
}

在这个最简示例中,main 函数不接受任何参数,只是简单地返回 true。

就像 Sway 中的合约一样,一旦您创建了一个断言,您可以使用 forc build 编译它。有关使用 Sway 的更多信息,请参阅 Sway 文档

编译后,您将获得断言的二进制文件和其 JSON ABI(应用程序二进制接口)。使用这些,您可以像下面的代码片段一样在 TypeScript 中实例化一个断言:

// #import { Predicate, Provider, FUEL_NETWORK_URL };
 
const provider = await Provider.create(FUEL_NETWORK_URL);
const predicateParams: PredicateParams = {
  bytecode: binary,
  provider,
  abi: jsonAbi,
};
const predicate = new Predicate(predicateParams);

创建的 Predicate 实例,除其他外,有三个重要属性:断言 bytes(字节码)、chainId 和断言 address

这个地址,由字节码生成,对应于比特币中使用的 Pay-to-Script-Hash(P2SH)地址。

Icon Link带有多个参数的断言

您可以将多个参数传递给一个断言。例如,下面是一个断言,如果两个参数不相等,则评估为 true

predicate;
 
fn main(arg1: u64, arg2: u64) -> bool {
    return arg1 != arg2;
}

您可以像这样将两个参数传递给这个断言:

const predicate = new Predicate({
  bytecode: predicateBytesMulti,
  abi: predicateAbiMulti,
  provider,
  inputData: [20, 30],
});
const tx = await predicate.transfer(receiver.address, amountToReceiver, baseAssetId, {
  gasLimit: 1000,
});
const { isStatusSuccess } = await tx.waitForResult();

Icon Link带有结构参数的断言

您也可以将结构作为参数传递给断言。以下是一个期望结构作为参数的断言示例:

predicate;
 
struct Validation {
    has_account: bool,
    total_complete: u64,
}
 
fn main(received: Validation) -> bool {
    let expected_has_account: bool = true;
    let expected_total_complete: u64 = 100;
 
    received.has_account == expected_has_account && received.total_complete == expected_total_complete
}

您可以像这样将结构作为参数传递给这个断言:

const predicate = new Predicate<[Validation]>({
  bytecode: predicateBytesMainArgsStruct,
  abi: predicateAbiMainArgsStruct,
  provider,
  inputData: [{ has_account: true, total_complete: 100 }],
});
const tx = await predicate.transfer(receiver.address, amountToReceiver, baseAssetId, {
  gasLimit: 1000,
});
const { isStatusSuccess } = await tx.waitForResult();