5. Blockchain Basics & Transaction, UTXO and Script Code
MIT OpenCourseWare で公開されている【Blockchain and Money】の授業を日本語で解説しています。第5回のテーマは、ブロックチェーンの基礎とトランザクション、UTXO、スクリプト言語です。
今日のStudy Question
ビットコインではトランザクションをどのように記録しているのか?
UTXOとは?Script言語とは何か?
サトシ・ナカモトは誰なのか?
第5回の授業では、2008年にサトシ・ナカモトが発表した論文のうち、トランザクション(取引に当たる部分)関連の内容について解説していきます。おまけとして、MITの学生が考えるサトシ・ナカモト像も紹介します。
トランザクションの形態
ビットコインのトランザクションは、「インプット」と「アウトプット」という2つの基本構造から成り立っています。
インプット
インプットとは、取引の中の入金に当たります。インプットに含まれる要素は、前のトランザクションID・電子署名の2つです。
AがBに送金(アウトプット)したら、Bは送られてきた金額を入金(インプット)し、次の取引でCへの送金(アウトプット)に使うため、インプットに前のトランザクションIDがある事で、その金額の出どころを特定できるのです。
アウトプット
アウトプットとは、取引の中の送金に当たります。アウトプットに含まれる要素は、価値(送金されたビットコイン額)・公開鍵(ビットコインアドレス)の2つです。
価値はビットコインの単位であるBTCと、その下位単位であるSatoshiで表すことができます。1 Satoshi = 0.00000001 BTCです。
ロックタイム
ロックタイムというのは、文字通りトランザクションをロックする時間のことです。指定した時刻までトランザクションが承認されないようにするもので、これを設定することで、ロックタイムに達するまでは取引をキャンセルすることが可能になります。
複数のインプット・アウトプット
次に、インプット・アウトプットそれぞれに複数のトランザクションがある場合を考えます。上の図では 3 + 2 + 5 = 10 BTC が入金されている状態(インプット)になっています。
これをアウトプットする時、
・ある人(Bitcoin Address 1)に 6 BTC
・別のある人(Bitcoin Address 2)に 3 BTC
・自分(Bitcoin Address 3)に 0.9 BTC
合計 9.9 BTCを送金し、残り0.1BTCは取引手数料として差し引かれます。この手数料はマイナー報酬となります。
例えば、9000円の物を買うのに10000円払って、100円手数料が取られ、900円お釣りが帰ってくるイメージです。
「インプット = アウトプット + 手数料」
コインベース
では、そもそもビットコインのトランザクションで取引される金額はどこからやってくるのでしょうか?それがコインベースと呼ばれるものです。
コインベースとは、各ブロックにおける最初のトランザクションのインプットで、マイニングにより新たなブロックを生成したマイナーがその報酬として得るものになります。
1ブロック毎に50 BTCから始まり、210,000ブロックごとに半減していき、現在は1ブロックにつき12.5 BTCとなっています。
また、一番最初のトランザクションとしてマークルツリーに記録される 際に100バイトの任意のデータを付け足すことができ、サトシ・ナカモトはそのジェネシスブロックにある文章を書き残しました。
“ The Times 03/Jan/2009 Chancellor on brink of second bailout for banks “
この文章は2009年1月3日のイギリスTimes紙の見出しで、「英財務大臣、二度目の銀行救済措置へ」という意味です。
UTXO (Unspent Transaction Output)
UTXOとは、文字通り「未使用トランザクションアウトプット」です。
利用者のビットコインは、アドレスや口座(ウォレット)に残高として記録されているわ訳ではなく、いくつもの取引データの中にUTXOとして散らばっています。そのためUTXOは、「特定の所有者に紐づけられた分割不可能なビットコインの固まり」と表すことができます。
一連のトランザクションにおいて、送金(アウトプット)されたビットコインは、誰も消費していない未使用のトランザクションアウトプットであり、これを受け取る人によって消費されます(インプット)。
そして、また新たに未使用のトランザクションアウトプット(UTXO)として送金されます。
現在、ビットコイン全体の3億4000万トランザクションのうち、5400万トランザクションが未使用としてネットワーク上に散らばっている状態です。
Script 言語
Script 言語とは、ビットコインのトランザクション内に書かれるプログラミング言語の一種であり、トランザクションが正しく実行されているかをチェックしています。
またScript言語は、「チューリング完全ではない」と言われています。チューリング完全というのは、「ある計算メカニズムが万能チューリングマシンと同等の計算能力を持つ状態」のことです。
1936年にイギリスの数学者アラン・チューリングが考案した、自動で計算を行う仮想的な機械・チューリングマシン。あらゆるチューリングマシンの動作をまねるように組み立てられているものを万能チューリングマシンと言います。
基本的に全てのプログラミング言語はチューリング完全ですが、Script言語はそうではありません。非常にシンプルな言語であり、複雑な処理を行うことはできません。しかし、そのおかげでループやif文などの分岐処理ができないように制限されており、これにより無限ループを作るDoS攻撃を防ぐことができるのです。
インプット・アウトプットにおける条件
Script 言語は、「トランザクションが正しく実行されているかチェックするプログラム」でした。ではまず、インプット・アウトプットにおける条件を示す2つのScript 言語を紹介します。
・ScriptPubKey (locking script):アウトプットにおける条件指定
・ScriptSig (unlocking script):インプットにおける条件解除
この2つを用いてアウトプットで条件をロックし、その条件をインプットでアンロックすることで、正しいトランザクションを実行できます。
主要なスクリプト
Script 言語のうち、主要なスクリプトは何種類かありますが、その中でも最も一般的な P2PKH (Pay to Public Key Hash) を紹介します。このスクリプトは、ビットコインネットワーク上で処理される81%を占めています。
例えばアリスがボブに10 BTCを送金するとき、
・アリスのアドレスにロックされている10 BTCのUTXOをscriptSigで解除 (アリスの秘密鍵によって署名し公開鍵を添付)
・ボブに送金するために、scriptPubKeyでボブのアドレスにロック
というプロセスを踏みます。つまり、送金をするときは「アンロック→ロック」の順で実行する訳です。
この他にも、P2PK (Pay to Public Key) や P2SH (Pay to Script Hash) などのスクリプトもあります。
サトシ・ナカモトは誰なのか?
今回の授業のおまけとして、ゲンスラー教授は「サトシ・ナカモトは誰だと思うか?」を学生に問いかけました。以下に、MITの学生が考える様々なサトシ・ナカモト像を紹介します。
ハル・フィニー
・アメリカ人コンピューター科学者
・サトシ・ナカモトから最初のビットコイン取引を受けた人物
ニック・サボ
・アメリカ人暗号学者
・世界初のスマートコントラクトの提唱者
クレイグ・ライト
・オーストラリア人起業家
・「自分がサトシ・ナカモトである」と自ら名乗り出た人物
ドリアン・ナカモト
・日系アメリカ人物理学者
・Newsweekによってサトシ・ナカモトであると名指しされた人物
その他、NSA(アメリカ国家安全保障局)やMIT(マサチューセッツ工科大学)、複数人の暗号学者・経済学者によるグループという意見もありました。
ビットコインを発明した人物、サトシ・ナカモトが誰なのかという問題は未だにビットコイン最大の謎のひとつですが、様々な憶測が飛び交っているのは面白いですね。
今日はビットコインの3つの特徴のうち「トランザクション」を解説しました。インプット・アウトプット、UTXO、Script 言語について取り上げました。
これでブロックチェーン基礎の授業は終了となります。ご覧いただきありがとうございました。