中級 レッスン2 読了4分

小さな言語がすべてのコインを閉じ込める

すべての出口には小文字で書かれた鍵があり、使うことはそれが受け入れる鍵を提示することです。

すべてのビットコインはプログラムによってロックされています。それは非常に小さく、意図的に単純で、誰にも気づかれずに毎日何十億回も実行されます。このプログラムが書かれている言語はScriptと呼ばれ、サトシが他の部分と一緒に設計しました。これを理解することは、トランザクションが具体的に何を証明するのかを理解することです。

Scriptはスタック方式で動作します。古いカウンターの紙のスパイクを想像してください。紙は上にしか置けず、上の紙しか取り出せません。各命令はデータをスタックに積むか、上の紙をいくつか取り出して計算し、その結果をスタックに積みます。最後に、上に残ったものが真であれば、支出は有効です。

紙は上からしか入りませんし、上の紙しか出せません。

ビットコインの歴史で最も一般的なロックであるP2PKHを、一行ずつ読む価値があります。これは、トップにあるものを複製し、それのhash160を計算し、保存しておいたこのハッシュをスタックに積み、それらが等しいことを確認し、等しくなければすべてを停止し、最後に署名を確認するというものです。

支出する人は署名と公開鍵の2つを提示します。これら2つは最初にスタックに積まれ、その後ロックが実行されます。複製は公開鍵が2回使用されるために存在します。1回目はハッシュに変換してアドレスと比較し、2回目は署名を確認するためです。ハッシュの比較は、その公開鍵がそのアドレスの所有者であることをネットワークが確認する瞬間です。署名の確認は、その鍵を提示した人が対応する秘密鍵も持っていることを確認する瞬間です。

今起こったことに注目してください。モジュール4の2つの質問 — このアドレスはこの鍵のものか、この署名はこの鍵のものか — は、ノードのプログラムに隠されたルールではありません。それらは、ミニチュアで、コイン自体の中に書かれています。

現代の形式であるP2WPKHは、より少ない言葉で同じことをします。ロックはバージョンマーカーとhash160だけになり、署名と公開鍵はトランザクションの別の領域である証人に移動します。ノードはパターンを認識し、それが書かれていなくても同じ検証を適用します。バイト数が少なく、同じ保証で、手数料が低くなります。

さて、最も重要なこと:Scriptがしないことです。Scriptにはループがありません。どの命令も後戻りせず、どのプログラムも同じ部分を2回実行することはできません。すべての実行は終了し、世界中のどのノードでも迅速に終了します。この制限は設計の怠惰ではありません。ブロックの検証が予測可能な時間で行われることを保証し、誰も終わらないロックを書いてネットワークを停止させることができないようにするためです。

シリンダーは一度だけ回り、止まります。最初に戻ることはありません。

また、トランザクションの外を見ることもありません。時計で今日の日付を知ることも、価格を調べることも、トランザクション間でメモリを保持することもありません。彼が決定するすべてのことは、彼の前にあるものだけで決定されます。

これらの制限の中で、思ったよりも多くのことが可能です。Scriptは複数の署名を要求し、前のトレイルのマルチシグはこのようにして存在します。Scriptはコインを特定の日付まで、またはブロック数が経過するまでロックします — 2015年に追加されたOP_CHECKLOCKTIMEVERIFYは、19世紀の銀行の時計付き金庫をソフトウェアで表現したものです。そして、Scriptは秘密の背後にコインをロックし、特定のハッシュを生成するデータを明らかにする人に解放します。このメカニズムは、Lightningネットワーク全体を支えています。

時間が来るまで誰にも従いません。

2010年8月、サトシは一度に約15の命令を無効にしました。その中には、データを結合または分割する命令も含まれていました。これは、誰も正確に分析できなかった動作を恐れたためです。この決定は、より表現力豊かな言語を望む人々から批判され続けていますが、完全に監査可能なほど小さなネットワークを好む人々によって擁護されています。この議論は今も続いており、両方の側で誠実です。

有効なロックを持っているだけでは支出するのに十分ではありません。トランザクションはまだマイナーに到達し、何千もの他のトランザクションとスペースを争い、選ばれる必要があります。次のレッスンでは、メモリプールと次のブロックに入るトランザクションを決定するオークションについて学びます。