func NewContractAddress(caller []byte, nonce int) []byte { temp := make([]byte, 32+8) copy(temp, caller) PutInt64BE(temp[32:], int64(nonce)) hasher := ripemd160.New() hasher.Write(temp) // does not error return hasher.Sum(nil) }
// ripemd160 func hash20(input []byte) (res *[20]byte) { hasher := ripemd160.New() hasher.Write(input) // does not error resSlice := hasher.Sum(nil) res = new([20]byte) copy(res[:], resSlice) return }
// TODO: Slicing the array gives us length prefixing but loses the type byte. // Revisit if we add more pubkey types. // For now, we artificially append the type byte in front to give us backwards // compatibility for when the pubkey wasn't fixed length array func (pubKey PubKeyEd25519) Address() []byte { w, n, err := new(bytes.Buffer), new(int64), new(error) wire.WriteBinary(pubKey[:], w, n, err) if *err != nil { PanicCrisis(*err) } // append type byte encodedPubkey := append([]byte{1}, w.Bytes()...) hasher := ripemd160.New() hasher.Write(encodedPubkey) // does not error return hasher.Sum(nil) }