在与合约交互时,你可以使用 callParams
方法为合约调用配置特定的参数。可用的调用参数包括:
forward
gasLimit
注意:在调用合约时,也可以设置交易参数。有关更多信息,请参阅交易参数 。
forward
参数允许在调用函数时向合约发送特定数量的代币。当合约函数需要代币来执行时(例如支付费用或转移资金),转发参数有助于控制分配给合约调用的资源,并提供了对潜在成本高昂操作的保护。
const amountToForward = 10;
const { value } = await contract.functions
.return_context_amount()
.callParams({
forward: [amountToForward, baseAssetId],
})
.call();
expect(new BN(value).toNumber()).toBe(amountToForward);
gasLimit
指的是仅由合约调用本身消耗的最大气体量,与交易的其余部分分开。
await expect(
contract.functions
.return_context_amount()
.callParams({
forward: [10, baseAssetId],
gasLimit: 1,
})
.call()
).rejects.toThrow('The transaction reverted with reason: "OutOfGas"');
gasLimit
vs 交易参数 gasLimit
调用的 gasLimit
参数设置了实际合约调用的最大气体限制,而交易的 gasLimit
(请参阅交易参数 )设置了整个交易的最大气体限制,并约束了调用的 gasLimit
。如果调用的 gasLimit
设置为大于 可用 交易气体的值,则整个可用的交易气体将用于合约调用执行。
如果不设置调用的 gasLimit
,则将应用交易的 gasLimit
。
你可以在同一个合约函数调用中设置调用参数和交易参数。
const amountToForward = 10;
const contractCallGasLimit = 4000;
const transactionGasLimit = 100_000;
const result = await contract.functions
.return_context_amount()
.callParams({
forward: [amountToForward, baseAssetId],
gasLimit: contractCallGasLimit,
})
.txParams({
gasLimit: transactionGasLimit,
})
.call();
const { value } = result;
const expectedValue = 10;
expect(new BN(value).toNumber()).toBe(expectedValue);