暗号通貨のトランザクションを手作りする (5)

今回のおはなし

みなさんこんにちは。

VIPPOOL でエンジニアをやっています、星月です。

前回は P2PKH の動作原理について解説しました。
それでは実際にテンプレートを埋める方法について説明していきます。

各要素とコインアドレスの関係

まずは各要素の関係について確認しておきましょう。

f:id:y-hoshizuki:20181022130337p:plain

基本的に一方通行ですが、コインアドレスと公開鍵のハッシュだけ、
相互に変換可能なところに注意してください。

秘密鍵と公開鍵のペアを作成する

openssl を使うと簡単に作れます。
secp256k1 という名前の曲線を使いますが、比較的新しいバージョンの openssl でないと
使えないので注意してください。

$ openssl ecparam -genkey -name secp256k1 -out wallet.pem
$ openssl ec -in wallet.pem -conv_form compressed -text
Private-Key: (256 bit)
priv:
    00:8d:6a:af:b3:37:d6:e3:dd:5a:96:c1:54:95:c6:
    cd:4b:65:1e:52:d0:82:e3:e2:a7:89:28:35:bb:94:
    9c:e1:07
pub:
    02:b4:ee:a1:4b:61:45:a8:97:f8:75:61:3c:80:fe:
    3b:3f:50:d4:69:a5:b2:88:6b:50:5f:55:f6:a3:08:
    b9:e8:74

priv が秘密鍵 256bit、pub が compressed 形式の公開鍵です。

公開鍵のハッシュを求める

次は公開鍵のハッシュを求めます。
公開鍵の : を \x に置換して繋げてから、
openssl で sha256, ripemd160 の順でハッシュを計算します。

$ printf "%b" "\x02\xb4\xee\xa1\x4b\x61\x45\xa8\x97\xf8\x75\x61\x3c\x80\xfe\x3b\x3f\x50\xd4\x69\xa5\xb2\x88\x6b\x50\x5f\x55\xf6\xa3\x08\xb9\xe8\x74" | openssl sha -sha256 -binary | openssl sha -ripemd160
(stdin)= db2e054bb576dc63283c0060abd46df14057c2de

これが公開鍵のハッシュです。

今回はここまで。
ご質問、ご意見等ありましたらお気軽にリプライください。