TriggerConstantContract

在不广播交易和修改链上状态的情况下模拟智能合约调用,并返回执行结果与能量消耗。

triggerconstantcontract 用于在不广播交易的情况下模拟合约执行。该接口既可用于调用 viewpure 等只读函数,也可用于模拟执行可能修改链上状态的非只读函数。

模拟执行产生的状态变更不会写入区块链。调用该接口不会消耗账户实际的 Bandwidth 或 Energy,因此请求中无需提供 fee_limit

执行时间限制

模拟执行存在 TVM 执行时间上限。自 GreatVoyage-v4.8.2 起,节点可通过配置项 vm.constantCallTimeoutMs 单独设置该上限。配置值大于 0 时使用该值,否则使用链参数 getMaxCpuTimeOfOneTx 的值;两者均以毫秒为单位。执行超时将导致模拟失败。

如需调整该上限,请参阅模拟执行超时时间配置说明

理解模拟执行结果

本次模拟所使用的执行上下文包括节点处理请求时可见的状态视图和生效的 TVM 规则。由于节点会持续处理区块和 Pending 交易,并可能同时执行其他 Constant Call,稍后提交的交易在链上执行时可能处于不同的执行上下文,其执行结果也可能与本次模拟的结果不同。这是时点模拟的正常特性。

模拟使用的执行上下文主要受以下情况影响:

  • 处理区块: 节点会按顺序执行区块内的交易,并同步更新账户、合约存储、资源和链参数。在此期间发起的模拟会使用节点当时可见的数据。
  • 处理 Pending 交易: /wallet 提供最新状态视图。节点校验或重放 Pending 交易时,该视图可能包含节点本地更新,并随着交易被打包或新区块到达而继续变化。
  • 其他 Constant Call: 通过 /wallet/walletsolidity 发起的调用可能使用不同的提案状态和 TVM 规则。当不同执行上下文的调用同时进行时,极少数情况下,模拟可能反映节点当时正在应用的执行配置。

constant_resultenergy_usedlogsinternal_transactions 是本次模拟执行产生的结果。当模拟读取的状态或使用的 TVM 规则不同时,合约的执行路径可能发生变化,这些字段的返回值也可能随之不同。顶层 result 表示 API 调用状态,transaction.ret[0].ret 表示模拟的 TVM 执行结果。

可根据需要选择接口:/wallet 提供最新状态视图,/walletsolidity 提供稍早但已固化的状态视图。准备交易时,可将模拟结果作为参考,并为随状态变化的 Energy 消耗预留余量;交易广播后,实际链上执行结果以交易回执为准。


相关资源

Body Params
string
required

交易发起方地址。(格式:Base58 或 Hex)

string

合约地址。(格式:Base58 或 Hex)
示例:TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs

string

函数选择器。
示例:transfer(address,uint256)

string

ABI 编码的函数参数(Hex 字符串)。
示例:000000000000000000000000a614f803b6fd780986a42c78ec9c7f77e6ded13c

string

该字段传递智能合约交互所需的数据,包括被调用的函数及其参数。您可以选择使用包含完整 ABI 编码信息的 data 字段,也可以分别使用 function_selectorparameter 字段。请注意,若 datafunction_selector 同时存在,系统将优先使用 function_selectorparameter 字段进行合约交互。

int64

转入合约的 TRX 数量。(单位:sun)

int64

转入合约的 TRC-10 Token 数量。

int64

TRC-10 Token ID。

boolean

可选。设为 true 时地址以 Base58 格式返回;设为 false 时以 Hex 格式返回。(默认值:false

Responses

Language
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json