内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
预测市场
证券与期货
链上与自定义接入
通用协议
Web3
exchange.IO("abi", ...)
exchange.IO("api", blockChain, ...)
exchange.IO("encode", ...)
exchange.IO("encodePacked", ...)
exchange.IO("decode", ...)
exchange.IO("hash", ...)
exchange.IO("key", ...)
exchange.IO("sign", ...)
exchange.IO("signTypedData", ...)
exchange.IO("signMessage", ...)
exchange.IO("api", ...)
exchange.IO("call", ...)
exchange.IO("multicall", ...)
exchange.IO("logs", ...)
exchange.IO("waitReceipt", ...)
exchange.IO("nonce", ...)
exchange.IO("speedUp", ...)
exchange.IO("cancelTx", ...)
exchange.IO("toUnits", ...)
exchange.IO("fromUnits", ...)
exchange.IO("uniswapV3", ...)
exchange.IO("contracts", ...)
exchange.IO("address")
exchange.IO("base", ...)
exchange.IO("sendBase", ...)
exchange.IO("nonce", ...)
查看、同步或设置发送交易时使用的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 | 返回 |
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
nonce | string / number | 否 | 不传该参数时仅查询nonce状态;传入 |
参考
备注
发送交易时自动分配nonce:取节点返回的pending计数与本地记录的下一个nonce中的较大值。节点计数较大,说明该地址在其它地方发送过交易,此时采用节点的值;本地记录较大,说明自己发送的交易尚未被节点感知(例如通过exchange.IO("sendBase", ...)的私有通道发送),此时沿用本地的值,因此连续发送交易时不会重复使用nonce。当节点返回nonce过低或该nonce已存在待处理交易时,自动重新同步并重发一次;当本地记录领先于节点且长时间(5分钟)没有新交易上链时,判定中间有交易被丢弃,自动回退到节点的计数。
本地记录仅在同一个交易所对象(同一个机器人)内有效。多个机器人共用一个钱包时,彼此无法获取对方的记录,仍可能发生nonce冲突,建议每个机器人使用独立的钱包。
发送交易时,也可以在exchange.IO("api", ...)的最后一个参数中设置nonce,手动指定nonce。
目前仅支持以太坊(EVM)链,暂不支持波场(TRON)。