区块链交易确认是确保交易有效性和安全性的关键步骤。这个过程始于交易被提交到内存池中,终于被打包到新区块里并添加至区块链上。
当一个交易发起后,它会被广播至整个网络。在这一阶段,参与网络的节点(在 CKB 等基于工作量证明的加密货币中,这些节点被称为矿工)会验证交易的详细信息和真实性。一旦交易被认为符合协议规则,矿工便会将其与工作量证明一起打包进区块,并将该区块广播给网络中的其他节点。
网络中的其他节点在接收这个新区块时,会对里面的交易及其工作量证明进行验证。若验证通过,这些节点便会将该区块加入到它们各自的区块链副本中。交易一旦被纳入区块并添加至区块链中,就被称为确认交易。
这一过程保障了网络中所有节点持有一致的区块链信息。
交易确认所需时间
一个区块的确认并不意味着交易的终极确定。有时,多个矿工可能几乎同时发现有效的区块。这会导致网络的部分节点在同一区块高度上构建不同的区块,形成所谓的 “意外分叉”。
区块链往往通过 “最长链规则” 来解决这类问题,这意味着网络将把最长的链(背后累积工作量最多的链)视为标准链。一旦矿工观察到一条链比另一条链长,他们就会放弃较短链上的新区块(称为孤块),继续在最长链上构建区块。
因此,一笔交易通常需要多次确认(通常是三次或以上)才被认为是最终确定或不可逆。至于单笔交易确认需要多长时间,这取决于具体的区块链。例如,比特币平均每 10 分钟产生一个区块,而 Nervos Layer 1 区块链 CKB 的出块时间大约是10 ~ 12 秒。
为什么我的交易没有得到处理?
用户的交易在广播到网络后并不会立刻被处理,而是首先进入一个名为内存池(mempool)的暂存区,与其他待处理的交易一同排队。
矿工会根据交易手续费的高低来挑选内存池中的交易并进行打包处理。因为区块空间(可容纳一个区块的交易数量)有限,矿工无法将所有交易都纳入一个区块,因此他们会优先选择手续费较高的交易进行打包,费用较低的交易可能会被延迟处理。
当处理时间过长时,用户可以选择编辑交易并提高交易手续费,以吸引矿工加快处理速度。
如何查询交易状态
用户可以通过区块链浏览器,如以太坊的 ethexplorer.io、比特币的 blockstream.info 和 CKB 的 explorer.nervos.org 来查询他们的交易状态。当交易处于待处理状态时,意味着该交易尚未被纳入区块中。
当一笔交易被确认时,就意味着它已经被记录在区块链上了。需要注意的是,在以太坊上,存在被标为 “失败” 的交易,这意味着尽管交易被处理过,但并未成功执行,矿工或验证者仍会收取 Gas 费用。相比之下,比特币和 CKB 仅将有效的交易纳入链中。