Submit_block如何提交区块

例如:输入只有两个值
“data”: [“0x54811ce986d5c3e57eaafab22cdd080e32209e39590e204a99b32935f835a13c01”, “0xc61a169ab30e7de7ceff6c3a75733d99fe742a8c”]

那是不是上面的两个值拼接起来得到:0x54811ce986d5c3e57eaafab22cdd080e32209e39590e204a99b32935f835a13c01c61a169ab30e7de7ceff6c3a75733d99fe742a8c再序列化后作为black2b的输入参数?

仅仅限于2个的时候, blake2b 这样做是对的,多个的时候,需要排列,2个2个地做 blake2b 向上计算出 root。节点的排列顺序就是我给的那个链接里面的那颗树的排列顺序。

结合文档里面的排列示例和 rust 算 root 的代码(只有20行),你再试试看用其他语言实现:

代码里面的 M::merge 就是你说的做一次 blake2b

如果输入两个值
“data”: [“0x54811ce986d5c3e57eaafab22cdd080e32209e39590e204a99b32935f835a13c01”, “0xc61a169ab30e7de7ceff6c3a75733d99fe742a8c”]

那么这两个值拼接起来得到0x54811ce986d5c3e57eaafab22cdd080e32209e39590e204a99b32935f835a13c01c61a169ab30e7de7ceff6c3a75733d99fe742a8c,然后序列化后进行blake2b得到witnesses_root为:0x236ef3704577689257389667c91edc4e459d37725cd0b36c14180b2fbfe58c7b

但是根据rust的挖矿源码把RawHeader解析出来得到的witnesses_root为0x604222b32b5a1bfb342d7b8487df249d6b0281b44f931eef41cb3bb31ab41a23,为什么计算得到的结果不一样?

如果输入有5个节点,那么排列是不是如下方式

输入的两个值长度不对,他们应该都是 32 Byte,是 transaction 带上 witness 算出来的 hash

对的,就是这样的排列

获取的数据是这样的,是不是把这两个数据拼接起来进行序列化,然后black2b算法

假如有2个数据ab, 是把a调用black2b算法得到h1, 把b调用black2b算法得到h2, 然后h1和h2拼接起来再进行black2b吗?

兄弟按这个流程算出witnesses_root 来了么?我用java的sdk去算transactions_root,也是怎么也算不出来。我获取现有的block 只有coinbase 交易的,去计算的

我没看过rs 只看了这里论坛的两个贴子的人提到的,公式主要根据这个给的去算

分别通过sdk的 serializeRawTransaction 和 serializeTransaction

计算 tx_hash,和witness_hash 字符串,分别放到数组里面。

然后由于我这里就只有一个交易,所以就跳过CMBT 的合并逻辑,就直接分别对这两个数组的唯一一个 hash 再做一次序列化获取最后的transaction_hashes_CBMT_root和transaction_witness_hashes_CBMT_root 的hash字符串。

最后就是再合并这两个hash字符串的序列化 Bytes 数组,再计算blake2b 获取最后的hash
但这个hash 和当前block 的transactions_root 值对不上

您好。我们在处理submit_block时遇到一些问题,可以帮忙解答一下吗。方便微信或者即时交流工具吗?我的邮箱是[email protected]