想让用户在不离开你自己应用的同时完成链上交易?关键在于「签名所需数据」接口:一行请求,即可返回 EVM、UTXO、Solana、Tron 等主流链的 nonce
、GAS费、区块哈希 等核心参数,把繁琐计算全部自动化。
下面这份实战指南将带你拆解接口逻辑、参数细节与常见坑点,助你 10 分钟完成集成。
为什么「签名所需数据」至关重要
- 节省开发时间 – 不再手动计算 GAS 或刷新 nonce,减少链交互失败率
- 提升用户体验 – 交易弹窗预填准确信息,减少确认耗时
- 兼容多条链 – 同一套 API 同时覆盖 ETH、Polygon、BTC、Solana、Tron,后续维护成本低
POST 请求结构与地址
POST https://web3.okx.com/api/v5/wallet/pre-transaction/sign-info
Content-Type: application/json
四大核心参数清单
参数名 | 类型 | 必填 | 说明示例 |
---|---|---|---|
chainIndex | String | ✅ | 链统一 ID,如 1 代表 ETH 主网 |
fromAddr | String | ✅ | 交易发起地址 |
toAddr | String | ✅ | 接收地址 |
txAmount | String | ❌ | 主链币转账额度,单位为最小精度(wei、satoshi 等);只做合约调用时可省略 |
extJson | Object | ✅ | 所见即所得的扩展数据,决定返回哪些签名字段 |
extJson 内部高频字段
inputData
– EVM 智能合约的 calldataprotocol
– 铭文协议标识:1
BRC-20、2
ARC-20、3
Runes…tokenAddress
– Solana 链下 SPL Token 合约地址permissionType / feeLimit
– Tron 链专用,精准控制能量与带宽消耗
小贴士:如果你的应用只处理 ETH 转账,把inputData
留空即可;铭文类交易记得指定protocol
,否则接口会返回 BTC 默认费率。
按链解读返回数据
下面把每一个链返回值拆开,告诉你哪一项最关键、怎么用。
1. EVM 系列(ETH、Polygon、BSC...)
{
"gasLimit": "21000",
"nonce": "15",
"gasPrice": {
"normal": "24000000000",
"min": "20000000000",
"max": "28000000000",
"supportEip1559": true,
"eip1559Protocol": {
"baseFee": "25000000000",
"proposePriorityFee": "2000000000",
"safePriorityFee": "1000000000",
"fastPriorityFee": "3000000000"
}
}
}
如何挑 GAS:
- 追求成功率 ➜
max
档 - 日常转账 ➜
normal
- 力省成本 ➜
min
+ EIP-1559 模式
- 追求成功率 ➜
2. UTXO 系(BTC、BCH、LTC)
{
"normalFeeRate": "20",
"maxFeeRate": "50",
"minFeeRate": "5",
"inscriptionOutput": "546",
"minOutput": "546"
}
- FeeRate ≠ 总费 – FeeRate 乘交易字节数才是最终花费;调用 API 前请估算好输入大小。
- inscriptionOutput 固定 546 satoshi 以便于 ordinals 背书,别改它。
3. Solana 网络
{
"baseFee": "5000",
"priorityFee": {
"normalUnitPrice": "0",
"minUnitPrice": "0",
"maxUnitPrice": "50000"
},
"recentBlockHash": "4mx...Yq",
"lastValidBlockHeight": "2147483647"
}
- 优先费=插队权,在 NFT 释放或 DeFi 清算场景要拉高
maxUnitPrice
。
4. Tron
{
"fee": "30000000",
"refBlockBytes": "73e0",
"refBlockHash": "4b8...",
"expiration": 1681745403000,
"timestamp": 1681745343000
}
- refBlockBytes / Hash 两字段用于防重放,一定用最新区块的数据。
- expiration 为 Unix 时间戳 + 10 分钟,超过即作废。
快速上手实例
场景:给用户显示 ETH 主网一键转账所需的所有签名数据
cURL
curl -X POST https://web3.okx.com/api/v5/wallet/pre-transaction/sign-info \
-H "Content-Type: application/json" \
-d '{
"chainIndex": "1",
"fromAddr": "0xA0b8...B72F",
"toAddr": "0xC2...8d4",
"txAmount": "1000000000000000",
"extJson": {}
}'
结果
{
"code": 0,
"msg": "",
"data": [
{
"gasLimit": "21000",
"nonce": "12",
"gasPrice": { "normal": "30201000000", "min": "25000000000", "max": "36000000000", "supportEip1559": true,
"eip1559Protocol": {
"baseFee": "27651029619",
"proposePriorityFee": "1500000000",
"safePriorityFee": "1000000000",
"fastPriorityFee": "2500000000"
}
}
}
]
}
拿到 gasLimit
、nonce
和 gasPrice.normal
后,前端可以用任何 Ethers.js / web3.js 工具快速组装交易并提示用户签名。
👉 点击获取更详尽的交互流程,节省 80% 开发工时
FAQ:开发者最关心的 5 大问题
Q1:接口调用频率有限制吗?
A:默认 10 QPS,如项目量级大,可申请企业级套餐提升额度,无需更换代码。
Q2:为什么 BTC 返回的 normalFeeRate 跟区块浏览器不同?
A:接口做 3-6 区块预测,已考虑粉尘攻击补偿,因此略高;可用 minFeeRate
自行兜底。
Q3:如何获取内存池的 nonce?
A:内存池 nonce 与本接口上链 nonce 计算逻辑不同,需另外调用 获取 nonce 参考文档。
Q4:Solana 的 tokenAccountInfo 什么时候为空?
A:转账 SPL Token 时若接收方尚未创建关联代币账户,tokenAccountInfo 就会为空,需先提醒用户创建。
Q5:Tron 的 feeLimit
可以大于默认值吗?
A:可以,最大 1e9 SUN(100 TRX)。合约复杂、能量不足场景建议手动调大,防止交易失败。
最佳实践清单
- 链信息硬编码:把
chainIndex
与链名做成映射表,前端无需重复输入字符串。 - 缓存 recentBlockHash**:RPC 限制 100ms,缓存 30 秒即可降低后端压力。
- 异常兜底:如果接口超时 1.5s,退回本地 GAS 预估模型,优先保证用户体验。
- 日志留存:把返回的
nonce
与gasPrice
写入回滚日志,方便事后对账。 - 动态选档:根据用户所在国家实时网络延迟,自动匹配
normal/min/max
档位。
再次提醒,「签名所需数据」只是第一步,之后的交易广播、回执监听仍需要 交易广播 与 钱包 API 组合完成。👉 直接查看实现交易状态追踪的完整代码模板