測試網地址的公鑰
我正在嘗試(手動)在測試網上創建交易。我有以下私鑰:
cQKqSNkEdyLJziQSr4iKTUJC95s9HHFo4bY88gi2i6v2quiVVLZb
屬於以下公共地址:mkhn3gfrGHmd4b1ZmHLdMsbQd2eHRKg8wN
. 當我嘗試簽署交易時,我生成的公共(未壓縮)密鑰是:042d7331345e0da6ab1125eb39488a542a9923f31c585c20114d211a9f6bc9f3bf55d1d843cb7cf1d36b32d1cb00d2f140ef028e726a19a766f6ca7cef7b956583
. 事實證明這是無效的(因為交易被網路拒絕)。但是,當我嘗試使用工具對交易進行簽名時,它生成了以下(正確的)公鑰:040b4a4274222d7239d33c17ce39d753eee97103773b7e5a89e62f0ef0121032d7331345e0da6ab1125eb39488a542a9923f31c585c20114d211a9f6bc9f3b
.這些鍵有什麼區別?為什麼第一個在簽署 tx 時不正確,但在我為其生成公共地址時正確?
一些觀察:私鑰與第一個壓縮地址(mkhn3 …)匹配。它適合十六進制的公鑰,見下文。這裡描述了密鑰的派生方式 - 另見圖片。 <http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html>
一旦你有了十六進制的公鑰,有以下 8 個步驟來獲得最終的比特幣地址:
1 - Public ECDSA Key 2 - SHA-256 hash of 1 3 - RIPEMD-160 Hash of 2 4 - Adding network bytes to 3 5 - SHA-256 hash of 4 6 - SHA-256 hash of 5 7 - First four bytes of 6 8 - Adding 7 at the end of 4 9 - Base58 encoding of 8
第一個未壓縮的公鑰(適合私鑰):
042d7331345e0da6ab1125eb39488a542a9923f31c585c20114d211a9f6bc9f3bf55d1d843cb7cf1d36b32d1cb00d2f140ef028e726a19a766f6ca7cef7b956583
將轉換成這個比特幣地址:
myfp2YcyYjksxmdfA74yEuBmaUgt9xWCot
和你的第二個未壓縮的公鑰
040b4a4274222d7239d33c17ce39d753eee97103773b7e5a89e62f0ef0121032d7331345e0da6ab1125eb39488a542a9923f31c585c20114d211a9f6bc9f3b
將轉換為這個比特幣地址:
mmKUwoRgd9YdvRYYXGyumjduRMTAPCnkMz
我不確定您使用哪些工具來創建密鑰,看起來您在使用壓縮密鑰和未壓縮密鑰之間存在差距。Andreas 的線上書籍(“Mastering Bitcoin, 2nd edition”)提供了一個很好的參考,它也可以線上閱讀(參見第 4 章…)。