在 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)地址。
您可以将多个参数传递给一个断言。例如,下面是一个断言,如果两个参数不相等,则评估为 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();
您也可以将结构作为参数传递给断言。以下是一个期望结构作为参数的断言示例:
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();