32 lines
847 B
Go
32 lines
847 B
Go
|
package electrum
|
||
|
|
||
|
import (
|
||
|
"crypto/sha256"
|
||
|
"encoding/hex"
|
||
|
|
||
|
"github.com/btcsuite/btcd/btcutil"
|
||
|
"github.com/btcsuite/btcd/chaincfg"
|
||
|
"github.com/btcsuite/btcd/txscript"
|
||
|
)
|
||
|
|
||
|
// AddressToElectrumScriptHash converts valid bitcoin address to electrum scriptHash sha256 encoded, reversed and encoded in hex
|
||
|
// https://electrumx.readthedocs.io/en/latest/protocol-basics.html#script-hashes
|
||
|
func AddressToElectrumScriptHash(addressStr string) (string, error) {
|
||
|
address, err := btcutil.DecodeAddress(addressStr, &chaincfg.MainNetParams)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
script, err := txscript.PayToAddrScript(address)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
hashSum := sha256.Sum256(script)
|
||
|
|
||
|
for i, j := 0, len(hashSum)-1; i < j; i, j = i+1, j-1 {
|
||
|
hashSum[i], hashSum[j] = hashSum[j], hashSum[i]
|
||
|
}
|
||
|
|
||
|
return hex.EncodeToString(hashSum[:]), nil
|
||
|
}
|