読者です 読者をやめる 読者になる 読者になる

Reality Keys(事実に関する認証局サービス)を使ってみる (3/3)

f:id:yzono:20150204124022j:plain

はじめに

前回に引き続き、Reality Keysから受け取った公開鍵を利用してP2SHトランザクションを作成するところについて書きます。

目次

  • 前回までやったこと
    1. Bobの公開鍵を作成(makekeysコマンド)
  • 1と2で作成した公開鍵に対してビットコインを送金
  • AliceがP2SHアドレスを作成して署名する
  • 4のトランザクションに対して、Bobが署名する
  • 5のトランザクションをブロードキャストする
  • Bob(敗者)がSpnedをトライして失敗する
  • Alice(勝者)がSpendをトライして成功する

前回までやったこと

P2SHトランザクションの作成は以下流れになっており今回は2からスタートします。

  1. Aliceの公開鍵を作成(makekeysコマンド) ← ここまで完了
  2. Bobの公開鍵を作成(makekeysコマンド)
  3. 1と2で作成した公開鍵に対してビットコインを送金
  4. AliceがP2SHアドレスを作成して署名する
  5. 4のトランザクションに対して、Bobが署名する
  6. 5のトランザクションをブロードキャストする

尚、P2SHトランザクションを作成した後、実際にWinnerがSpendできるか以下手順で確認します。

  1. BobがSpnedをトライして失敗する
  2. AliceがSpendをトライして成功する

2. Bobの公開鍵を作成(makekeysコマンド)

Bobの公開鍵を作成します。--seedパラメータが使えますので適当な乱数を使いましょう。

$ python ./realitykeysdemo.py makekeys --seed [Bobのseed]
Your public key is:
043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543
Please send this to the other party.

Your temporary address is:
1D8AbYyryKH27yiJhUVpztthXwxQxCjMop
Please make payment to this address first.

Next step: Exchange keys, pay your stake to 1D8AbYyryKH27yiJhUVpztthXwxQxCjMop, have them pay their stake to their address, then one of you runs:
If you are yes:
./realitykeysdemo.py setup <reality_key_id> 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 <your_stake_in_satoshis> <their_public_key> <their_stake_in_satoshis>
If you are no:
./realitykeysdemo.py setup <reality_key_id> <their_public_key> <their_stake_in_satoshis>  043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 <your_stake_in_satoshis>

AliceとBobの公開鍵とビットコインアドレスが準備できました。

// Alice
040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119

1ERnz7DafLYP4GX3brhPGMq4mq1Mmyc3Pu

// Bob
043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543

1D8AbYyryKH27yiJhUVpztthXwxQxCjMop

1と2で作成した公開鍵に対してビットコインを送金

AliceとBobにビットコインアドレスに対して0.01BTCを送金します。

AliceがP2SHアドレスを作成して署名する

AliceがP2SHアドレスを作成します。AliceはNOを選択します

[NO] ← Aliceの選択
Private key: L4owdtHyHQEW6y3C6p1nojnURma8XpECVX3Qhy4eynSyVUwXCsc5 
Public key: 036d4f24332e9c49861591558f074a112f9718e47383c394106325ac5b65b9cd30

[YES] ← Bobの選択
Public key: 03ea19d70a96a072a1881a6177ab47144168f19f9648675eb189e35e4bde4b16cd

setupパラメータをつけて実行した結果が以下です。

python ./realitykeysdemo.py setup 1 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 1000  040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119 1000 --seed [Aliceのseed]

Made p2sh address: 3GMYiDszdeGTQ8K52EozB9vLGdLuiRxHtg. Creating a transaction to fund it.
Created a transaction:
0100000002274ef58f6b3c8bf673c864cf3f19c28b57d9d53c8705d038a7a08d03557a77f30000000000fffffffff53d81574d526a76973d25a7b71796cb4dbc8217b7bccf6e56c6c32bea1e012c000000008b48304502207eae6cd4ce85b3a54e9b3877138161a1d20e999ce16eda070c584a67ec45c919022100951e08fa3dea490ef643c4a045b068838a27de2db368164ab425cb097b2f55ff0141040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119ffffffff01d00700000000000017a914a0db448764089afb9273611efc87ee352ecda8de8700000000
Next step: The other party runs:
./realitykeysdemo.py setup 1 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 1000 040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119 1000 0100000002274ef58f6b3c8bf673c864cf3f19c28b57d9d53c8705d038a7a08d03557a77f30000000000fffffffff53d81574d526a76973d25a7b71796cb4dbc8217b7bccf6e56c6c32bea1e012c000000008b48304502207eae6cd4ce85b3a54e9b3877138161a1d20e999ce16eda070c584a67ec45c919022100951e08fa3dea490ef643c4a045b068838a27de2db368164ab425cb097b2f55ff0141040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119ffffffff01d00700000000000017a914a0db448764089afb9273611efc87ee352ecda8de8700000000

4のトランザクションに対して、Bobが署名する

setupパラメータをつけて実行した結果が以下です。

./realitykeysdemo.py setup 1 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 1000 040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119 1000 0100000002274ef58f6b3c8bf673c864cf3f19c28b57d9d53c8705d038a7a08d03557a77f30000000000fffffffff53d81574d526a76973d25a7b71796cb4dbc8217b7bccf6e56c6c32bea1e012c000000008b48304502207eae6cd4ce85b3a54e9b3877138161a1d20e999ce16eda070c584a67ec45c919022100951e08fa3dea490ef643c4a045b068838a27de2db368164ab425cb097b2f55ff0141040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119ffffffff01d00700000000000017a914a0db448764089afb9273611efc87ee352ecda8de8700000000 --seed [Bobのseed]
Made p2sh address: 3GMYiDszdeGTQ8K52EozB9vLGdLuiRxHtg. Creating a transaction to fund it.
Broadcasting transaction...:
0100000002274ef58f6b3c8bf673c864cf3f19c28b57d9d53c8705d038a7a08d03557a77f3000000008b483045022066ba7df68428c352edb0432afeaaf2fba91f46c50c586fc332c2f069029ddac5022100f6768a5f7afab7e5ab58e178751b7c296a1a6e7cbb264c44b7634a13cb3bae130141043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543fffffffff53d81574d526a76973d25a7b71796cb4dbc8217b7bccf6e56c6c32bea1e012c000000008b48304502207eae6cd4ce85b3a54e9b3877138161a1d20e999ce16eda070c584a67ec45c919022100951e08fa3dea490ef643c4a045b068838a27de2db368164ab425cb097b2f55ff0141040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119ffffffff01d00700000000000017a914a0db448764089afb9273611efc87ee352ecda8de8700000000
Next step: Wait for the result, then the winner runs:
./realitykeysdemo.py claim 1 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119 -f [<fee>] -d [<destination_address>]

5のトランザクションをブロードキャストする

ブロードキャストはBobが署名した後に自動でされます。

f:id:yzono:20150204123858p:plain

Bob(敗者)がSpnedをトライして失敗する

claimパラメータをつけて実行した結果が以下です。

$ ./realitykeysdemo.py claim 1 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119 -f 0 -d 1Fcyh3T6zsQtwBpwpTADf6M24GY5CC4vbx --seed [Bobのseed]
Found 2000 in the P2SH address

Alice(勝者)がSpendをトライして成功する

claimパラメータをつけて実行した結果が以下です。

$ ./realitykeysdemo.py claim 1 043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad37543 040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff119 -f 0 -d 1Fcyh3T6zsQtwBpwpTADf6M24GY5CC4vbx --seed [Aliceのseed]
Found 2000 in the P2SH address

まとめ

P2SHトランザクションは作成されましたが、最後のspendができていません。 eligius_pushtx(multi_tx)した後に何も反応がありません。

次回はその原因を探っていきます。尚、以下のような疑問がありますのでそれも調べてみます。

参考

eligius

Vimの設定ファイルを作る

vimでカーソル位置の行と列を強調表示する