Electrum

Electrum 與 NBitcoin 的“腳本雜湊”形式?

  • June 28, 2019

通過查看文件,我了解到腳本是如何在電子(層)協議實現中散列的。

我正在使用 NBitcoin,我嘗試從隔離見證地址生成此雜湊,首先是這樣:

myPublicKey.WitHash.ScriptPubKey.Hash.ToString()

但是,電子伺服器會拋出一個錯誤,指出此雜湊無效。我猜是因為這個雜湊是 HASH160 類型,而不是文件聲稱的 SHA256 類型?(正如我所見,這種技術生成的散列與出現在這樣的頁面中地址下方的散列相同

另外我想知道我是否需要自己反轉字元鏈,或者 NBitcoin 的 SHA256 方法是否會為我做?總而言之,如何使用 NBitcoin API 獲取這個雜湊值,讓 Electrum 伺服器滿意?

在 F# 中:

let address = BitcoinAddress.Create("1HLoD9E4SDFFPDiYfNYnkBLQ85Y51J3Zb1", 
                                   NBitcoin.Network.Main)
let sha = NBitcoin.Crypto.Hashes.SHA256(address.ScriptPubKey.ToBytes())
let reversedSha = sha.Reverse().ToArray() // add `open System.Linq` at the top
NBitcoin.DataEncoders.Encoders.Hex.EncodeData reversedSha

Electrum 伺服器期望腳本通過它們的 sha256 雜湊來查詢,無論腳本類型如何。這個名字script hash有點令人困惑——它實際上只是意味著取腳本的 sha256。您應該使用一種裸sha256方法Hash,而不是那種似乎對數據進行雜湊處理以用於比特幣交易的方法。我不確定 NBitcoin 使用哪種字節序,但如果你最終需要反轉它,你不應該反轉單個字元,而是應該反轉原始字節,或者如果它是一個字元串,那麼在兩個字元的組。

引用自:https://bitcoin.stackexchange.com/questions/83615