def checksum_encode(addr): # Takes a 20-byte binary address as input addr = normalize_address(addr) o = '' v = big_endian_to_int(sha3(addr)) for i, c in enumerate(encode_hex(addr)): if c in '0123456789': o += c else: o += c.upper() if (v & (2**(255 - 4 * i))) else c.lower() return '0x' + o
def normalize_address(x, allow_blank=False): if is_numeric(x): return int_to_addr(x) if allow_blank and x in {'', b''}: return b'' if len(x) in (42, 50) and x[:2] in {'0x', b'0x'}: x = x[2:] if len(x) in (40, 48): x = decode_hex(x) if len(x) == 24: assert len(x) == 24 and sha3(x[:20])[:4] == x[-4:] x = x[:20] if len(x) != 20: raise Exception("Invalid address format: %r" % x) return x
def sha3rlp(x): return sha3(rlp.encode(x))
def privtoaddr(k): k = normalize_key(k) x, y = privtopub(k) return sha3(encode_int32(x) + encode_int32(y))[12:]
def mk_metropolis_contract_address(sender, initcode): return sha3(normalize_address(sender) + initcode)[12:]
def mk_contract_address(sender, nonce): return sha3(rlp.encode([normalize_address(sender), nonce]))[12:]
o = 0 for a in arr: o = (o << 8) + a return o def int_to_32bytearray(i): o = [0] * 32 for x in range(32): o[31 - x] = i & 0xff i >>= 8 return o assert encode_hex( sha3(b'')) == 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' @Memoize def privtoaddr(k): k = normalize_key(k) x, y = privtopub(k) return sha3(encode_int32(x) + encode_int32(y))[12:] def checksum_encode(addr): # Takes a 20-byte binary address as input addr = normalize_address(addr) o = '' v = big_endian_to_int(sha3(addr)) for i, c in enumerate(encode_hex(addr)): if c in '0123456789':
o = 0 for a in arr: o = (o << 8) + a return o def int_to_32bytearray(i): o = [0] * 32 for x in range(32): o[31 - x] = i & 0xFF i >>= 8 return o assert ( encode_hex(sha3(b"")) == "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ) @Memoize def privtoaddr(k): k = normalize_key(k) x, y = privtopub(k) return sha3(encode_int32(x) + encode_int32(y))[12:] def checksum_encode(addr): # Takes a 20-byte binary address as input addr = normalize_address(addr) o = "" v = big_endian_to_int(sha3(addr))
def bytearray_to_int(arr): o = 0 for a in arr: o = (o << 8) + a return o def int_to_32bytearray(i): o = [0] * 32 for x in range(32): o[31 - x] = i & 0xFF i >>= 8 return o assert (encode_hex(sha3(b"")) == "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470") @Memoize def privtoaddr(k): k = normalize_key(k) x, y = privtopub(k) return sha3(encode_int32(x) + encode_int32(y))[12:] def checksum_encode(addr): # Takes a 20-byte binary address as input addr = normalize_address(addr) o = "" v = big_endian_to_int(sha3(addr)) for i, c in enumerate(encode_hex(addr)):