|
|
@@ -17,6 +17,7 @@
|
|
|
package common
|
|
|
|
|
|
import (
|
|
|
+ "encoding/hex"
|
|
|
"fmt"
|
|
|
"math/big"
|
|
|
"math/rand"
|
|
|
@@ -30,13 +31,8 @@ const (
|
|
|
AddressLength = 20
|
|
|
)
|
|
|
|
|
|
-type (
|
|
|
- // Hash represents the 32 byte Keccak256 hash of arbitrary data.
|
|
|
- Hash [HashLength]byte
|
|
|
-
|
|
|
- // Address represents the 20 byte address of an Ethereum account.
|
|
|
- Address [AddressLength]byte
|
|
|
-)
|
|
|
+// Hash represents the 32 byte Keccak256 hash of arbitrary data.
|
|
|
+type Hash [HashLength]byte
|
|
|
|
|
|
func BytesToHash(b []byte) Hash {
|
|
|
var h Hash
|
|
|
@@ -113,7 +109,24 @@ func EmptyHash(h Hash) bool {
|
|
|
return h == Hash{}
|
|
|
}
|
|
|
|
|
|
+// UnprefixedHash allows marshaling a Hash without 0x prefix.
|
|
|
+type UnprefixedHash Hash
|
|
|
+
|
|
|
+// UnmarshalText decodes the hash from hex. The 0x prefix is optional.
|
|
|
+func (h *UnprefixedHash) UnmarshalText(input []byte) error {
|
|
|
+ return hexutil.UnmarshalFixedUnprefixedText("UnprefixedHash", input, h[:])
|
|
|
+}
|
|
|
+
|
|
|
+// MarshalText encodes the hash as hex.
|
|
|
+func (h UnprefixedHash) MarshalText() ([]byte, error) {
|
|
|
+ return []byte(hex.EncodeToString(h[:])), nil
|
|
|
+}
|
|
|
+
|
|
|
/////////// Address
|
|
|
+
|
|
|
+// Address represents the 20 byte address of an Ethereum account.
|
|
|
+type Address [AddressLength]byte
|
|
|
+
|
|
|
func BytesToAddress(b []byte) Address {
|
|
|
var a Address
|
|
|
a.SetBytes(b)
|
|
|
@@ -181,12 +194,15 @@ func (a *Address) UnmarshalText(input []byte) error {
|
|
|
return hexutil.UnmarshalFixedText("Address", input, a[:])
|
|
|
}
|
|
|
|
|
|
-// PP Pretty Prints a byte slice in the following format:
|
|
|
-// hex(value[:4])...(hex[len(value)-4:])
|
|
|
-func PP(value []byte) string {
|
|
|
- if len(value) <= 8 {
|
|
|
- return Bytes2Hex(value)
|
|
|
- }
|
|
|
+// UnprefixedHash allows marshaling an Address without 0x prefix.
|
|
|
+type UnprefixedAddress Address
|
|
|
+
|
|
|
+// UnmarshalText decodes the address from hex. The 0x prefix is optional.
|
|
|
+func (a *UnprefixedAddress) UnmarshalText(input []byte) error {
|
|
|
+ return hexutil.UnmarshalFixedUnprefixedText("UnprefixedAddress", input, a[:])
|
|
|
+}
|
|
|
|
|
|
- return fmt.Sprintf("%x...%x", value[:4], value[len(value)-4])
|
|
|
+// MarshalText encodes the address as hex.
|
|
|
+func (a UnprefixedAddress) MarshalText() ([]byte, error) {
|
|
|
+ return []byte(hex.EncodeToString(a[:])), nil
|
|
|
}
|