比特币脚本是如何验证的?

2018-04-07 18:22:33 +08:00
 DsHale

最近在学习比特币相关技术,看到 Mastering Bitcoin 第六章 Pay-to-Public-Key-Hash (P2PKH) 的时候,按照书中的步骤准备计算一下这个验证脚本,步骤如下图所示

打开书中所提及的交易细节: Input Scripts:

ScriptSig: 
PUSHDATA(72)[3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301] 
PUSHDATA(65)[0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf]

然后追踪到这个交易中输入的交易 在这个交易的细节中我们可以看到 Output Scripts:

DUP HASH160 PUSHDATA(20)[7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8] EQUALVERIFY CHECKSIG 

使用一个在线计算器 按照书中所示计算结果为:RIPMED160(SHA256(Pubk)) = "6df13de1f1d824380834e0d42e49e5e451a647cf" 与 Output Scripts 中的 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 明显不相等,我想知道我哪里理解错了。

454 次点击
所在节点    Bitcoin
2 条回复
acess
2018-04-07 22:23:19 +08:00
我算了一下,没问题啊:
PubKey=0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf
SHA256(PubKey)=98F8648ABB4E1333AFAC93709DEAE013C59C72F745DE8F09041FF5295493B001
RIPEMD160(SHA256(PubKey))=7F9B1A7FB68D60C536C2FD8AEAA53A8F3CC025A8
LZ 中途是不是把 字符串 和 十六进制数据 混淆了?
acess
2018-04-07 22:24:05 +08:00
还有一个老梗值得贴一下:
《 Mastering Bitcoin 》中的错误代码可能会导致你的比特币丢失
https://www.solidot.org/story?sid=55390

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/444881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX