⌘K

Icon SunFilledIcon MoonStars
Predicate With More Complex Args

Icon LinkPredicate with more complex arguments

Icon LinkPredicate with multiple arguments

You can pass more than one argument to a predicate. For example, this is a predicate that evaluates to true if the two arguments are not equal:

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

You can pass the two arguments to this predicate like this:

	const predicate = new Predicate(bytecode, chainId, abi);
	predicate.setData(20, 30);
	const tx = await predicate.transfer(receiver.address, amountToReceiver, BaseAssetId, {
	gasPrice,
	gasLimit: 10_000,
	});
	await tx.waitForResult();

Icon LinkPredicate with a Struct argument

You can also pass a struct as an argument to a predicate. This is one such predicate that expects a struct as an argument:

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
}

You can pass a struct as an argument to this predicate like this:

	const predicate = new Predicate(bytecode, chainId, abi);
	const tx = await predicate
	.setData({
	  has_account: true,
	  total_complete: 100,
	})
	.transfer(receiver.address, amountToReceiver, BaseAssetId, { gasPrice, gasLimit: 10_000 });
	await tx.waitForResult();