Fix monacoin parser

This commit is contained in:
Martin Boehm 2018-10-01 14:02:13 +02:00
parent 6c4204e93f
commit e37ec52d5b

View File

@ -65,7 +65,9 @@ type MonacoinParser struct {
// NewMonacoinParser returns new MonacoinParser instance
func NewMonacoinParser(params *chaincfg.Params, c *btc.Configuration) *MonacoinParser {
return &MonacoinParser{BitcoinParser: btc.NewBitcoinParser(params, c)}
p := &MonacoinParser{BitcoinParser: btc.NewBitcoinParser(params, c)}
p.OutputScriptToAddressesFunc = p.outputScriptToAddresses
return p
}
// GetChainParams contains network parameters for the main Monacoin network,
@ -82,17 +84,6 @@ func GetChainParams(chain string) *chaincfg.Params {
}
}
// GetMonaChainParams contains network parameters for the main Monacoin network,
// and the test Monacoin network
func GetMonaChainParams(chain string) *monacoinCfg.Params {
switch chain {
case "test":
return &MonaTestParams
default:
return &MonaMainParams
}
}
// GetAddrDescFromAddress returns internal address representation (descriptor) of given address
func (p *MonacoinParser) GetAddrDescFromAddress(address string) (bchain.AddressDescriptor, error) {
return p.addressToOutputScript(address)
@ -123,3 +114,52 @@ func (p *MonacoinParser) addressToOutputScript(address string) ([]byte, error) {
return script, nil
}
}
// GetAddressesFromAddrDesc returns addresses for given address descriptor with flag if the addresses are searchable
func (p *MonacoinParser) GetAddressesFromAddrDesc(addrDesc bchain.AddressDescriptor) ([]string, bool, error) {
return p.OutputScriptToAddressesFunc(addrDesc)
}
// outputScriptToAddresses converts ScriptPubKey to bitcoin addresses
func (p *MonacoinParser) outputScriptToAddresses(script []byte) ([]string, bool, error) {
switch p.Params.Net {
case MainnetMagic:
sc, addresses, _, err := txscript.ExtractPkScriptAddrs(script, &MonaMainParams)
if err != nil {
return nil, false, err
}
rv := make([]string, len(addresses))
for i, a := range addresses {
rv[i] = a.EncodeAddress()
}
var s bool
if sc != txscript.NonStandardTy && sc != txscript.NullDataTy {
s = true
} else if len(rv) == 0 {
or := btc.TryParseOPReturn(script)
if or != "" {
rv = []string{or}
}
}
return rv, s, nil
default:
sc, addresses, _, err := txscript.ExtractPkScriptAddrs(script, &MonaTestParams)
if err != nil {
return nil, false, err
}
rv := make([]string, len(addresses))
for i, a := range addresses {
rv[i] = a.EncodeAddress()
}
var s bool
if sc != txscript.NonStandardTy && sc != txscript.NullDataTy {
s = true
} else if len(rv) == 0 {
or := btc.TryParseOPReturn(script)
if or != "" {
rv = []string{or}
}
}
return rv, s, nil
}
}