これを防がないと、一度支払いトランザクションを作ったら残高がなくなるまで何度でも実行されて、すっからかんになってしまう。対応してるかを説明する前に、他のコインではどうやっているかを調べてみることにしよう。呼ばれる未使用コインを新たな所有者に送ることで実現される。使用済みである、と判断されエラーになる。防ぐメカニズムである。代わりにもっと柔軟なステータスを扱えるようにしたからだ。防ぐためにある機能が発明された。それが「ナンス」である。ナンスとはアカウント(アドレスのようなもの)が過去に実行したトランザクションに付与される連番であり、イーサリウムのノードはアカウントごとに何番まで実行したかを記憶している。同じ番号を2度と実行することがないのだ。これを機能させるためにはトランザクション作成者もアカウントごとに何番まで実行したかを覚えていなくてはならない。これはトランザクションはアカウントという単位に縛られるということでもある。複合トランザクションのようにアカウントと1対1に結び付けることができないような場合には、そもそも連番そのものを設定できず困ってしまう。やって解決しているのだろうか?実は非常に原始的な方法でこの問題を解決している。それは「過去に実行したトランザクションIDは2度と実行できない」という制約をかけることである。この制約をそのまま実装してしまうと、過去に実行したすべてのトランザクションIDに対して重複チェックをしなくてはならず、運用を続けるらうちにメモリを食いつぶしてしまう。一つのルールを設けた。「トランザクションには有効期限がある」である。この有効期限はトランザクションヘッダに記載されている。要はトランザクションには賞味期限があるのだと思ってもらいたい。ある程度古いトランザクションは絶対に実行されない。賞味期限が切れているからだ。ゆえに古いトランザクションについてはわざわざ重複チェックをする必要がない(どうせ実行されないので)。重複チェックをしなくてはならないトランザクションはある限られた範囲に収まることになる。これならばどんなに長期間運用したとしても限られたメモリで重複チェックが可能だ。ちなみにあまりに未来の有効期限を設定した場合この機構が働かなくなってしまうため、有効期限の上限チェックも行われる。有効期限チェックをするためには「現在時刻」が必要だ。ノードによってタイマーは異なっているので内蔵のシステムタイマーは利用できない。ブロックの生成時刻を「現在時刻」として利用している。このへんは決定性ステートマシーンらしい特徴といえよう。これによってエスクロー取引を自然に表現でき、リレーショナルデータベースのようにコミット・ロールバックが表現できる。次回はいよいよスマートコントラクトについて書こうと思う。スマートコントラクトはアセットのオーナーになれる。特徴の中でも私が最も気に入っているものなのでちょっと気合が入る。ダウンロードこの記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。仮想通貨交換業もさることながから、現在はブロックチェーンのポテンシャルこそが世の中を変えると思っています。メンバーがお届けする公式ブログ。「ブロックチェーンで世界を簡単に。