【问题标题】:How to construct bitcoin Merkle tree?如何构建比特币默克尔树?
【发布时间】:2021-08-02 18:24:18
【问题描述】:

我正在学习比特币挖矿协议,但是,我对创建 Merkle 树感到困惑。假设 1 有 1 个 coinbase 交易和 3 个交易 id。如下图所示的流程/粘贴是否正确?

据我了解,在计算双 sha256 哈希之前,必须先将所有 coinbase 和 transaction id 更改为 little-endian。

coinbase 的哈希将成为第一个叶子,tx1 成为第二个叶子,tx3 成为最后一个叶子。

然后在双散列之前再次组合2个散列,因此该过程沿着金字塔结构向上直到找到根,然后再将其更改回大端。

希望有人可以指导我。提前致谢

【问题讨论】:

    标签: c++ tree bitcoin


    【解决方案1】:

    对于 coinbase tx,所有事情都在这里进行
    https://github.com/alexeyneu/BlockZero/blob/73744a4ae93e367d617692b2f2d81fbf88143715/BlockZero.cpp#L80-L82

    SHA256(serializedData, sizeof transaction + 1 + scriptSig_length, hash1);  /* + 1 coz of serializedData[sizeone]*/
    blockheader block_header = {1/*version*/,{}/*hprev*/,{}/*merk*/,unixtime == 0 ? time(NULL) : unixtime ,nBits ,startNonce };
    SHA256(hash1, 32, block_header.merk);// hash it with SHA256 and then hash that result to get merkle hash
    

    我可以对图片说些什么:
    小印度的东西取决于你是如何从想要看到它的人那里收到这一切的。大端主要用于显示目的。如果你自己抓住它,你已经拥有它了。我不明白“tx in big endian”是什么意思。以及“转换为 le”是什么意思。那里有一个脚本,如果你决定“转换”它……不知道该说什么

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 2013-04-18
      • 2014-02-13
      • 2019-05-17
      • 1970-01-01
      • 2019-06-04
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多