アドレスを短くして安全性を高めるにはripemd160ハッシュを使用する。33バイトから20バイトへ短縮できる。
1. メインネットアドレスは先頭を0x00、テストネットは0x6fで開始する。
2. SECフォーマット(圧縮・非圧縮)を取り出し、sha256とripemd160ハッシュ操作を行う。この組み合わせをhash160操作と呼ぶ。
3. 1のプレフィックスと2のハッシュ操作を結合する。
4. 3の結果にhash256を行い、先頭の4バイトを取得する
5. 3と4を結合させてBase58でエンコードする
4の結果をチェックサムと呼ぶ
def encode_base58_checksum(b):
return encode_base58(b + hash256(b)[:4])
import helper from encode_base58_checksum, hash160
def encode_base58_checksum(b):
return encode_base58(b + hash256(b)[:4])
def hash160(s):
return hashlib.new('ripemd160', hashlib.sha256(s).digest()).digest()
def hash160(self, compressed=True):
return hash160(self.sec(compressed))
def address(self, compressed=True, testnet=False):
h160 = self.hash160(compressed)
if testnet:
prefix = b'\x6f'
else:
prefix = b'\x00'
return encode_base58_checksum(prefix + h160)
秘密鍵を”5002″とする場合のアドレスの求め方
from ecc import S256Point, PrivateKey
privateKey = PrivateKey(5002)
address = privateKey.point.address(compressed=False, testnet=True)
print(address)
$ python3 main.py
mmTPbXQFxboEtNRkwfh6K51jvdtHLxGeMA
圧縮・非圧縮やメインネット、テストネットは引数で切り替える
address = privateKey.point.address(compressed=True, testnet=False)