如何区分NEAR区块链成功与失败交易并在UI中展示交易状态
区分NEAR区块链交易成功与失败的关键字段
我来帮你理清NEAR交易状态的判断逻辑,其实要区分两个核心层面,同时有明确的JSON字段可以用来识别交易的成功或失败:
1. 区块链层面的交易执行状态(交易是否被链上确认执行)
这是最基础的判断:交易是否被区块链网络成功打包并执行,不管合约内部逻辑结果如何。你可以直接查看交易响应根节点的status字段:
- 成功交易:
status会是以下两种类型之一:{"SuccessValue": "<base64_encoded_value>"}:代表交易执行完成,并且合约返回了值(比如ft_resolve_transfer的返回值会在这里){"SuccessReceiptId": "<receipt_id>"}:代表交易触发了后续收据,但交易本身已成功执行
- 失败交易:
status会是{"Failure": {...}}结构,里面包含具体的错误详情,比如ActionError(动作执行错误)、ReceiptError(收据处理错误)等。
举个失败交易的status片段示例:
"status": { "Failure": { "ActionError": { "index": 0, "kind": { "FunctionCallError": { "ExecutionError": "Smart contract panicked: ..." } } } } }
2. 合约逻辑层面的操作结果(比如FT转账是否真正完成)
如果要判断合约内部的业务逻辑是否成功(比如你提到的ft_resolve_transfer),除了依赖合约返回值,还可以:
- 解析
SuccessValue的base64编码内容:比如ft_resolve_transfer返回的是u64类型,解码后得到的数值为0代表失败,非0代表成功 - 查看
receipts_outcome数组中对应合约调用的outcome.status.SuccessValue,这里会存储合约方法的返回结果
你之前觉得成功和失败交易的JSON几乎一致,大概率是没注意status字段的核心差异——失败交易的status一定会包含Failure对象,而成功交易不会。
内容的提问来源于stack exchange,提问作者Sai Kiran
相关产品推荐
相关产品推荐

