1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bitcoin-rubyでp2pkhマルチシグスクリプトをアンロックするトランザクションを作成する

Posted at

環境

bitcoin-ruby v0.0.18
ruby v2.6.0(by rbenv)
bitcoind v0.17.0.0-5b47b8efd
bitcoin-cli v0.17.0.0-5b47b8efd

やること

p2pkhマルチシグスクリプトでロックされたトランザクションをinputにして、そのスクリプトをアンロックするトランザクションをbitcoin-rubyで作成する

bitcoin-rubyでつくるその他のトランザクション

一般的なp2pkhトランザクションをbitcoin-rubyで
p2pkhマルチシグトランザクションをbitcoin-rubyで
今回行うことのサンプルコードはこちら

inputを作成する

一般的なp2pkhトランザクションとほぼ同じ。
Builderモジュールを使ってトランザクションを作成する。
signature_keyに渡すKeyインスタンスが複数になる場合があるだけである。
複数の場合は配列で渡せばよいです。

今回仮定する変数は以下とする。

項目
前トランザクション da85de487c78bd312ab6806f6497f5ad1b9c480d3f71869b7472919959ba99be
前スクリプト 522102ec35d437a41da7ab7f8b8024377ff6b532b49fb95804a73c41af6510663eaf4121039976de4fc156fe8dc5282d89eaf7ddc5e26494877eb8d995d732cd87791a45f421036647aa901188f4e784bd251e8ddb7802239b911ab66fa90165a3fe5320328ebf53ae
outputインデックス 0
有効な署名を作成できる秘密鍵1 cNBfQu3fAJ1QXMrLvd4PGNAd7RzjUj62kHbkL9owNF2zN2g3M4GB
有効な署名を作成できる秘密鍵2 cPJSC2SZqW3d9EWZTWtnDdGUQY7HFWcCH3cSm4kkkDpidJxp188N
有効な署名を作成できる秘密鍵3 cMujetBk2WXGwnyA1pWZHYLrGVwk1h5V4nYnCQhr9kJshWKPgNpZ
potential_signers = [
  'cNBfQu3fAJ1QXMrLvd4PGNAd7RzjUj62kHbkL9owNF2zN2g3M4GB',
  'cPJSC2SZqW3d9EWZTWtnDdGUQY7HFWcCH3cSm4kkkDpidJxp188N',
  'cMujetBk2WXGwnyA1pWZHYLrGVwk1h5V4nYnCQhr9kJshWKPgNpZ',
]
signers = potential_signers.sample(2).map do |address|
  Bitcoin::Key.from_base58 address
end


tx = build_tx do |t|
  t.input do |i|
    i.prev_out 'da85de487c78bd312ab6806f6497f5ad1b9c480d3f71869b7472919959ba99be' #txid
    i.prev_out_index 0
    i.prev_out_script '522102ec35d437a41da7ab7f8b8024377ff6b532b49fb95804a73c41af6510663eaf4121039976de4fc156fe8dc5282d89eaf7ddc5e26494877eb8d995d732cd87791a45f421036647aa901188f4e784bd251e8ddb7802239b911ab66fa90165a3fe5320328ebf53ae'.htb
    i.signature_key signers
  end
end

output

outputは任意のスクリプト宛に作成します。
一般的なp2pkhスクリプトにした場合以下のようになります。

potential_signers = [
  'cNBfQu3fAJ1QXMrLvd4PGNAd7RzjUj62kHbkL9owNF2zN2g3M4GB',
  'cPJSC2SZqW3d9EWZTWtnDdGUQY7HFWcCH3cSm4kkkDpidJxp188N',
  'cMujetBk2WXGwnyA1pWZHYLrGVwk1h5V4nYnCQhr9kJshWKPgNpZ',
]
signers = potential_signers.sample(2).map do |address|
  Bitcoin::Key.from_base58 address
end

# Recipient
# recipient address muaJ6gXpMn6mUQxbAtgDUnnaNDVDfX6emo
# dumpprivkey get WIF privkey cNBfQu3fAJ1QXMrLvd4PGNAd7RzjUj62kHbkL9owNF2zN2g3M4GB
privkey = 'cTx5t224vzS8vXWpfZJwCMEvkGA89APnzy94umbscgovjLU7HitV'
recipient = Bitcoin::Key.from_base58(privkey)

tx = build_tx do |t|
  t.input do |i|
    i.prev_out 'da85de487c78bd312ab6806f6497f5ad1b9c480d3f71869b7472919959ba99be' #txid
    i.prev_out_index 0
    i.prev_out_script '522102ec35d437a41da7ab7f8b8024377ff6b532b49fb95804a73c41af6510663eaf4121039976de4fc156fe8dc5282d89eaf7ddc5e26494877eb8d995d732cd87791a45f421036647aa901188f4e784bd251e8ddb7802239b911ab66fa90165a3fe5320328ebf53ae'.htb
    i.signature_key signers
  end

  t.output do |o|
    o.value 1998000000
    o.to recipient.addr
  end
end

サンプルコードはこちらです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?