aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2017-02-27 02:40:33 +0800
committerFelix Lange <fjl@twurst.com>2017-03-02 21:05:46 +0800
commit280f08be84325924ea7628a8187fd84e7cc39145 (patch)
treec7b5a3c639e5c617004630a0ea98248c3211f5d3 /common
parentd304da380382245190f33878363696cd151201a9 (diff)
downloaddexon-280f08be84325924ea7628a8187fd84e7cc39145.tar.gz
dexon-280f08be84325924ea7628a8187fd84e7cc39145.tar.zst
dexon-280f08be84325924ea7628a8187fd84e7cc39145.zip
common/hexutil: ensure negative big.Int is encoded sensibly
Restricting encoding is silly.
Diffstat (limited to 'common')
-rw-r--r--common/hexutil/hexutil.go2
-rw-r--r--common/hexutil/hexutil_test.go1
-rw-r--r--common/hexutil/json.go18
3 files changed, 5 insertions, 16 deletions
diff --git a/common/hexutil/hexutil.go b/common/hexutil/hexutil.go
index b66c0d3fe..6b128ae36 100644
--- a/common/hexutil/hexutil.go
+++ b/common/hexutil/hexutil.go
@@ -178,7 +178,7 @@ func EncodeBig(bigint *big.Int) string {
if nbits == 0 {
return "0x0"
}
- return fmt.Sprintf("0x%x", bigint)
+ return fmt.Sprintf("%#x", bigint)
}
func has0xPrefix(input string) bool {
diff --git a/common/hexutil/hexutil_test.go b/common/hexutil/hexutil_test.go
index 6a92a385c..ed6fccc3c 100644
--- a/common/hexutil/hexutil_test.go
+++ b/common/hexutil/hexutil_test.go
@@ -47,6 +47,7 @@ var (
{referenceBig("ff"), "0xff"},
{referenceBig("112233445566778899aabbccddeeff"), "0x112233445566778899aabbccddeeff"},
{referenceBig("80a7f2c1bcc396c00"), "0x80a7f2c1bcc396c00"},
+ {referenceBig("-80a7f2c1bcc396c00"), "-0x80a7f2c1bcc396c00"},
}
encodeUint64Tests = []marshalTest{
diff --git a/common/hexutil/json.go b/common/hexutil/json.go
index ce6a2b048..23393ed2c 100644
--- a/common/hexutil/json.go
+++ b/common/hexutil/json.go
@@ -25,9 +25,8 @@ import (
)
var (
- textZero = []byte(`0x0`)
- errNonString = errors.New("cannot unmarshal non-string as hex data")
- errNegativeBigInt = errors.New("hexutil.Big: can't marshal negative integer")
+ textZero = []byte(`0x0`)
+ errNonString = errors.New("cannot unmarshal non-string as hex data")
)
// Bytes marshals/unmarshals as a JSON string with 0x prefix.
@@ -101,18 +100,7 @@ type Big big.Int
// MarshalText implements encoding.TextMarshaler
func (b Big) MarshalText() ([]byte, error) {
- bigint := (big.Int)(b)
- if bigint.Sign() == -1 {
- return nil, errNegativeBigInt
- }
- nbits := bigint.BitLen()
- if nbits == 0 {
- return textZero, nil
- }
- enc := make([]byte, 2, nbits/4+2)
- copy(enc, "0x")
- enc = bigint.Append(enc, 16)
- return enc, nil
+ return []byte(EncodeBig((*big.Int)(&b))), nil
}
// UnmarshalJSON implements json.Unmarshaler.