Handle pay-to-pubkey addresses in Bcash

This commit is contained in:
Martin Boehm 2018-09-03 15:44:03 +02:00
parent 1b69a62ab8
commit 984f24a76d
3 changed files with 36 additions and 7 deletions

View File

@ -128,14 +128,28 @@ func (p *BCashParser) outputScriptToAddresses(script []byte) ([]string, bool, er
if err != nil {
// do not return unknown script type error as error
if err.Error() == "unknown script type" {
// try OP_RETURN script
or := btc.TryParseOPReturn(script)
if or != "" {
return []string{or}, false, nil
// try bitcoin parser to parse P2PK scripts - kind of hack as bchutil does not support pay-to-pubkey
_, addresses, _, err := txscript.ExtractPkScriptAddrs(script, p.Params)
if err == nil && len(addresses) == 1 {
// convert the address back to output script and back to get from bitcoin to bcash
s, err := p.addressToOutputScript(addresses[0].EncodeAddress())
if err == nil {
a, err = bchutil.ExtractPkScriptAddrs(s, p.Params)
if err != nil {
return []string{}, false, nil
}
}
} else {
// try OP_RETURN script
or := btc.TryParseOPReturn(script)
if or != "" {
return []string{or}, false, nil
}
return []string{}, false, nil
}
return []string{}, false, nil
} else {
return nil, false, err
}
return nil, false, err
}
// EncodeAddress returns CashAddr address
addr := a.EncodeAddress()

View File

@ -138,6 +138,14 @@ func Test_GetAddressesFromAddrDesc(t *testing.T) {
hex: "a91488f772450c830a30eddfdc08a93d5f2ae1a30e1787",
wantErr: false,
},
{
name: "main-P2PK",
parser: mainParserCashAddr,
addresses: []string{"bitcoincash:qqr95pwp0w5jqnh9vcjl4qm4x45atr0er57n49pq75"},
searchable: true,
hex: "2103db3c3977c5165058bf38c46f72d32f4e872112dbafc13083a948676165cd1603ac",
wantErr: false,
},
{
name: "OP_RETURN ascii",
parser: mainParserCashAddr,

View File

@ -51,7 +51,14 @@
{{else}}
<span class="float-left">Unparsed address</span>
{{end}}
<span class="float-right{{if stringInSlice $addr $vout.ScriptPubKey.Addresses}} text-success{{end}}">{{formatAmount $vout.Value}} {{$cs}}</span>
<span class="float-right{{if stringInSlice $addr $vout.ScriptPubKey.Addresses}} text-success{{end}}">
{{formatAmount $vout.Value}} {{$cs}}
{{if $vout.Spent}}
<span class="text-danger">(S)</span>
{{else}}
<span class="text-success">(U)</span>
{{end}}
</span>
</td>
</tr>
{{end}}