Fix ETH address API - some tokens are missing #271

This commit is contained in:
Martin Boehm 2019-09-30 17:28:10 +02:00
parent ac9a721cc6
commit 4eff57189d
2 changed files with 24 additions and 0 deletions

View File

@ -2,11 +2,13 @@ package eth
import (
"blockbook/bchain"
"bytes"
"context"
"encoding/hex"
"math/big"
"strings"
"sync"
"unicode/utf8"
ethcommon "github.com/ethereum/go-ethereum/common"
"github.com/golang/glog"
@ -150,6 +152,18 @@ func parseErc20StringProperty(contractDesc bchain.AddressDescriptor, data string
}
}
}
} else if len(data) == 64 {
// allow string properties as 32 bytes of UTF-8 data
b, err := hex.DecodeString(data)
if err == nil {
i := bytes.Index(b, []byte{0})
if i > 0 {
b = b[:i]
}
if utf8.Valid(b) {
return string(b)
}
}
}
if glog.V(1) {
glog.Warning("Cannot parse '", data, "' for contract ", contractDesc)

View File

@ -128,6 +128,16 @@ func TestErc20_parseErc20StringProperty(t *testing.T) {
args: "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000022426974436c617665202d20436f6e73756d657220416374697669747920546f6b656e00000000000000",
want: "BitClave - Consumer Activity Token",
},
{
name: "short",
args: "0x44616920537461626c65636f696e2076312e3000000000000000000000000000",
want: "Dai Stablecoin v1.0",
},
{
name: "short2",
args: "0x44616920537461626c65636f696e2076312e3020444444444444444444444444",
want: "Dai Stablecoin v1.0 DDDDDDDDDDDD",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {