一昔前、システムを構築するときに必ずデータの構造とそれらの性質等を考察した上で、データベース設計を行なったり、ファイルを構築する工程を辿った時があります。このとき、マスターとかトランザクションデータはどう構成するかといった議論をなされたものです。平たくいえば、トランザクションとはある約束に基づいてまとまられた情報の集まりをいいます。大概のビジネス上での業務システム、つまりアプリケーションの世界では一連のトランザクションそのものといえるのです。これ以上分けることが不可能な一連の情報処理を行う単位であると定義できます。マスターとは数々の取引を行う上で、取引には必要不可欠な情報の集まり、例えば、商品マスター、社員マスター等があります。
では、トランザクションスクリプトとは何をいうのでしょうか? マスターその他ファイルをアクセスしながら様々なロジックが取引の中に存在します。このロジックは多種多様な機能と情報の集まりを有しています。そうなのです。ある規約に基づいた情報の集合体と定義されるものです。ただ、このトランザクションはある一つの機能をプロシージャとして一連の処理を果たすための手続きを実行するためのものではなく、手続きを実行させるためには、トランザクションスクリプトを構成することが必要になってきます。こうすることで、始めて、データベースラッパーを介してデータベースにダイレクトにアクセスすることができることになります。ということは、様々な機能を持っているロジックをある規約に基づいていることと、単一のプロシージャとして実行する仕組みを形成したものがトランザクションスクリプトといえます
仮想通貨におけるトランザクションに対して不正の有無を検証(verify)するプロシージャがトランザクションスクリプトと定義されます!
トランザクションスクリプトのお蔭で、本当に送信者からの入力情報が正しいか、又は本当に正しい送信先に対する出力情報なのか等を検証するという非常に需要な機能を果たすことができるのです。これらの機能を最大限活かすためには、仮想通貨世界においてはトランザクションは生成されては消費されるといった機能を実行していきます。この仕組みはUTXOといわれているものです。UTXOについては別の機会にすることとして、トランザクションスクリプトがScript言語で書き込まれていることから、Script言語の特徴について記述してみます。
【Script言語について】
仮想通貨の世界においては、仮想通貨専用のScript言語が主流となっている言語です。この言語は極めてシンプルな言語で、複雑な処理を行うことは不可能な言語です。このことが幸いして、プログラム動作を軽くし、かつ脆弱性になることを防御しています。
★チューリングについて・・・仮想通貨におけるScript言語はチューリング面においては不完全な言語といえます。不完全であるが故に、if文等の条件分岐、ループに制限を設けているのが、大きな特徴となっています。ループ制限があることで、DDoS攻撃から守ることができるのです。その反面、よく使用されているC言語、Java、Javascript等の言語はチューリング面で完全性をもっている言語です。
★ステートレスについて・・・このステートレスは仮想通貨世界においては極めて大切な機能です。ということは、トランザクションスクリプトを実行するたびの各種情報をScript言語としては保持しないことが大きな特徴といえます。
Script言語にScriptSigとScriptPubKeyの2種類の言語が存在し、これら2つの言語については別の機会でUTXOで詳細を記述します。
トランザクションスクリプトの種類について
現在、トランザクションスクリプトには5種類の存在しています。
❶P2PKH・・・仮想通貨ネットワーク上で処理されている最も普遍的なスクリプト
❷P2PK・・・P2PKHをさらにシンプルにしたスクリプト
❸マルチシグネチャ・・・P2PKHにおいてScriptPubKeyでの条件付加、及びScriptSigでの条件解除に対して、それぞれ複数個の公開鍵とデジタル署名を必須とするスクリプト
❹P2SH・・・マルチシグネチャの場合は送信先が複数あれば、特別のスクリプトを実行させる必要がありましたが、この点に改良を加えたのがP2SHで、要は複数の送信先に対する公開鍵をハッシュ関数を介してハッシュ値を指定する方式に改良したことです。
❺OP_RETURN・・・タイムスタンプによるファイルの存在を証明する場合に使われるスクリプトがOP_RETURNという特殊なスクリプトです。このOP_RETURNスクリプトは今後のUTXOデータベースが肥大化していかないことという背景があります。
コメント