From 984f24a76dece5f8e0dbe3e39c605db76548784e Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Mon, 3 Sep 2018 15:44:03 +0200 Subject: [PATCH] Handle pay-to-pubkey addresses in Bcash --- bchain/coins/bch/bcashparser.go | 26 ++++++++++++++++++++------ bchain/coins/bch/bcashparser_test.go | 8 ++++++++ static/templates/txdetail.html | 9 ++++++++- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/bchain/coins/bch/bcashparser.go b/bchain/coins/bch/bcashparser.go index 428e80b4..3aae771b 100644 --- a/bchain/coins/bch/bcashparser.go +++ b/bchain/coins/bch/bcashparser.go @@ -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() diff --git a/bchain/coins/bch/bcashparser_test.go b/bchain/coins/bch/bcashparser_test.go index 7d98cea6..d9e38ac7 100644 --- a/bchain/coins/bch/bcashparser_test.go +++ b/bchain/coins/bch/bcashparser_test.go @@ -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, diff --git a/static/templates/txdetail.html b/static/templates/txdetail.html index f352700c..ac22828b 100644 --- a/static/templates/txdetail.html +++ b/static/templates/txdetail.html @@ -51,7 +51,14 @@ {{else}} Unparsed address {{end}} - {{formatAmount $vout.Value}} {{$cs}} + + {{formatAmount $vout.Value}} {{$cs}} + {{if $vout.Spent}} + (S) + {{else}} + (U) + {{end}} + {{end}}