從公共地址格式轉換為原始交易格式
所以我試圖完全理解如何解碼交易。在開發文件中,它討論了原始交易:https ://developer.bitcoin.org/reference/transactions.html 在“TxOut:交易輸出”段落中有一個範例。在該範例的底部附近,它解碼了比特幣腳本。它顯示您將標記為公鑰的 20 個字節推入堆棧。
cbc20a7664f2f69e5355aa427045bc15e7c6c772
該值是從來自公鑰的“createrawtransaction”cli 函式自動生成的。它特別引用了此處的範例 <https://developer.bitcoin.org/examples/transactions.html#simple-raw-transaction> 它說
NEW_ADDRESS=mz6KvC4aoUeo6wSxtiVQTo7FDwPnkp6URG
他們從哪裡來
mz6KvC4aoUeo6wSxtiVQTo7FDwPnkp6URG
到
cbc20a7664f2f69e5355aa427045bc15e7c6c772
? 它沒有在文件中的任何地方說明。這只是閱讀原始碼的情況嗎?我應該說我已經嘗試將地址插入許多不同的雜湊計算器。我從來沒有得到相同的結果。
目前比特幣中定義了 3 種地址類型:
satoshi 時代的 P2PKH 格式,即 Base58 編碼(1 字節版本前綴)+(20 字節 pubkeyhash)+(4 字節校驗和)。校驗和是其前面 21 個字節的雙 SHA256 散列的前 4 個字節。主網版本號為0;很容易找到其他網路的前綴列表。
- 它對腳本進行編碼
OP_DUP OP_HASH160 <that pubkeyhash> OP_EQUALVERIFY OP_CHECKSIG
BIP 13 和 BIP 16 中指定的 P2SH 格式。它遵循與 P2PKH 地址相同的結構,但版本號不同,它不是公鑰雜湊,而是腳本雜湊。
- 它對腳本進行編碼
OP_HASH160 <that scripthash> OP_EQUAL
。BIP 173 中引入的原生見證地址格式它使用完全不同的 base-32 編碼(稱為 Bech32)數據(5 位見證版本號)+(可變長度見證程序)。
- 它對腳本進行編碼
OP_(witnessversion) <witness program>
(有關此類腳本的語義,請參見 BIP 141)。- 編碼在 BIP 350 中進行了修改,以對見證版本 1 及更高版本使用略有不同的校驗和算法。
一般來說,如果您正在尋找規範,那麼 BIP 就是您要尋找的地方,當然,除了早於 BIP 流程的協議/標準方面。