输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
预测市场
证券与期货
链上与自定义接入

查看、同步或设置发送交易时使用的nonce计数。

exchange.IO(k)
exchange.IO(k, "sync")
exchange.IO(k, nonce)

示例

查看nonce状态并重新同步。

javascript
function main() { // latest:已上链的交易数;pending:节点看到的含待处理交易的计数;local:本地下一个要用的 nonce var st = exchange.IO("nonce") Log("地址:", st.address, "latest:", st.latest, "pending:", st.pending, "local:", st.local) if (Number(st.pending) > Number(st.latest)) { Log("有", Number(st.pending) - Number(st.latest), "笔交易还未上链") } // 在其它地方(钱包、其它程序)用同一地址发过交易后,可以手动按链上重新同步 st = exchange.IO("nonce", "sync") Log("同步后 local:", st.local) }

返回值

类型描述

object

返回{address, latest, pending, local}对象:latest为已上链的交易数;pending为节点返回的包含待处理交易在内的计数;local为本地记录的下一个nonce(尚未发送过交易时为空值)。各数值均以字符串形式返回。

参数

名称类型必填描述

k

string

是

固定为nonce,用于管理nonce。

nonce

string / number

否

不传该参数时仅查询nonce状态;传入sync时,按节点返回的pending计数重新同步本地记录;传入数值时,将本地记录的下一个nonce设置为该值。

参考

备注

发送交易时自动分配nonce:取节点返回的pending计数与本地记录的下一个nonce中的较大值。节点计数较大,说明该地址在其它地方发送过交易,此时采用节点的值;本地记录较大,说明自己发送的交易尚未被节点感知(例如通过exchange.IO("sendBase", ...)的私有通道发送),此时沿用本地的值,因此连续发送交易时不会重复使用nonce。当节点返回nonce过低或该nonce已存在待处理交易时,自动重新同步并重发一次;当本地记录领先于节点且长时间(5分钟)没有新交易上链时,判定中间有交易被丢弃,自动回退到节点的计数。

本地记录仅在同一个交易所对象(同一个机器人)内有效。多个机器人共用一个钱包时,彼此无法获取对方的记录,仍可能发生nonce冲突,建议每个机器人使用独立的钱包。

发送交易时,也可以在exchange.IO("api", ...)的最后一个参数中设置nonce,手动指定nonce。

目前仅支持以太坊(EVM)链,暂不支持波场(TRON)。