-
-/////////// Address
-func BytesToAddress(b []byte) Address {
- var a Address
- a.SetBytes(b)
- return a
-}
-func StringToAddress(s string) Address { return BytesToAddress([]byte(s)) }
-func BigToAddress(b *big.Int) Address { return BytesToAddress(b.Bytes()) }
-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) {
- return true
- }
- if len(s) == 2*AddressLength && IsHex("0x"+s) {
- return true
- }
- return false
-}
-
-// Get the string representation of the underlying address
-func (a Address) Str() string { return string(a[:]) }
-func (a Address) Bytes() []byte { return a[:] }
-func (a Address) Big() *big.Int { return Bytes2Big(a[:]) }
-func (a Address) Hash() Hash { return BytesToHash(a[:]) }
-func (a Address) Hex() string { return "0x" + Bytes2Hex(a[:]) }
-
-// Sets the address to the value of b. If b is larger than len(a) it will panic
-func (a *Address) SetBytes(b []byte) {
- if len(b) > len(a) {
- b = b[len(b)-AddressLength:]
- }
- copy(a[AddressLength-len(b):], b)
-}
-
-// Set string `s` to a. If s is larger than len(a) it will panic
-func (a *Address) SetString(s string) { a.SetBytes([]byte(s)) }
-
-// Sets a to other
-func (a *Address) Set(other Address) {
- for i, v := range other {
- a[i] = v
- }
-}
-
-// Serialize given address to JSON
-func (a Address) MarshalJSON() ([]byte, error) {
- return json.Marshal(a.Str())
-}
-
-// Parse address from raw json data
-func (a *Address) UnmarshalJSON(data []byte) error {
- if len(data) > 2 && data[0] == '"' && data[len(data)-1] == '"' {
- data = data[1 : len(data)-1]
- }
-
- if len(data) != AddressLength {
- return fmt.Errorf("Invalid address length, expected %d got %d bytes", AddressLength, len(data))
- }
-
- _, res, err := AddressDecode("bm", string(data))
- if err != nil {
- return err
- }
-
- if len(res) != PubkeyHashLength {
- return fmt.Errorf("Invalid address")
- }
- a.Set(BytesToAddress(data))
- return nil
-}
-
-// 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)
- }
-
- return fmt.Sprintf("%x...%x", value[:4], value[len(value)-4])
-}