func (h Address) Format(s fmt.State, c rune) {
	fmt.Fprintf(s, "%"+string(c), h.Bytes)
}
Format implements fmt.Formatter, forcing the byte slice to be formatted as is,
without going through the stringer interface used for logging.
package common
import (
	"fmt"
	"math/big"
	"math/rand"
	"reflect"
	"github.com/annchain/OG/common/hexutil"
)
const (
	AddressLength = 20
)
var (
	addressT = reflect.TypeOf(Address{})
)
type Address struct {
	Bytes [AddressLength]byte `msgp:"bytes"`
}
func BytesToAddress(b []byte) Address {
	var h Address
	h.MustSetBytes(b)
	return h
}
func StringToAddress(s string) (add Address, err error) {
	var h Address
	err = h.SetBytes(FromHex(s))
	return h, err
}
func BigToAddress(b *big.Int) Address { return BytesToAddress(b.Bytes()) }
func HexToAddress(s string) Address { return BytesToAddress(FromHex(s)) }
func (h Address) ToBytes() []byte { return h.Bytes[:] }
func (h Address) Big() *big.Int { return new(big.Int).SetBytes(h.Bytes[:]) }
func (h Address) Hex() string { return hexutil.Encode(h.Bytes[:]) }
func (h Address) TerminalString() string {
	return fmt.Sprintf("%x…%x", h.Bytes[:3], h.Bytes[len(h.Bytes)-3:])
}
func (h Address) ShortString() string {
	return hexutil.Encode(h.Bytes[:8])
}
func (h Address) String() string {
	return h.Hex()
}