使用bsv库双哈希两个tx构造默克尔树结果错误如何解决
问题原因
你得到错误结果的核心原因是不符合比特币默克尔树的字节序计算规则:日常显示的交易ID是双SHA256运算结果反转字节后输出的十六进制字符串,构造默克尔树时需要先将交易ID对应的字节序列反转回原始哈希的字节顺序,再进行拼接哈希,最终输出时还要再反转运算结果的字节才能得到正确的默克尔根显示值。
修正后代码
const bsv = require("bsv"); var tx1 = '3a459eab5f0cf8394a21e04d2ed3b2beeaa59795912e20b9c680e9db74dfb18c'; var tx2 = 'be38f46f0eccba72416aed715851fd07b881ffb7928b7622847314588e06a6b7'; // 每个交易ID先转Buffer再反转字节序,再完成拼接 const concatBuffer = Buffer.concat( [tx1, tx2].map(v => Buffer.from(v, 'hex').reverse()) ); // 双SHA256运算后反转结果字节,再转十六进制字符串 const merkleRoot = bsv.crypto.Hash.sha256sha256(concatBuffer).reverse().toString('hex'); console.log(merkleRoot);
运行上述代码即可得到预期结果 13a3595f2610c8e4d727130daade66c772fdec4bd2463d773fd0f85c20ced32d。
内容的提问来源于stack exchange,提问作者mpapec
相关产品推荐
相关产品推荐

