lian/bitcoin-ruby · GitHubを使って、Open Asset Ptotocolで使われるasset IDを生成してみる。
asset IDの生成手順は以前ブログに書いた↓の手順。
1.発行者は初めに秘密鍵を生成する
Open Assets Protocolの仕様(訳) - Develop with pleasure!
(こんな→ 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725 )
2.続いて該当するアドレスを計算する
(こんな→ 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM )
3.アドレスに関連付けられているPay-to-PubKey-Hashでスクリプトを作成する
4.スクリプトのハッシュ化(こんな→ 36e0ea8e93eaa0285d641305f4c81e563aa570a2)
5.最後にこのハッシュをversion byte 23のチェックサムを使ってbase58で変換する(こんな→ ALn3aK1fSuG27N96UGYB1kUYUpGKRhBuBC )
秘密鍵とアドレスは↑のサンプルをそのまま使用。
require 'bitcoin' include Bitcoin::Util # 生成した秘密鍵 private_key = '18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725' # BTCアドレス btc_address = '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM' #公開鍵 pub_key = regenerate_public_key(private_key) # 公開鍵をハッシュ化(SHA-256でハッシュ化したものをさらにRIPEMD-160でハッシュ化) hash = hash160(pub_key) # P2PKHでスクリプトをハッシュ化 # P2PKHのスクリプトはOP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIGとなる # (76=OP_DUP, a9=OP_HASH160, 14=Bytes to push, 88=OP_EQUALVERIFY, ac=OP_CHECKSIG) script = hash160(["76", "a9", "14", hash, "88", "ac"].join) # スクリプトハッシュにバージョンバイト23を付加する。 script = 23.to_s(16) + script # チェックサムを付加して、Base58エンコードすればasset IDの完成 asset_id = encode_base58(script + checksum(script))