Address
如何從 golang 中的 pubkey 生成 bech32/segwit 地址
我正在嘗試使用以下程式碼在 golang 中生成 bech32/segwit 地址:
var pubkey *btcec.PubKey address, err := btcutil.NewAddressPubKey(pubkey.SerializeCompressed(), chainParams) if err != nil { log.Fatal(err) } address.SetFormat(btcutil.PKFCompressed) bech32Bytes, err := bech32.ConvertBits(address.ScriptAddress(), 8, 5, true) if err != nil { log.Fatal(err) } segwitaddr, err := bech32.Encode("tb", bech32Bytes) if err != nil { log.Fatal(err) }
也更簡單
var e *hdkeychain.ExtendedKey address, err := e.Address(chainParams) bech32Bytes, err := bech32.ConvertBits(address.ScriptAddress(), 8, 5, true) if err != nil { log.Fatal(err) } segwitaddr, err := bech32.Encode("tb", bech32Bytes) if err != nil { log.Fatal(err) }
但是
segwitaddr
生成的都沒有匹配我從<https://iancoleman.io/bip39/>獲得的 bip84 地址。上面的程式碼有什麼問題,或者如何從 pub 密鑰中正確獲取 bech32 地址?我查看了關於同一問題的另一篇文章,但無法弄清楚如何準備 golang 所需的數據。更具體地說,我在準備
[]byte
呼叫bech32.Encode()
和使用的輸入時感到困惑bech32.ConvertBits()
。
感謝modood/btckeygen,我找到了答案。
這是從 repo 中提取的相關程式碼。
witnessProg := btcutil.Hash160(pubkey.SerializeCompressed()) addressWitnessPubKeyHash, err := btcutil.NewAddressWitnessPubKeyHash(witnessProg, chainParams) if err != nil { panic(err) } address := addressWitnessPubKeyHash.EncodeAddress()