ビットコインエクスプローラー(8)

# ビットコインエクスプローラー(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スクリプト、新しいトランザクションを使って、新しいトランザクションの最初のinput`028678bd...: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スクリプト、新しいトランザクションを使って、
新しいトランザクションの最初のinput`028678bd...: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
}
```