本人在进行过数年的链上应用开发工作期间, 接触最为频繁的任务之一, 就是负责把交易数据推送至区块链网络。不少参与者常常误认为提交一笔交易的流程, 跟发送微信消息那种瞬间就能送达的效果完全一致, 然而实际情况中所经历的过程, 比人们脑海中的想象要复杂和繁琐得多。
接下来我们就来详细了解一下, 一笔交易从最初发起, 一直到最终被写入区块这一整个流程里, 究竟发生了哪些具体的事情。
区块怎么完成上链
当交易被提交之后, 它并不会直接进入到链上。相反, 它会先行进入节点的交易池(mempool)里面。随后, 需要等待矿工或者验证者根据相关的规则来进行筛选和打包作业。在进行打包的过程当中, 交易会被整理并构造成一棵梅克尔树(MerkleTree)的样子。
最终, 这棵树的根节点信息会被写入到区块头中去。
当一个节点把区块的内容全都凑齐以后, 它会马上向网络里的所有其他节点发送这个块, 别的节点则会挨个儿去核对交易签名对不对, 还要检查gas的费用合不合法, 以及nonce数值正不正确, 等等各种字段都得验证一遍, 只有当每一个都通过检查了的时候, 这些节点才会承认这个块, 并把它接纳下来。
验证通过的区块被追加到链的末尾, 之前每个 区块 对应的 哈希 状态就已经固定死了, 这样就形成了不可篡改的链条结构。只有到了这一步之后, 相关的交易才算是真正实现了上链操作。

上链过程需要多长时间
等待的时间, 是由共识机制来决定的, 在比特币里,中本聪共识大约需要十分钟才能出一个块, 以太坊升级之后呢, 大概变成十二秒钟左右了, 而BSC是压到了三千毫秒, 同一笔交易在不同链上等待确认的时间, 可能会有两个数量级的差距。
在实际的业务场景当中, 我们通常是去查看确认数(confirmations)这个指标的。对于比特币来说, 推荐的是等待六个确认, 而对于以太坊主网而言, 两到三个的确认数量就已经足够应对了。伴随着确认数量的不断增加, 交易发生反向变动的可能性就会相应地降低。
要把这些细节给弄清楚了, 在写合约的时候才不会不小心踩到坑里, 在做跨链桥的时候会顺利一些, 在调整gas策略的这个过程当中也会少一点麻烦。
转载请注明出处:imtoken,如有疑问,请联系()。
本文地址:https://m.zmdyd.cn/imazbqb/10434.html
