做交易所充值或支付系统时,最危险的误解之一,是把节点返回“202 Accepted”当成到账凭证。
我重新梳理了 @Dusk 的交易生命周期。交易提交到节点后,202只代表节点接受了这份数据并准备转发,不代表它已经进入真实Mempool,更不代表被打包、执行成功或达到最终确认。
一笔Dusk L1交易至少要经过提交、预验证、进入本地Mempool、网络传播、区块选择、合约执行和区块最终化几个阶段。即使交易已经进入被接受的区块,也要检查Executed事件中的Error是否为空;合约发生错误时,Nonce或Phoenix Notes仍可能被消耗,Gas同样需要支付。只有区块状态变成Finalized,才能把这笔交易视为不可逆结果。
这像快递系统显示“已揽收”。它只能证明快递员拿到了包裹,不能证明包裹已经送到收件人手中。
因此,交易所如果看到交易哈希就提前入账,可能把被替换、执行失败或尚未最终化的交易当成真实存款。后续最值得观察的是钱包如何显示交易阶段、交易所采用什么最终确认标准,以及执行失败但已付Gas的比例。
收到交易,不等于执行交易;执行交易,也不等于最终结算。金融系统真正需要确认的是最后一步。#dusk $DUSK
我重新梳理了 @Dusk 的交易生命周期。交易提交到节点后,202只代表节点接受了这份数据并准备转发,不代表它已经进入真实Mempool,更不代表被打包、执行成功或达到最终确认。
一笔Dusk L1交易至少要经过提交、预验证、进入本地Mempool、网络传播、区块选择、合约执行和区块最终化几个阶段。即使交易已经进入被接受的区块,也要检查Executed事件中的Error是否为空;合约发生错误时,Nonce或Phoenix Notes仍可能被消耗,Gas同样需要支付。只有区块状态变成Finalized,才能把这笔交易视为不可逆结果。
这像快递系统显示“已揽收”。它只能证明快递员拿到了包裹,不能证明包裹已经送到收件人手中。
因此,交易所如果看到交易哈希就提前入账,可能把被替换、执行失败或尚未最终化的交易当成真实存款。后续最值得观察的是钱包如何显示交易阶段、交易所采用什么最终确认标准,以及执行失败但已付Gas的比例。
收到交易,不等于执行交易;执行交易,也不等于最终结算。金融系统真正需要确认的是最后一步。#dusk $DUSK