Handle pay-to-pubkey addresses in Bcash
This commit is contained in:
parent
1b69a62ab8
commit
984f24a76d
@ -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()
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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}}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user