rpc: remove HexNumber, replace all uses with hexutil types
This change couldn't be automated because HexNumber was used for numbers of all sizes.
This commit is contained in:
85
rpc/types.go
85
rpc/types.go
@ -121,91 +121,6 @@ type ServerCodec interface {
|
||||
Closed() <-chan interface{}
|
||||
}
|
||||
|
||||
// HexNumber serializes a number to hex format using the "%#x" format
|
||||
type HexNumber big.Int
|
||||
|
||||
// NewHexNumber creates a new hex number instance which will serialize the given val with `%#x` on marshal.
|
||||
func NewHexNumber(val interface{}) *HexNumber {
|
||||
if val == nil {
|
||||
return nil // note, this doesn't catch nil pointers, only passing nil directly!
|
||||
}
|
||||
|
||||
if v, ok := val.(*big.Int); ok {
|
||||
if v != nil {
|
||||
return (*HexNumber)(new(big.Int).Set(v))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
rval := reflect.ValueOf(val)
|
||||
|
||||
var unsigned uint64
|
||||
utype := reflect.TypeOf(unsigned)
|
||||
if t := rval.Type(); t.ConvertibleTo(utype) {
|
||||
hn := new(big.Int).SetUint64(rval.Convert(utype).Uint())
|
||||
return (*HexNumber)(hn)
|
||||
}
|
||||
|
||||
var signed int64
|
||||
stype := reflect.TypeOf(signed)
|
||||
if t := rval.Type(); t.ConvertibleTo(stype) {
|
||||
hn := new(big.Int).SetInt64(rval.Convert(stype).Int())
|
||||
return (*HexNumber)(hn)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *HexNumber) UnmarshalJSON(input []byte) error {
|
||||
length := len(input)
|
||||
if length >= 2 && input[0] == '"' && input[length-1] == '"' {
|
||||
input = input[1 : length-1]
|
||||
}
|
||||
|
||||
hn := (*big.Int)(h)
|
||||
if _, ok := hn.SetString(string(input), 0); ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
return fmt.Errorf("Unable to parse number")
|
||||
}
|
||||
|
||||
// MarshalJSON serialize the hex number instance to a hex representation.
|
||||
func (h *HexNumber) MarshalJSON() ([]byte, error) {
|
||||
if h != nil {
|
||||
hn := (*big.Int)(h)
|
||||
if hn.BitLen() == 0 {
|
||||
return []byte(`"0x0"`), nil
|
||||
}
|
||||
return []byte(fmt.Sprintf(`"0x%x"`, hn)), nil
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (h *HexNumber) Int() int {
|
||||
hn := (*big.Int)(h)
|
||||
return int(hn.Int64())
|
||||
}
|
||||
|
||||
func (h *HexNumber) Int64() int64 {
|
||||
hn := (*big.Int)(h)
|
||||
return hn.Int64()
|
||||
}
|
||||
|
||||
func (h *HexNumber) Uint() uint {
|
||||
hn := (*big.Int)(h)
|
||||
return uint(hn.Uint64())
|
||||
}
|
||||
|
||||
func (h *HexNumber) Uint64() uint64 {
|
||||
hn := (*big.Int)(h)
|
||||
return hn.Uint64()
|
||||
}
|
||||
|
||||
func (h *HexNumber) BigInt() *big.Int {
|
||||
return (*big.Int)(h)
|
||||
}
|
||||
|
||||
var (
|
||||
pendingBlockNumber = big.NewInt(-2)
|
||||
latestBlockNumber = big.NewInt(-1)
|
||||
|
Reference in New Issue
Block a user