Call Parameters

Icon Link调用参数

在与合约交互时,你可以使用 callParams 方法为合约调用配置特定的参数。可用的调用参数包括:

  1. forward
  2. gasLimit
Icon InfoCircle

注意:在调用合约时,也可以设置交易参数。有关更多信息,请参阅交易参数

Icon Link转发参数

forward 参数允许在调用函数时向合约发送特定数量的代币。当合约函数需要代币来执行时(例如支付费用或转移资金),转发参数有助于控制分配给合约调用的资源,并提供了对潜在成本高昂操作的保护。

const amountToForward = 10;
 
const { value } = await contract.functions
  .return_context_amount()
  .callParams({
    forward: [amountToForward, baseAssetId],
  })
  .call();
 
expect(new BN(value).toNumber()).toBe(amountToForward);

Icon LinkGas 限制参数

gasLimit 指的是仅由合约调用本身消耗的最大气体量,与交易的其余部分分开。

 
await expect(
  contract.functions
    .return_context_amount()
    .callParams({
      forward: [10, baseAssetId],
      gasLimit: 1,
    })
    .call()
).rejects.toThrow('The transaction reverted with reason: "OutOfGas"');

Icon Link调用参数 gasLimit vs 交易参数 gasLimit

调用的 gasLimit 参数设置了实际合约调用的最大气体限制,而交易的 gasLimit (请参阅交易参数 )设置了整个交易的最大气体限制,并约束了调用的 gasLimit。如果调用的 gasLimit 设置为大于 可用 交易气体的值,则整个可用的交易气体将用于合约调用执行。

如果不设置调用的 gasLimit,则将应用交易的 gasLimit

Icon Link设置两个参数

你可以在同一个合约函数调用中设置调用参数和交易参数。

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);