2017/11/21

[btc]トランザクションを下りたい

Bitcoinのトランザクションを展開したとしよう。
「展開」というのは、Bitcoinのブロックチェーンに投げる、くらいの意味だ。
txメッセージの送信、でもよいかもしれん。


よくあるBitcoinトランザクションだと、vinが1つで、voutが送金先とお釣りの2つだ。
そのvoutのお釣りから、さらに別の送金を行ったとしよう。

いや、もうちょっと今困っている問題に近づけた方がよいな。
私以外の誰か(ここではAさん)が、Aさんが秘密鍵を所有するトランザクションのお釣りから、別のアドレスに送金を行ったとしよう。
そして、私はお釣りを含んでいるトランザクションのTXIDだけは知っているとする。

さて、ここで送金先のTXIDを簡単に知ることはできるだろうか?
ただし、Block Explorerのようなものは使わず、bitcoindのJSON-RPCのみ使用可能とする。


TXIDの特定のvoutが使用されているかどうかは、gettxoutを使うとわかる。
これは、outpoint、すなわちTXIDとindexを指定して、unspentであれば何も返さない(エラーが返るのかも?)。
結果を返すかどうかだけで、とりあえずunspent/spentのチェックだけはできよう。


もし上流に遡りたいのであれば、vinのTXIDをgetrawtransactionなどすればよかろう。
そう、その方向に上っていくのは簡単なのだ。
なのに、もっと簡単そうな下へ下る方となると、途端にやり方が分からなくなる。


以前作ったときはBitcoinプロトコルしか使えなかったので、getheadersなどを使って古いブロック番号からひたすら順番にとり続けた気がする。
セキュリティ的なものなのか、やればできるような機能を持たせていないだけなのか、とにかくbitcoindではそういうことはできないんだ、と結論づけたのだった。


あれから数年が経ち、私もなにもわからずBitcoinを触っていたときよりは知識が増えたはずだ。
もしかしたら、今だと解決できるのかもしれん。
・・・というよりも、下に下りたいという状況が出てきてしまったのだ。

segwitのトランザクションだとwitnessがわからなくてもTXIDが計算できたはずなので、もしかしたら下らずにTXIDがわかるかもしれん、という期待をしながら計算を続けたのだが、無理そうな気配がしている。

送金元のトランザクションはわかるので、vinはわかる。
versionも、決められる。
ただ、voutとlocktimeが自由にできてしまうので、TXIDを事前に計算できないのだ。


あとは、仕様を確認して、実はそこはたどらなくてよいんだ、となることを期待するばかりだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。