いってももう3か月前になる。この記事自体は3か月前に書いてあったのだが、諸事情があり公開が遅れた。本気でmiyabiを売る気があるのかと疑われてもしょうがない、と反省しよう。今年はmiyabiをどんどん表に出していきたい。なんといっても我々のブロックチェーンに対する想いが詰まった製品だ。セミナーを行うので興味のある方はぜひ参加していただけると嬉しいです。申し込みは以下のリンクから。https://hashhub.connpass.com/event/164253/さて前回、ブロックチェーンは分散ステートマシンであると書いた。トランザクションとは、状態を変更するためのコマンドであるとも書いた。トランザクションにはいろいろな秘密が詰まっている。今回はそのトランザクションについて説明しよう。おけるトランザクションは実行の最小単位であり、状態を変更するための唯一の手段でもある。実行の最小単位なので失敗したら状態は書き換わらずにロールバックされる。当然だがトランザクションはブロックに記録されるのでいわゆるログとしても機能する。このログは改ざん不可能であり、なかったことにもできない。これはブロックチェーンだから当たり前だろう。トランザクションの中を見てみる次に詳細を見てみよう。トランザクションは次の4つのパートから構成される。このエリアにはトランザクションに署名するべき公開鍵(のリスト)を記載する。実際の署名は4のエリアに置かれる。3と4のエリアを見比べて、指定されたとおりの署名がなければ形式的にエラーとなるというわけだ。前回、テーブルへの書き込み権限チェックではトランザクションの署名を使うと書いた。今説明した形式チェックはこの実行時のチェックとは別物である。このチェックは形式チェックなので実行時まで待たなくても、トランザクションの受信時に行うことができる。実行時には本当にそのデータを変更する権限があるか?というチェックが別途行われる。指定しないこともあり得る。スマートコントラクト呼び出しトランザクションの場合、どのテーブルにアクセスするのか予測することは困難だ。単純にスマートコントラクトを解析するのが大変という側面もあるが、そもそも条件分岐があるような場合、条件次第でどのデータを書き換えるかは実行時までわからない、というパターンもあることを指摘しておこう。複合トランザクション2のエリアにはトランザクションエントリーのリストが入る。トランザクションエントリーというのはいささか不格好な命名なのだが、非常に重要な概念だ。これは命令(実行ではない)の最小単位なのだ。パラメータ(a,b,c)で呼び出せ」のようなものが入る。ややこしく見えるが「コインを動かせ」とか「書き込め」とかも、組み込みのスマートコントラクトを呼び出していると捉えれば、結局はスマートコントラクトの呼び出しのことだと考えてもいいだろう。トランザクションエントリーは任意の個数持つことができる。ふーん、と思うかもしれないがこれは大きな設計上のポイントなのである。取得しているくらいだ。複合トランザクションによりエスクローが簡単に実現される。実行(命令ではない)の最小単位はトランザクションなので、複数のトランザクションエントリーは全部実行されるか、全部実行されないかのどっちかにしからならない。2つのコインの移動があった場合にどちらか片方が(残高不足などで)失敗した場合に、中途半端な状態になることなく両方とも元の状態に戻る。BTC」「B->Aに100万円」という複合トランザクションを作成すれば、両方とも成功するか両方とも失敗するかになる。エスクローが実現されるというわけだ。次に複合トランザクションは契約者間の合意という意味あいもある。契約内容(トランザクションエントリー)に対して契約者(AとB)が両者とも署名する、というのは現実世界の契約書にハンコを押すというのと同じことであり、両者の合意を示しているといえるだろう。複合トランザクションにすることで、実行の順序を指定することも可能だ。入金してから支払うような場合、入金の方を先に処理しなくてはならないケースのあるだろう。問題点もちろんこれらの利点は只では手に入らない。