2017/06/02

[bc]スクリプト

たまにはBitcoinの記事も書いておかねば。
べ、別にネタに困ってるわけじゃないんだからね!


Bitcoinのブロックチェーンに載せるデータは、トランザクションが最小単位になる。
メッセージとしてはping/pongやgetdataなどいろいろとあるのだが、ブロックチェーンに載るものとしてはtxメッセージで送信するトランザクションが基本になるだろう。

トランザクションには、だいたいこういうデータが載っている。

    • トランザクションのバージョン
    • 送金元の情報
    • 送金先の情報
    • どのくらい待ってからマイニングできるようになるか


「送金元の情報」は、その前のトランザクションの「送金先の情報」とつながっている。
この意味に慣れるまで、私はけっこう時間がかかった。。。

銀行の送金だと、送金元が「いくら、誰誰に送金する」と指定して、送金先の人にその額が入る。
Bitcoinの場合、送金元が「いくらは誰誰に送金し、残りはこれこれに送金する」という記載の仕方をする。
例えば、誰かに0.1BTC送金する必要があったとしよう。
そして手元に1BTC使えるトランザクションを持っていたとする。
そうすると、

  • 0.1BTCを送金したい人に
  • 残りの0.9BTCを自分のお釣りに

という送金の仕方になる。

お釣りを、送金元と同じアドレスに指定することもできるのだが、セキュリティ的には推奨されない。
だから、だいたいは見た目として2つのアドレスに送金しているように見える。
初めてトランザクションを見たときには「なんで全部送らないといけないのよぉぉ」と思ったものだ。

そしてまた、トランザクションを作るときには手数料(FEE)がかかる。
先ほど0.1BTC + 0.9BTCのような書き方をしたが、実際にはこれにFEEが引かれて、0.89999BTCみたいな額になっていることだろう。

FEEの決め方はよくわかっていないが、トランザクションのバイト数が基準になっている。


で、スクリプトだ。

BitcoinにはEthereumほどの柔軟性はないにしても、スクリプトを書いて送金条件を作ることができる。
逆ポーランド記法というか、スタックにためながら演算していくのだ。


その演算は、大ざっぱに言えば、「前のトランザクションの送金先情報」と「それを送金元として使うトランザクションの送金元情報」がセットになって解くことができるスクリプトになっている。
私のイメージとしては、昔のウェスタンな取引で、お札をギザギザに破って取引相手に渡しておき、現場でそのギザギザがお互いに一致するかどうかで見分けるアレだ。


今のところ、この辺が使えるようである。
Script - Bitcoin Wiki

「今のところ」がつくのは、Bitcoinがトランザクションのバージョンによって使えるスクリプトが変わるからである。
例えば、NOP2やNOP3のような命令が、バージョン2ではOP_CLTVやらOP_CSVとして使えたりする。
Script - Bitcoin Wiki - Locktime


こういう、意味の使い方が変えられるという自由さが、仮想通貨のよいところだったり悪いところだったりするのだろう。

0 件のコメント:

コメントを投稿

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