ブロックチェーン

トランザクションのscriptとScript言語とは?【Bitcoinを理解する-5】

ビットコインのトランザクションには、トランザクションscriptと、Script言語というものが関わっています。前回ではトランザクションのアウトプットとインプット、UTXOについてご紹介しました。今回はそのトランザクションの有効性を確認するための解除条件などの詳細についてお伝えします。

前回のトランザクションの紹介については以下の記事をご確認ください。

 

 

 

トランザクションscriptとScript言語

 

 

ビットコインのクライアントは、scriptを実行します。scriptとはどんなことかというと、Bitcoinに関して言えば、コンピューターの決まったプログラムを実行することにあります。

 

Bitcoinではこのscript、つまり規定の動きを実行することでトランザクションが有効かそうでないかを確認します。Bitcoinでは、「locking script」という解除条件と、通常の署名が含まれている「unlocking script」と呼ばれるものは、script言語で書かれています。

 

わたしたちが今実際に利用しているBitcoinは、Bitcoinネットワークを通じて処理されています。また、トランザクションはAがBへ支払う」というものになっていますが、これはPay-to-Public-Key-Hashとよばれるsriptに基づいています。少し難しく聞こえるかもしれませんが、これは単純にAという名前がつけられたもともとのプログラムを処理しているということです。

 


※ビットコイントランザクションの有効かどうかという確認は、このScript言語の処理を通じて行われています。Script言語はありとあらゆる様々な条件を規定することが可能なため、Bitcoinが成立しています。


 

scriptの作成

 

 

ビットコインのトランザクション有効性を確認するための方法は2種類のsriptによって成立しています。

 


 

1.locking script

アウトプットに設定されている解除条件です。トランザクションを実行する際に必要な条件を規定しています。

 

2.unlocking script

これはlocking scriptによって設定された解除条件を解除した場合に条件を満たすscriptです。たいていの場合は秘密鍵からウォレットが生成した署名を含んでいます。

 


 

 

さて、両者がどのようなものかがわかったところで、Bitcoinクライアント(みなさんがお使いのウォレット)はどのようなことをしているかというと、この2種類を実行することで、トランザクションが有効か否かを確認しています。

 

 

どのように確認するかというとトランザクションそれぞれにあるインプットへ、インプットにより参照されているUTXOを取得しようとします。(UTXOはまだ使われていないアウトプットのことです、)このUTXOについては使用するときに必要な条件が決められたlocking scriptを含んでいます

 

 

この段階でUTXOの資金を使おうとしているインプットのunlocking scriptを取り出すことで、locking scriptとunlocking scriptを実行します。かなりややこしくなるかもしれませんが、これがBitcoinの流れの一部です。

 

 

Script言語

 

 

Bitcoinトランザクションにおけるスクリプト言語は、Scriptoと呼ばれます。どんな言語かというと電卓ようなデバイスと同じくらい簡単なハードウェアでも動作するようにつくられたものです。

 

BitcoinのScript言語についてですが、「スタック」というデータの構造を使用しています。なんだか難しそうに聞こえるかもしれませんが、これは非常にシンプルな構造のものであり、「トランプの山札」のようなイメージです。これは次の操作を許可しています。

 


  • プッシュ

アイテムをスタックの一番上(山札の一番上)に付け加えます。

 

  • ポップ

一番上にあるアイテム(カード)をスタック(山札)から取り外します。


 

 

Script言語というものは、それぞれのアイテムを左から順に処理することでscriptの実行をします。

(本来であればここからはプログラムの話になるのですが、当記事では上記の流れを理解してもらうことを目的とします。)

 

チューリング不完全性

 

Bitcoinのトランザクションにはループ・if文などの分岐処理が実装されないように制限しています。これを「チューリング完全」といい、この問題をクリアしない限りは「たくさんのトランザクションは他の悪意のあるユーザーによるトラップを使用する」ことが出来てしまいます。

 

ステートレスな検証

 

トランザクションScript言語=ステートレスです。どういうことかというと、scriptの実行前には「何も保持しない」scriptの実行後の状態を「一切有さない」ということです。これが理由により、scriptへの必要不可欠な情報はscriptへ含まれています。

 

 

 

さて、いかがでしたでしょうか。今回の内容は少しプログラミングによった内容でしたが、ここを理解すればもう立派なBitcoin通といえるのではないでしょうか。また次回をお楽しみにくださいね。

 

 

 

 

 

 

 

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin
bitFlyer ビットコインを始めるなら安心・安全な取引所で

関連記事

  1. 開発

    プログラマー必見!Gethの環境構築について【2017年8月25日更新版】

    Ethereumには複数のクライアントがありますがそれらをご存知でしょ…

  2. 開発

    プログラマー必見!Ethereumのマイニング・送金方法【2017年8月30日最新版】

    前回はEthereumの代表的なクライアントであるGethをインストー…

  3. ICO解説

    【ICOを読み解く】ChangeはERC20トークン準拠・APIを投資家向けに公開

    話題となっているICOのChangeですが、こちらは現在確認することが…

  4. 開発

    プログラマー必見!Ethereumのプライベートネットワーク起動【2017年8月25日最新版】

    EthereumのクライアントであるGethのインストールは以前の記事…

  5. ブロックチェーン

    マクロの視点でBlockchainの動向を理解する。

    仮想通貨、暗号通貨、Bitcoin、Ethereum、Blockcha…

  6. ブロックチェーン

    トランザクションのインプットとアウトプットとは【Bitcoinを理解する-4】

    さて、以前はビットコインの基本的な仕組みについてお伝えしました。今回は…

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

おすすめ記事

最近の記事

  1. 【概要と結果を簡単理解】分散型台帳技術に関する共同調査【日本…
  2. トランザクションのscriptとScript言語とは?【Bi…
  3. 【ICOを読み解く】ChangeはERC20トークン準拠・A…
  4. マクロの視点でBlockchainの動向を理解する。
  5. Dapps(自律分散型アプリケーション)とは何か。
  1. ブロックチェーン

    トランザクションのscriptとScript言語とは?【Bitcoinを理解する…
  2. 開発

    プログラマー必見!Gethの環境構築について【2017年8月25日更新版】
  3. マイニング

    Bitcoinにおけるマイニング(採掘)とはそもそも何なのか。【Bitcoinを…
  4. 公開鍵・秘密鍵

    秘密鍵と公開鍵・アドレスを知る【Bitcoinを理解する-2】
  5. ブロックチェーン

    Dapps(自律分散型アプリケーション)とは何か。
PAGE TOP