ビットコインスクリプト。Proof of Burn。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-4

前回までの記事はこちら

ーーーーーーーーーー

こんにちは!クレメア(@cremea_tw)です。

前回に引き続き、カリフォルニア大学バークレー校の無料講義、
「ビットコインと仮想通貨のオンライン講座」で学んだ内容をシェアしていきます。

講義そのものにおいて、

読者対象:ビットコインや仮想通貨について詳しく知りたい全ての人
前提知識:不要

という感じなので、
講義内容を読むだけでもかなり理解が深まるのではないかと思います。

 

文章のスタイルとしては、
翻訳ではなく、個人的解釈バリバリの超訳をしてきます。

荒削りですがスピード重視で、
クレメア的な解釈も交えてお伝えするので、
間違いや意見などあればコメントいただければと思います。

 

また、太字や文字色などの文章の装飾は極力していません。

学びの本質はそこではない、時間がもったいない、あとでできる、
ということで、今回は泣く泣くカットしました。

見辛いかもしれませんが、予めご了承ください。

 

ということで、
講義の内容に沿って進めます。

今回の記事は、
ビットコインスクリプトとProof of Burnについてお伝えします。

それでは、本題に入っていきましょう。

イントロ:ビットコインスクリプト

ビットコインスクリプト(またはスクリプト)は、
二者間の支払いからより複雑な複数署名トランザクションまで、
さまざまなトランザクションを処理するためにビットコインの機能を大幅に拡張する、
ビットコインで使用されるように設計された言語です。

ビットコインスクリプトの仕組みについて詳しく説明する前に、
トランザクションの仕組みを最初に確認することが重要です。

 

UTXOモデルを覚えていますか?

ビットコインには、
関連するビットコインの割符を持つ「アカウント」はありません。

各トランザクションは、
以前のトランザクションのアウトプットとして、
新しいインプットに流れ込むものと考えることができます。

トランザクションには、
未使用の資金の所有者の署名が含まれています。

これらの未使用トランザクションはUTXOです。

あなたのビットコイン、
もしくは「あなたのUTXO」はどうやって使うのでしょうか?

ビットコインを使うことは、
あなたが正当な償還人であるという証拠を使って以前のアウトプットを償還し、
トランザクション中にその人の情報をエンコードすることで、
現在作成しているアウトプットを償還できる人物を指定する行為です。

たとえば、ビットコイン(UTXOの形式)をラスティに送信すると、
そのトランザクションでラスティのみがUTXOを使用できるようにエンコードされます。

ラスティがビットコインを償還するために使う証明は、
公開鍵と署名という2つの要素で構成されています。

後ほど詳しく説明します。

 

トランザクションのコンテンツ

ラスティへのトランザクションの内容を詳しく見てみましょう。

ご覧の通り、
トランザクションには3つの主要な「セクション」があります。

メタデータセクションには、
ハウスキーピングデータ、このトランザクションの一意のID、ロックタイム、
およびサイズが含まれています。

入力セクションには、以前に作成されたUTXOのリストと、
私がお金を使い資格がある証拠が含まれています。

この証拠は私にUTXOを交換し、
それらを使って新しい出力を作り出すことを可能にします。

出力セクションには、
新しいアドレスに送信される新しいUTXOのリストが含まれています。

これらの値のそれぞれには、
有効な証明を提供することができる意図された償還者以外の人から、
価値をロックするスクリプトが付いています。

 

メタデータ

メタデータから詳細に見ていきましょう。

最初のメタデータは、
トランザクションのハッシュまたはこのトランザクションの一意の「ID」です。

ベクトル入力サイズを表すvin_szは、
このトランザクションで参照される入力UTXOの数、
ベクトル出力サイズを表すvout_szは、
作成される新しいUTXOの数を表します。

このケースでは、2つのUTXOでこのトランザクションを作成し、
それらを1つの新しいUTXOとしてラスティに送信します。

最後に、バージョンとロックタイムがあります。

バージョンは、使用しているビットコインソフトウェアのバージョンを指定する番号です。
この講義の後半で、ロックタイムについて詳しく説明します。

 

インプット

インプットについて話しましょう。

メタデータセクションには、
このトランザクションオブジェクト全体のユニークなIDがあります。

これらはインプットに便利です。

 

ここで見られるハッシュのそれぞれは、
現在使用されている関連するUTXOを含む以前のトランザクションの一意のIDへの参照です。

 

また、前回のトランザクションでのインプットのインデックスを参照します。

“0”は最初のインプットを意味します。

“1”は2番目を意味し、以下同様です。

 

scriptSigは、これらの入力の中で最も重要な部分です。
なぜなら、関連するUTXOを償還することができることを証明する、
必要な証明書であるためです。

 

最後に、取引の最終成果物はアウトプットです。

ここでは、この特定のトランザクションで、
約10ビットコインの値を持つアウトプットが1つしかないことがわかります。

Satoshiはビットコインの最小単位です。

1つのビットコインは1億のSatoshiに変換できます。
つまり、小数点第8位まで割り切れることになります。

付随するアウトプットアドレスは、トランザクションをロックし、
このトランザクションで指定した特定の証明によってのみ償還可能なスクリプトです。

この場合、ラスティが彼の証拠を提供した後にのみ、
彼は私のUTXOを解錠して使うことができます。

 

ビットコインスクリプトの注意点

このトランザクションでは、
出力アドレスは実際にはスクリプトです。

この特定の出力スクリプトでは、
「この金額は、Xにアドレスするためにハッシュした公開鍵と、
その公開鍵の所有者からの署名とで償還することができます」と読むことができます。

これは私たちをScriptに戻します。

ビットコインがスクリプトを使用して入出力を接続する理由をよりよく理解していますか?

公開鍵を一緒に接続するのではなく、
スクリプトを使用して入力と出力を接続すると、
潜在的に複雑なトランザクションタイプが可能になります。

スクリプト言語はスタックベースであり、
暗号化をネイティブにサポートしており、
セキュリティ上の理由から意図的に機能が制限されています。

 

P2PKH(Pay to Public Key Hash)とは

スクリプトがどのように動作するかの例を見てみましょう。

私たちが見ている例は上図の一番上にあります。

このスクリプトは、
以前のトランザクション出力を利用する、
最も一般的なタイプのトランザクションをビットコインで指定します。

この以前のトランザクションを利用するには、
(1)前のトランザクションが送信された時にアドレスを生成し、ハッシュしたときの公開鍵、
(2)私たちが提供した公開鍵に対応する秘密鍵の所有権を証明する署名
これらがアイデンティティを証明するために必要です。

これは、Bitcoin Pay to Public Key Hashで最も一般的な種類のスクリプトです。

しかし、どのようにこの機能を実装しますか?

スクリプトのロックとロック解除。

ロック解除スクリプトは、
前回のトランザクションから費やしたいときに入力したスクリプトで、
関連するビットコインを使用することができます。

自分の身元を証明し、トランザクションの出力を解除するために、
あなたは必要な署名と公開鍵を提供します。

あなたの公開鍵はハッシュされ、
UTXOを所有するアドレスと照合されます。

あなたが署名を提供するので、
このスクリプトはscriptSigと呼ばれます。

 

ロックスクリプトは、
以前のトランザクション出力で見つかったスクリプトです。

ロックスクリプトは、
UTXOを引き換えるための要件を指定します。

これは本質的にUTXOを「ロック」するので、
誰でもロックを解除した人だけがUTXOを使えます。

Pay to Pub Key Hashの例では、
ロック・スクリプトは、前のトランザクション出力から費やしたいユーザーが、
特定のアドレスにハッシュする秘密鍵を所有していることを証明しなければなりません。

このため、このスクリプトはscriptPubKeyと呼ばれています。

 

ロック解除スクリプトとロックスクリプトを連動させるには、
それらを連結するだけです。

ロックを解除するスクリプトをロックスクリプトscriptPigの上に置き、
それを一緒に実行します。

また、結果のスクリプト全体が正常に実行され、
トランザクションが有効とみなされなければなりません。

 

Quick Check 1

スクリプトレベルでは、UTXOをどのように償還するのですか?

  • The UTXO owner provides a locking script to some unlocking script.
  • The UTXO owner provides an unlocking script to some locking script.
  • The UTXO recipient provides a locking script to some unlocking script.
  • The UTXO recipient provides an unlocking script to some locking script.

 

P2PKHの具体例

ここで、ビットコインスクリプトについて、
これまでに学んだことのすべてをまとめ、
Pay to Public Key Hashのサンプル実行を見てみましょう。

 

まず、実行順序がどのように定義されているかを確認します。

図の左上には、
scriptSigが上に、scriptPubKeyが下にあります。

一番上のscriptSigは、
作成している新しいトランザクションへの入力スクリプトであり、
一番下のscriptPubKeyは、
使用しようとしている古いトランザクションの出力スクリプトです。

ビットコインスクリプトはスタックベースであり、
先入れ後出し方式で実行されるため、実行は次のように進められます。

 

まず、スタックに署名を入れます。

 

次に、公開鍵をスタックに置きます。

 

OP_DUPはスタックの一番上の項目を複製します。

 

OP_HASH160はスタック上の前の項目をSHA-256でハッシュし、
次にRIPEMD-160でハッシュします。

 

次に、<pubKeyHash?> – 山括弧内の疑問符は、
以前のトランザクション出力で指定された実際の公開鍵ハッシュです。

これをスタックにも入れます。

 

OP_EQUALVERIFYは、
スタック内の上位2つの項目が等しいかどうかをチェックします。

それらが等しい場合、私たちは実行を続けます。
そうでない場合、トランザクションは無効であり、実行を停止します。

この場合、トランザクションが有効であるとしましょう。
したがって、実行を続けます。

 

最後に、OP_CHECKSIGは、
指定された公開鍵で署名の正当性をチェックします。

有効な場合はtrueを返します。

最後に、最終的な戻り値がtrueであるため、
トランザクションが有効であることがわかり、トランザクションが処理されます。

 

Proof of Burn

ビットコインスクリプトでできることは、
ビットコインブロックチェーンに任意のデータを書き込むことです。

これはProof of Burnの背景にあるアイデアです。

OP_RETURNというスクリプトにopcodeがあります。
このスクリプトには、エラーが発生した場合にそれをスローします。

出力スクリプトの前にOP_RETURNを持つスクリプトを指定した場合、
その前に実行が終了するため、出力は使用できません。

このトランザクションがブロックチェーンに公開されている場合、
ビットコインを破棄したことが証明されています。

あなたがそれをburnして以来、
誰もそのビットコインを再び使うことはできません。

 

OP_RETURNの下に、
必要なものを置くスペースがあります。

あなたがビットコインをburnするこのコンセプトでできることの1つは、
あなたが何らかのアルトコインを取得するために、
あなたが何らかのビットコインを破壊しなければならないことを必要とする、
アルトコインをブートストラップできることです。

CalCoinのようないくつかのアルトコインはこれを行います。

 

アルトコインの価値を派生させるためにOP_RETURNを使用する以外に、
任意のデータをブロックチェーンに書き込むこともできます。

OP_RETURNの下には、必要なものを書くためのスペースがあるので、
人々はこれで創造的になることができます。

あなたは潜在的に特定の時点で、
何かが存在することを証明することができます。

 

たとえば、新しい単語を作成し、
過去にこの単語を作成したことを将来証明したい場合は、
このデータを単純にブロックチェーンに書き込むことができます。

前述したように、ビットコインブロックチェーンは不変であり、
現実的には変更できません。

トランザクションにはタイムスタンプも付いているので、
過去にこの言葉を実際に作り出したことが分かります。

言葉以外にも、あなたがburnしたビットコインを持っている限り、
文書、音楽作品、その他の創造的な作品、または何かの存在を証明することができます。

 

あとがき

 

Proof of Burn

ビットコインの活用法として、
すごい幅が広がるなと思いました。

 

そして、ビットコインスクリプトで、
ビットコインブロックチェーンに任意のデータが書き込める。

この使い方を応用することで、
様々なサービスが生まれてるんですね。おそらくですが。

 

前回よりは理解できたので、
少しは気が楽になりました。

ですが、専門外の話を聞くのは、
非常にエネルギーを使いますね笑。

 

ってことで、
今回はこの辺で失礼します。

このブログを書く僕の目的は、
「ファンを作ること・仲間を増やすこと」です。

趣味が合う、気が合う、考え方が合う。
なんかええなーと思ったら、気軽にメッセージください。喜びます。

終わり。

 

次の記事
マルチシグとロックタイム。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-5

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ABOUTこの記事をかいた人

物語の引き金を引く男 / 「てめえの人生に火をつける」 / プロ火付け役 / 腐れニートからの再始動 / 見知らぬ人にMacBook Proを買った人 / 32日で100記事達成 / ただの足跡を伝説に変えていく男 / Youtubeで #クレメアラジオ 不定期配信 / サロン「裏世界」オーナー 参加希望者はDMまで