為什麼不在原始交易中使用地址而不是公鑰字節
在原始交易中,比特幣使用公鑰字節,例如:
042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9
它需要很多字節。
從技術上講,我們可以使用比特幣地址(例如
1MBngSqZbMydscpzSoehjP8kznMaHAzh9y
)來使塊更小嗎?
在原始交易中,比特幣使用公鑰的字節,例如:042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a911379990818d17c7a
從技術上講,原始交易包含腳本,通常使用比特幣腳本編寫,該腳本是一種基於堆棧的語言。它可以在舊腳本中包含 PubKey,例如 P2PK,但社區正在努力讓比特幣使用者使用包含公鑰雜湊的腳本。像 Pay-to-Public-Key-Hash (P2PKH) 或 pay-to-witness-public-key-hash (P2WPKH) 這樣的腳本。
從腳本中,可以計算地址,但反之則不行。
總之,所有地址都有如下轉換:
- P2PK、P2PKH:從 1 開始。
- P2SH:從 3 開始。
- P2WSH、P2WPKH:以 bc 或 3 開頭。
此時,答案應該包含所有腳本類型的簡歷以及腳本的建構方式,以及對閃電網路協議中廣泛使用的非標準腳本的介紹。
但是我認為比特幣書籍“交易”和“高級交易和腳本”的這兩章中有一個很好的總結,我不能做得更好
更新
我不是理論的粉絲,也許你也可以使用這個程式碼範例來了解腳本是如何在比特幣地址上轉換的。 反編譯器比特幣腳本。
這只是可以完成的轉換的一個範例。
範常式式碼的用法在 bash 腳本run-decompiler.sh中進行了描述
帶有以下塊的範例如下
./Decompiler 76a914536ffa992491508dca0354e52f32a3a7a679a53a88ac
結果如下
----------------------------------------| Results |----------------------------------- ### Script PAY TO PUBLIC KEY HASH ### Raw Script PubKey: 76a914536ffa992491508dca0354e52f32a3a7a679a53a88ac OP_DUP OP_HASH160 536ffa992491508dca0354e52f32a3a7a679a53a OP_EQUALVERIFY OP_CHECKSIG The address: 18cBEMRxXHqzWWCxZNtU91F5sbUNKhL5PX The Hash160 pubkey: 536ffa992491508dca0354e52f32a3a7a679a53a The P2PSH address: 39JC9tvQ5CANbfuPgUZ4Zdc227m5uQnMRB https://blockstream.info/address/18cBEMRxXHqzWWCxZNtU91F5sbUNKhL5PX ______________________________________________________________________________________
在此處查看結果<https://blockstream.info/address/18cBEMRxXHqzWWCxZNtU91F5sbUNKhL5PX>
請將此範例視為程式碼範例,我開發此範例是為了了解腳本的工作原理。可以包含錯誤。我將努力將其整合到我的項目中,並維護此文章更新。
回答你的評論是
謝謝。我用你連結的程式碼,結果地址 codepad.org/nRJhvMC3 與預期地址不匹配 blockchain.com/btc/block/1 那麼這個反編譯器有什麼用?
如果是標準腳本,反編譯器會獲取
hex
腳本並嘗試計算相應的地址。