Implement view of OP_RETURN scripts
This commit is contained in:
parent
82c64ae947
commit
1a931d8a65
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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,
|
||||
},
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user