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)
|
vout.Value = w.chainParser.AmountToDecimalString(&bchainVout.ValueSat)
|
||||||
valOutSat.Add(&valOutSat, &bchainVout.ValueSat)
|
valOutSat.Add(&valOutSat, &bchainVout.ValueSat)
|
||||||
vout.ScriptPubKey.Hex = bchainVout.ScriptPubKey.Hex
|
vout.ScriptPubKey.Hex = bchainVout.ScriptPubKey.Hex
|
||||||
|
vout.ScriptPubKey.Addresses, vout.ScriptPubKey.Searchable, err = w.getAddressesFromVout(bchainVout)
|
||||||
vout.ScriptPubKey.Addresses = bchainVout.ScriptPubKey.Addresses
|
|
||||||
if spendingTxs {
|
if spendingTxs {
|
||||||
// TODO
|
// 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
|
// GetAddressesFromAddrDesc returns addresses for given address descriptor with flag if the addresses are searchable
|
||||||
func (p *BitcoinParser) GetAddressesFromAddrDesc(addrDesc []byte) ([]string, bool, error) {
|
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
|
// GetScriptFromAddrDesc returns output script for given address descriptor
|
||||||
@ -97,6 +97,27 @@ func (p *BitcoinParser) outputScriptToAddresses(script []byte) ([]string, bool,
|
|||||||
var s bool
|
var s bool
|
||||||
if sc != txscript.NonStandardTy && sc != txscript.NullDataTy {
|
if sc != txscript.NonStandardTy && sc != txscript.NullDataTy {
|
||||||
s = true
|
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
|
return rv, s, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -102,10 +102,16 @@ func Test_GetAddressesFromAddrDesc(t *testing.T) {
|
|||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// TODO handle OP_RETURN better
|
name: "OP_RETURN ascii",
|
||||||
name: "OP_RETURN",
|
|
||||||
args: args{script: "6a0461686f6a"},
|
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,
|
want2: false,
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -18,12 +18,11 @@
|
|||||||
<td>
|
<td>
|
||||||
{{range $a := $vin.Addresses}}
|
{{range $a := $vin.Addresses}}
|
||||||
<span class="ellipsis float-left">
|
<span class="ellipsis float-left">
|
||||||
{{if eq $a $addr}}{{$a}}{{else}}
|
{{if and (ne $a $addr) $vin.Searchable}}<a href="/explorer/address/{{$a}}">{{$a}}</a>{{else}}{{$a}}{{end}}
|
||||||
<a href="/explorer/address/{{$a}}">{{$a}}</a>{{end}}
|
|
||||||
</span>
|
</span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="float-left">No Inputs (Newly Generated Coins)</span>
|
<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>
|
<span class="float-right{{if stringInSlice $addr $vin.Addresses}} text-danger{{end}}">{{formatAmount $vin.Value}} {{$cs}}</span>
|
||||||
{{end}}
|
{{end}}
|
||||||
</td>
|
</td>
|
||||||
@ -47,8 +46,7 @@
|
|||||||
<td>
|
<td>
|
||||||
{{range $a := $vout.ScriptPubKey.Addresses}}
|
{{range $a := $vout.ScriptPubKey.Addresses}}
|
||||||
<span class="ellipsis float-left">
|
<span class="ellipsis float-left">
|
||||||
{{if eq $a $addr}}{{$a}}{{else}}
|
{{if and (ne $a $addr) $vout.ScriptPubKey.Searchable}}<a href="/explorer/address/{{$a}}">{{$a}}</a>{{else}}{{$a}}{{end}}
|
||||||
<a href="/explorer/address/{{$a}}">{{$a}}</a>{{end}}
|
|
||||||
</span>
|
</span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="float-left">Unparsed address</span>
|
<span class="float-left">Unparsed address</span>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user