Electrum
Electrum 與 NBitcoin 的“腳本雜湊”形式?
通過查看文件,我了解到腳本是如何在電子(層)協議實現中散列的。
我正在使用 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 使用哪種字節序,但如果你最終需要反轉它,你不應該反轉單個字元,而是應該反轉原始字節,或者如果它是一個字元串,那麼在兩個字元的組。