ビットコインエクスプローラー(8)
原文(https://github.com/libbitcoin/libbitcoin-explorer/wiki/How-to-Spend-From-a-Multisig-Address)
マルチシグアドレスからの消費方法
この例は、マルチシグアドレスの作り方の続きの例です。
0.001 ビットコインをマルチシグアドレス3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
にbitcoinウォレットをつかっておくります。
blockchain.info上のトランザクションをみてみましょう。
ビットコイン受信のコンファーム
マルチシグアドレスのバランスを見てみましょう。
bx fetch-balance 3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
balance
{
address 3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
confirmed 100000
received 100000
unspent 100000
}
blance.confirmed
は、トランザクションが少なくとも、一つはコンファメーションされていることを示します。
トランザクションの作成
ハッシュから、前回のトランザクションを見てみましょう。
bx fetch-tx f759759bc998ec96879e4ae8c1639e8a186e0d507401eb32e4479de64d340605
transaction
{
hash f759759bc998ec96879e4ae8c1639e8a186e0d507401eb32e4479de64d340605
inputs
{
input
{
address 1FLrh6Q1URcdSNKYCSnQwdpakpPPmwg7xd
previous_output
{
hash 6098bb548c49dd9934650627f07f3bd62bf8f3cb4aab391edc0ea36fe82b1081
index 0
}
script "[3045022100cf822811fb316a42844f8b30a5e1026ec8ab7df58e1b28a1a8cf2d6522f9390302204549cdcb6956bdfbea59698aea443281a208972fa02a6cb3f796aaa3191bff9601] [04f539b68ab0d5c0c75a78e81a86d76aafd83fa7978d55f347fb583a461af37b72babce7680b67e5760e6af74024e2526d8670d94158697b72f665a770f8fa58fe]"
sequence 4294967295
}
}
lock_time 0
outputs
{
output
{
address 1KDCjpWXE2VbFotygTQ4T3jThz65YmfEq6
script "dup hash160 [c7c10de3b95e020766d0c98d087a0cef2dfecbbe] equalverify checksig"
value 3999880000
}
output
{
address 3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
script "hash160 [5c406de4915e37a7e71c7ef9bff42fbf1404daa0] equal"
value 100000
}
}
version 1
}
新しいトランザクションのinputは、transaction.outputs[1]
になるでしょう。
(multisigアドレスの消費されていないアウトプットだからです。)
このインプットは、前回のアウトプットの0ポジションのインデックスを示す`transaction hash:indexとしてフォーマットされています。
f759759bc998ec96879e4ae8c1639e8a186e0d507401eb32e4479de64d340605:1
新しいアウトプットは、amountは、satoshiの数のaddress:amount
としてフォーマットされます。
消費可能な100,000 satoshiあり、トランザクションの55%は、Freenetに消費されます。
1966U1pjj15tLxPXZ19U48c99EJDkdXeqb:55000
この例では、残りは、他のアドレスに消費されません。45,000 satoshiは、マイナーのトランザクションフィーとなります。inputとoutputからトランザクションをつくります。
bx tx-encode -i f759759bc998ec96879e4ae8c1639e8a186e0d507401eb32e4479de64d340605:1 -o 1966U1pjj15tLxPXZ19U48c99EJDkdXeqb:45000
01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f70100000000ffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
トランザクションの中を見てみましょう。
transaction
{
hash 028678bd699174ca9c305b81fe78d69c28cb2483ead9f492cd25bfac787326a4
inputs
{
input
{
previous_output
{
hash f759759bc998ec96879e4ae8c1639e8a186e0d507401eb32e4479de64d340605
index 1
}
script ""
sequence 4294967295
}
}
lock_time 0
outputs
{
output
{
address_hash 58b7a60f11a904feef35a639b6048de8dd4d9f1c
script "dup hash160 [58b7a60f11a904feef35a639b6048de8dd4d9f1c] equalverify checksig"
value 45000
}
}
version 1
}
Notice that transactions.inputs[0].script is empty. This means that the input has not been endorsed.
transactions.inputs[0].script
は、空です。これは、inputが承認されていないことを
示します。
Create the first endorsement for the first input 028678bd...:0 of the new transaction, using the first private key, the multisig script and the new transaction.
一つ目のプライベートキー、multisigスクリプト、新しいトランザクションを使って、新しいトランザクションの最初のinput028678bd...:0
の最初の承認を作ります。
bx input-sign 9d695afea1c3ab99e11248e4b74e698332b11f5c5c051e6e80da61aa19ae7c89 "2 [02b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b] [025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c] [021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f010] 3 checkmultisig" 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f70100000000ffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
30440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901
Create the second endorsement for the first input 028678bd...:0 of the new transaction, using the second private key, the multisig script and the new transaction.
二つ目のプライベートキー、multisigスクリプト、新しいトランザクションを使って、
新しいトランザクションの最初のinput028678bd...:0
の二つ目の承認を作ります。
bx input-sign 68ebab45a918444d7e088c49bda76d7df89b9ea6ba5ddeb1aab5945391828b83 "2 [02b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b] [025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c] [021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f010] 3 checkmultisig" 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f70100000000ffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
3045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b01
Encode the multisig script, for embedding in the endorsement script.
multisigスクリプトを承認スクリプトに組み込むために、エンコードします。
bx script-encode "2 [02b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b] [025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c] [021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f010] 3 checkmultisig"
522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053ae
二つの承認と、エンコードされたmultisigスクリプトを使い、承認スクリプトを作成し、
トランザクションの最初の署名に割り当てます。
bx input-set "zero [30440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901] [3045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b01] [522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053ae]" 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f70100000000ffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f701000000fdfd00004730440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901483045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b014c69522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053aeffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
検証とトランザクションのブロードキャスト
アップデートしたトランザクションを見てみましょう。
bx tx-decode 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f701000000fdfd00004730440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901483045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b014c69522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053aeffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
transaction
{
hash 7aa068cab7f11aa25f34f32bd7b3480790af2facdf8192c59985e6282c336465
inputs
{
input
{
address 3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
previous_output
{
hash f759759bc998ec96879e4ae8c1639e8a186e0d507401eb32e4479de64d340605
index 1
}
script "zero [30440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901] [3045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b01] [522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053ae]"
sequence 4294967295
}
}
lock_time 0
outputs
{
output
{
address 1966U1pjj15tLxPXZ19U48c99EJDkdXeqb
script "dup hash160 [58b7a60f11a904feef35a639b6048de8dd4d9f1c] equalverify checksig"
value 45000
}
}
version 1
}
承認スクリプトが、transaction.input[0]
に適用され、transaction.hash
はアップデートされています。
最初のトランザクション承認を、最初の公開鍵、multisigスクリプト、最初の承認結果、トランザクションを用いて検証してみましょう。
bx input-validate 02b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b "2 [02b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b] [025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c] [021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f010] 3 checkmultisig" 30440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f701000000fc004730440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b9014730440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b9014c69522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053aeffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
The endorsement is valid.
ブロックチェーンに対して、トランザクションを検証しましょう。
bx validate-tx 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f701000000fdfd00004730440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901483045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b014c69522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053aeffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
The transaction is valid.
最後に、トランザクションをブロックチェーンにブロードキャストします。
bx send-tx 01000000010506344de69d47e432eb0174500d6e188a9e63c1e84a9e8796ec98c99b7559f701000000fdfd00004730440220695a28c42daa23c13e192e36a20d03a2a79994e0fe1c3c6b612d0ae23743064602200ca19003e7c1ce0cecb0bbfba9a825fc3b83cf54e4c3261cd15f080d24a8a5b901483045022100aa9096ce71995c24545694f20ab0482099a98c99b799c706c333c521e51db66002206578f023fa46f4a863a6fa7f18b95eebd1a91fcdf6ce714e8795d902bd6b682b014c69522102b66fcb1064d827094685264aaa90d0126861688932eafbd1d1a4ba149de3308b21025cab5e31095551582630f168280a38eb3a62b0b3e230b20f8807fc5463ccca3c21021098babedb3408e9ac2984adcf2a8e4c48e56a785065893f76d0fa0ff507f01053aeffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000
Sent transaction at 2015-May-06 23:24:55.
ビットコインの消費を確認する。
bx fetch-balance 3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
balance
{
address 3A6oGpJ5MzABAj9PofXKjcpTJCgYrdGBNJ
confirmed 0
received 100000
unspent 0
}