美文网首页
关于交易确认数的来龙去脉

关于交易确认数的来龙去脉

作者: Ashton | 来源:发表于2018-09-12 17:22 被阅读320次

    我们在做去区块链数字钱包,交易所等产品的时候,任何涉及到区块链交易的场合,都需要结合共识算法来考虑交易确认数的问题。

    什么是交易确认数

    imToken (数字货币钱包)

    在使用 imToken 进行转账的时候,如果注意查看交易记录,会看到一个进度条,进度条右边有个如下图所示 “4/12” 字样的数字,并且过几秒钟这个数字会变为 “5/12”,“6/12” ... 一直到 “12/12”。这里显示的就是确认数,“4/12” 表示这笔交易需要 12 个确认,当前已经有了 4 个确认。


    交易确认数

    etherscan (区块链浏览器)

    在 etherscan 上查看交易的时候,如果注意观察,在 Block Height 这一栏,会显示 xxxx(xxx block confirmations) 的字样,在下图这个例子中,显示的就是 6246347(21325 block confirmations)。这里面的 “21325 block confirmations” 就是说明该交易已经有了 21325 个区块确认,过段时间再看同一个交易,这个确认数会不断增加。


    etherscan 上的交易确认数

    究竟什么是 “确认”

    上面我们看到 imToken 和 etherscan 上显示的都有交易的确认数。那么究竟什么是 “确认”,我们该如何理解它呢?
    这就和区块链的链式结构有关了,一个极度抽象的区块链的链式结构是下面这个样子的。


    链式结构

    当我们提交一个交易,正常情况下,这个交易最终会被矿工放到某个区块中,这个时候,我们可以说,这笔交易获得了 0 个确认。当有另外一个区块链到这笔交易所在区块,也就是把这笔交易所在区块为父区块时,我们就说这笔交易获得了 1 个确认,以此类推。一笔交易获得了多少个确认,就是这笔交易所在区块后面又链接了多少个区块。

    那问题又来了,交易被打包到交易里面不就可以了么?为啥还要关注确认数呢?

    为啥要关注确认数

    因为区块链有可能分叉啊!!!

    区块链分叉
    如上图所示,如果我们的交易被悲催的打包到了蓝色区块里,交易就有被撤销的风险,因为当一个区块被认为是非主链时,区块里的交易都会被回滚,这个时候交易发送者再发起一笔交易就有可能把原来这笔交易冲掉。

    如何计算确认数

    公式很简单:确认数 = 当前区块高度 - 指定交易所在区块高度
    有的同学可能直接就知道怎么做了:

    1. 提交交易
    2. 通过交易回执获取交易所在区块高度,并记下该区块高度
    3. 定时获取当前区块高度
    4. 当前区块高度减去第 2 步记录的区块高度,得到确认数

    有毛病么?

    毛病大了
    这样去算确认数,和不算没有区别。

    正确的做法是怎样的呢?

    1. 提交交易,得到交易哈希
    2. 定时获取当前区块高度,并使用交易哈希获取交易所在区块高度,两者相减,得到确认数

    看到差别了么?

    确认数多少合适

    比特币是 6 个确认,以太坊是 12 个确认,EOS 是 15 个确认。

    每个交易都需要去监控确认数么

    一般来说,发生跨主体资产转移的交易,最好都进行确认数监控。常见的场景是从第三方接收一笔转账。
    像通过智能合约批量给用户空投代币这种场景,我看就算了吧,你说呢?

    结语

    实际做项目的时候,很多同学都不知道怎么去算这个确认数。写下此文,希望能给你带来一些帮助。还有什么不清楚的,欢迎给我留言或加我微信联系。

    相关文章

      网友评论

          本文标题:关于交易确认数的来龙去脉

          本文链接:https://www.haomeiwen.com/subject/abgbwftx.html