アドレスを短くして安全性を高めるには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)