23 lines
765 B
Python
23 lines
765 B
Python
#!/usr/bin/env python3
|
|
|
|
import binascii
|
|
import functools
|
|
import hashlib
|
|
|
|
digits58 = b'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
|
|
|
def b58(n):
|
|
return b58(n//58) + digits58[n%58:n%58+1] if n else b''
|
|
|
|
def public_point_to_address(x, y):
|
|
c = b'\x04' + binascii.unhexlify(x) + binascii.unhexlify(y)
|
|
r = hashlib.new('ripemd160')
|
|
r.update(hashlib.sha256(c).digest())
|
|
c = b'\x00' + r.digest()
|
|
d = hashlib.sha256(hashlib.sha256(c).digest()).digest()
|
|
return b58(functools.reduce(lambda n, b: n<<8|b, c + d[:4]))
|
|
|
|
if __name__ == '__main__':
|
|
print(public_point_to_address(
|
|
b'50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352',
|
|
b'2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6'))
|