获取钱包签名所需数据:开发者完整调用指南

·

想让用户在不离开你自己应用的同时完成链上交易?关键在于「签名所需数据」接口:一行请求,即可返回 EVM、UTXO、Solana、Tron 等主流链的 nonceGAS费区块哈希 等核心参数,把繁琐计算全部自动化。

下面这份实战指南将带你拆解接口逻辑、参数细节与常见坑点,助你 10 分钟完成集成。


为什么「签名所需数据」至关重要


POST 请求结构与地址

POST https://web3.okx.com/api/v5/wallet/pre-transaction/sign-info
Content-Type: application/json

四大核心参数清单

参数名类型必填说明示例
chainIndexString链统一 ID,如 1 代表 ETH 主网
fromAddrString交易发起地址
toAddrString接收地址
txAmountString主链币转账额度,单位为最小精度(wei、satoshi 等);只做合约调用时可省略
extJsonObject所见即所得的扩展数据,决定返回哪些签名字段

extJson 内部高频字段

小贴士:如果你的应用只处理 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"
    }
  }
}

2. UTXO 系(BTC、BCH、LTC)

{
  "normalFeeRate": "20",
  "maxFeeRate": "50",
  "minFeeRate": "5",
  "inscriptionOutput": "546",
  "minOutput": "546"
}

3. Solana 网络

{
  "baseFee": "5000",
  "priorityFee": {
    "normalUnitPrice": "0",
    "minUnitPrice": "0",
    "maxUnitPrice": "50000"
  },
  "recentBlockHash": "4mx...Yq",
  "lastValidBlockHeight": "2147483647"
}

4. Tron

{
  "fee": "30000000",
  "refBlockBytes": "73e0",
  "refBlockHash": "4b8...",
  "expiration": 1681745403000,
  "timestamp": 1681745343000
}

快速上手实例

场景:给用户显示 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"
        }
      }
    }
  ]
}

拿到 gasLimitnoncegasPrice.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)。合约复杂、能量不足场景建议手动调大,防止交易失败。


最佳实践清单

  1. 链信息硬编码:把 chainIndex 与链名做成映射表,前端无需重复输入字符串。
  2. 缓存 recentBlockHash**:RPC 限制 100ms,缓存 30 秒即可降低后端压力。
  3. 异常兜底:如果接口超时 1.5s,退回本地 GAS 预估模型,优先保证用户体验。
  4. 日志留存:把返回的 noncegasPrice 写入回滚日志,方便事后对账。
  5. 动态选档:根据用户所在国家实时网络延迟,自动匹配 normal/min/max 档位。

再次提醒,「签名所需数据」只是第一步,之后的交易广播、回执监听仍需要 交易广播钱包 API 组合完成。👉 直接查看实现交易状态追踪的完整代码模板