本体链跨链交易合法性验证步骤教程
序号 | 操作环节 | 所需工具/接口 | 关键参数 | 执行命令示例 | 验证要点 | 常见错误与排查 |
---|---|---|---|---|---|---|
1 | 同步主链与侧链区块头 | ontreliayer 服务 | 侧链 ID、RPC 端点 | ontrelayer sync --side-chain 3 --rpc https://dappnode1.ont.io | 区块高度差 ≤ 5 | 高度差过大时检查网络延迟或 relayer 日志 |
2 | 获取跨链交易默克尔证明 | 侧链 light-node API | 交易哈希、区块号 | curl https://ethlight.ont.io/proof/0xab12…34/1234567 | 返回字段包含 merklePath 、root | 若返回 404,确认交易已落块且未重组 |
3 | 在本体链上构建证明交易 | Ontology-CLI ≥ v2.4.0 | 证明数据、合约地址 | ontology tx build --method verifyToMerkle --params proof.json --gaslimit 3000000 | 参数顺序与链上 ABI 一致 | ABI 不匹配会报 “method not found” |
4 | 发送证明交易并等待事件 | 任意本体节点 RPC | 交易哈希 | ontology tx send --rpc https://explorer.ont.io/api/v1 --file proof.tx | Event 包含 CrossChainVerified | 无事件则检查 gas 是否不足或合约是否暂停 |
5 | 调用跨链资产合约解锁 | 合约地址 ocx…f3a2 | 原始交易哈希、toAddr、amount | ontology contract invoke --address ocx9a2bc8f3a2 --method unlock --params 0xab12…34,ANw8…Zg,10000000000 | 解锁金额 ≤ 原始锁定金额 | 金额超限会回滚并抛 “INSUFFICIENT_LOCK” |
6 | 结果双端核对 | 本体浏览器 + 侧链浏览器 | 交易哈希列表 | 本体: https://explorer.ont.io/transaction/0x5678…ef 侧链: https://ethlight.ont.io/tx/0xab12…34 | 两端状态均为 SUCCESS | 若一侧失败,需回滚对端或提交补偿交易 |
7 | 记录审计日志 | 本地 Mongo ≥ 4.4 | 区块高度、交易哈希、证明摘要 | db.crosschain.insert({txHash:"0xab12…34",proofRoot:"0xcf67…aa",verified:true}) | 摘要与链上 root 一致 | 日志丢失可重新从 RPC 拉取区块重放 |
补充说明
- 所有 RPC 调用建议添加
?t=当前时间戳
防止 CDN 缓存。 - 若侧链为以太坊类型,需将 RLP 编码证明转为 HEX 后再放入
proof.json
。 - 主网合约地址固定为
oxb7d65f0a8a40b0c98f7c6e3e5c6b9c2f1e8e4e6e
,测试网为oxb7d65f0a8a40b0c98f7c6e3e5c6b9c2f1e8e4e6f
,调用前请二次核对。