Implement view of OP_RETURN scripts

This commit is contained in:
Martin Boehm 2018-08-30 15:25:03 +02:00
parent 82c64ae947
commit 1a931d8a65
4 changed files with 35 additions and 11 deletions

View File

@ -112,8 +112,7 @@ func (w *Worker) GetTransaction(txid string, bestheight uint32, spendingTxs bool
vout.Value = w.chainParser.AmountToDecimalString(&bchainVout.ValueSat)
valOutSat.Add(&valOutSat, &bchainVout.ValueSat)
vout.ScriptPubKey.Hex = bchainVout.ScriptPubKey.Hex
vout.ScriptPubKey.Addresses = bchainVout.ScriptPubKey.Addresses
vout.ScriptPubKey.Addresses, vout.ScriptPubKey.Searchable, err = w.getAddressesFromVout(bchainVout)
if spendingTxs {
// TODO
}

View File

@ -63,7 +63,7 @@ func (p *BitcoinParser) GetAddrDescFromAddress(address string) ([]byte, error) {
// GetAddressesFromAddrDesc returns addresses for given address descriptor with flag if the addresses are searchable
func (p *BitcoinParser) GetAddressesFromAddrDesc(addrDesc []byte) ([]string, bool, error) {
return p.outputScriptToAddresses(addrDesc)
return p.OutputScriptToAddressesFunc(addrDesc)
}
// GetScriptFromAddrDesc returns output script for given address descriptor
@ -97,6 +97,27 @@ func (p *BitcoinParser) outputScriptToAddresses(script []byte) ([]string, bool,
var s bool
if sc != txscript.NonStandardTy && sc != txscript.NullDataTy {
s = true
} else {
if len(script) > 1 && script[0] == txscript.OP_RETURN && len(rv) == 0 {
l := int(script[1])
data := script[2:]
if l == len(data) {
isASCII := true
for _, c := range data {
if c < 32 || c > 127 {
isASCII = false
break
}
}
var ed string
if isASCII {
ed = "(" + string(data) + ")"
} else {
ed = hex.EncodeToString([]byte{byte(l)}) + " " + hex.EncodeToString(data)
}
rv = []string{"OP_RETURN " + ed}
}
}
}
return rv, s, nil
}

View File

@ -102,10 +102,16 @@ func Test_GetAddressesFromAddrDesc(t *testing.T) {
wantErr: false,
},
{
// TODO handle OP_RETURN better
name: "OP_RETURN",
name: "OP_RETURN ascii",
args: args{script: "6a0461686f6a"},
want: []string{},
want: []string{"OP_RETURN (ahoj)"},
want2: false,
wantErr: false,
},
{
name: "OP_RETURN hex",
args: args{script: "6a072020f1686f6a20"},
want: []string{"OP_RETURN 07 2020f1686f6a20"},
want2: false,
wantErr: false,
},

View File

@ -18,12 +18,11 @@
<td>
{{range $a := $vin.Addresses}}
<span class="ellipsis float-left">
{{if eq $a $addr}}{{$a}}{{else}}
<a href="/explorer/address/{{$a}}">{{$a}}</a>{{end}}
{{if and (ne $a $addr) $vin.Searchable}}<a href="/explorer/address/{{$a}}">{{$a}}</a>{{else}}{{$a}}{{end}}
</span>
{{else}}
<span class="float-left">No Inputs (Newly Generated Coins)</span>
{{end}} {{if $vin.Addresses}}
{{end}}{{if $vin.Addresses}}
<span class="float-right{{if stringInSlice $addr $vin.Addresses}} text-danger{{end}}">{{formatAmount $vin.Value}} {{$cs}}</span>
{{end}}
</td>
@ -47,8 +46,7 @@
<td>
{{range $a := $vout.ScriptPubKey.Addresses}}
<span class="ellipsis float-left">
{{if eq $a $addr}}{{$a}}{{else}}
<a href="/explorer/address/{{$a}}">{{$a}}</a>{{end}}
{{if and (ne $a $addr) $vout.ScriptPubKey.Searchable}}<a href="/explorer/address/{{$a}}">{{$a}}</a>{{else}}{{$a}}{{end}}
</span>
{{else}}
<span class="float-left">Unparsed address</span>