From 54ddfa9e03fd2922308ac7ecee06fa35d0280ded Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Mon, 5 Mar 2018 16:54:05 +0100 Subject: [PATCH] Refactore address conversion functions to bitcoinwire.go --- bchain/bitcoinwire.go | 29 ++++++++++++----- bchain/{types_test.go => bitcoinwire_test.go} | 0 bchain/types.go | 31 ------------------- 3 files changed, 22 insertions(+), 38 deletions(-) rename bchain/{types_test.go => bitcoinwire_test.go} (100%) diff --git a/bchain/bitcoinwire.go b/bchain/bitcoinwire.go index 2c8b36ad..6ddb5ff9 100644 --- a/bchain/bitcoinwire.go +++ b/bchain/bitcoinwire.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "github.com/btcsuite/btcd/blockchain" + "github.com/btcsuite/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/txscript" @@ -27,16 +28,30 @@ type BitcoinBlockParser struct { Params *chaincfg.Params } -func (p *BitcoinBlockParser) parseOutputScript(b []byte) ([]string, error) { - _, addresses, _, err := txscript.ExtractPkScriptAddrs(b, p.Params) +// AddressToOutputScript converts bitcoin address to ScriptPubKey +func AddressToOutputScript(address string) ([]byte, error) { + da, err := btcutil.DecodeAddress(address, GetChainParams()[0]) if err != nil { return nil, err } - addrs := make([]string, len(addresses)) - for i, a := range addresses { - addrs[i] = a.EncodeAddress() + script, err := txscript.PayToAddrScript(da) + if err != nil { + return nil, err } - return addrs, nil + return script, nil +} + +// OutputScriptToAddresses converts ScriptPubKey to bitcoin addresses +func OutputScriptToAddresses(script []byte) ([]string, error) { + _, addresses, _, err := txscript.ExtractPkScriptAddrs(script, GetChainParams()[0]) + if err != nil { + return nil, err + } + rv := make([]string, len(addresses)) + for i, a := range addresses { + rv[i] = a.EncodeAddress() + } + return rv, nil } func (p *BitcoinBlockParser) ParseBlock(b []byte) (*Block, error) { @@ -71,7 +86,7 @@ func (p *BitcoinBlockParser) ParseBlock(b []byte) (*Block, error) { } vout := make([]Vout, len(t.TxOut)) for i, out := range t.TxOut { - // addrs, err := p.parseOutputScript(out.PkScript) + // addrs, err := OutputScriptToAddresses(out.PkScript) // if err != nil { // addrs = []string{} // } diff --git a/bchain/types_test.go b/bchain/bitcoinwire_test.go similarity index 100% rename from bchain/types_test.go rename to bchain/bitcoinwire_test.go diff --git a/bchain/types.go b/bchain/types.go index fb3ce443..cf7b8057 100644 --- a/bchain/types.go +++ b/bchain/types.go @@ -1,10 +1,5 @@ package bchain -import ( - "github.com/btcsuite/btcd/txscript" - "github.com/btcsuite/btcutil" -) - type ScriptSig struct { // Asm string `json:"asm"` Hex string `json:"hex"` @@ -31,32 +26,6 @@ type Vout struct { ScriptPubKey ScriptPubKey `json:"scriptPubKey"` } -// AddressToOutputScript converts bitcoin address to ScriptPubKey -func AddressToOutputScript(address string) ([]byte, error) { - da, err := btcutil.DecodeAddress(address, GetChainParams()[0]) - if err != nil { - return nil, err - } - script, err := txscript.PayToAddrScript(da) - if err != nil { - return nil, err - } - return script, nil -} - -// OutputScriptToAddresses converts ScriptPubKey to bitcoin addresses -func OutputScriptToAddresses(script []byte) ([]string, error) { - _, addresses, _, err := txscript.ExtractPkScriptAddrs(script, GetChainParams()[0]) - if err != nil { - return nil, err - } - rv := make([]string, len(addresses)) - for i, a := range addresses { - rv[i] = a.EncodeAddress() - } - return rv, nil -} - // Tx is blockchain transaction // unnecessary fields are commented out to avoid overhead type Tx struct {