This commit is contained in:
Viktor Trón 2015-11-27 13:14:49 +00:00
commit 18f4f58e6c
2 changed files with 17 additions and 9 deletions

View file

@ -23,9 +23,14 @@ import (
"encoding/hex"
"fmt"
"math/big"
"regexp"
"strings"
)
var (
hexRe = regexp.MustCompile("^(0x)?([a-fA-f0-9]{2})+$")
)
func ToHex(b []byte) string {
hex := Bytes2Hex(b)
// Prefer output of "0x0" instead of "0x"
@ -139,8 +144,14 @@ func HasHexPrefix(str string) bool {
}
func IsHex(str string) bool {
l := len(str)
return l >= 4 && l%2 == 0 && str[0:2] == "0x"
return hexRe.MatchString(str)
}
func NormaliseHex(str string) (string, bool) {
if HasHexPrefix(str) {
str = str[2:]
}
return str, IsHex(str)
}
func Bytes2Hex(d []byte) string {
@ -202,8 +213,8 @@ func ParseData(data ...interface{}) (ret []byte) {
switch t := item.(type) {
case string:
var str []byte
if IsHex(t) {
str = Hex2Bytes(t[2:])
if n, ok := NormaliseHex(t); ok {
str = Hex2Bytes(n)
} else {
str = []byte(t)
}

View file

@ -95,11 +95,8 @@ func HexToAddress(s string) Address { return BytesToAddress(FromHex(s)) }
// IsHexAddress verifies whether a string can represent a valid hex-encoded
// Ethereum address or not.
func IsHexAddress(s string) bool {
if len(s) == 2+2*AddressLength && IsHex(s[2:]) {
return true
}
if len(s) == 2*AddressLength && IsHex(s) {
return true
if s, ok := NormaliseHex(s); ok {
return len(s) == 2*AddressLength
}
return false
}