前回のおさらいトランザクションブロック連載「これからイーサリアムを学ぶ人のための教科書」ではこれからイーサリアムに関する情報を追っていくための基礎としてイーサリアムのプロトコルへの本質的な解説をしていきます。この連載を読み、技術レベルでの理解をしていただければ今後のイーサリアムに関する情報にキャッチアップしていくことができます。前回をまだ読んでいない方はこちらから。アカウント・ステート・ガス今回は前回と同様に具体的にイーサリアムブロックチェーンの構成要素にフォーカスして解説していきます。今回解説する要素は以下の通りです。Workに関しては第3回で解説していきます。今回も前回と同様、技術的に難しいと感じる部分に関しては漠然とした理解で読み進めて問題ありません。移行していくということです。トランザクションには以下の2種類が存在します。creations):新たにコントラクトを作り出すためのトランザクションそれぞれのトランザクションは両方とも以下の構成要素を含んでいます。nonce:送信者から送信されたトランザクションの数gasPrice:送信者が設定した手数料の最大値、ガス1単位あたりのgweiの量gasLimit:送信者が設定したガスの数to:トランザクション受信者のアドレス、コントラクト生成トランザクションの場合、コントラクトアドレスは存在していないため、この数値は空になります。value:送信者から受信者に送られるETHの量、コントラクト生成トランザクションの場合、この数値が新しく作られるコントラクトアカウントが持つ初期残高になります。v、r、s:トランザクションの送信者を証明する署名を生成するのに使われるものinit:コントラクト生成トランザクションのみに存在し、新しいコントラクトを始めるのに必要なEVMのコードの一部です。initは一度だけ動き、戻り値としてアカウントコードのボディ部分を返したのち、破棄されます。このアカウントコードのボディ部分はコントラクトアカウントの一部として今後使われることになります。data:メッセージコールだけに存在するオプションで、パラメーターなどの入力データが当てはまります。スマートコントラクトがドメイン登録サービスとして機能している場合は、ドメインやIPアドレスなどが入力されます。したがって、メッセージコールとコントラクト生成の両方のトランザクションともEOAによって開始され、ブロックチェーンに送信されます。これは言い換えるとトランザクションがイーサリアム内部のステートと外部を接続しているということになります。コントラクトアカウントから別のコントラクトアカウントへトランザクションを送信できないわけではありません。ある範囲内のコントラクトアカウント同士はメッセージまたはインターナルトランザクションによって他のコントラクトアカウントへトランザクションを送信することができます。これはEOAによってではなくコントラクトアカウントによって生成されるという点で普通のトランザクションとは異なります。あるコントラクトアカウントから他のコントラクトアカウントにインターナルトランザクションが送られたとき、受信者のコントラクトアカウントが持つプログラムが実行されます。一つ内部トランザクションが通常のトランザクションと異なる点は、トランザクションの内容にガスリミットを含まないという点です。ガスリミットはEOAからトランザクションが送信される時のみ設定されます。ここで一つ注意しなければならないことがあります。それは、EOAから送信するトランザクションは、そのトランザクションの結果発生する内部トランザクションで消費されるガスまで考慮してガスを設定しなければならないということです。ブロック全てのトランザクションはグループとしてブロックに追加されます。そのブロックがチェーン上に連なってブロックチェーンを作り上げます。イーサリアムではブロックは以下の要素で構成されています。(現在のブロックのommerのため)Ommerとはommerは、親ブロックが、現在のブロックの親の親と同一のブロックのことを指します。uncleブロックとも呼ばれますが、本記事ではイーサリアムのイエローペーパーの表記に基づき、ommerという言葉で説明します。ちなみにommerというのは叔父・叔母の性的区別の無い単語です。この、ommerと呼ばれるブロックの情報が現在のブロックに含まれるのには理由があります。イーサリアムは設計上、ビットコインなどのブロックチェーンに比べてブロックの生成時間は平均15秒と、短くなっています。しやすくなってしまいます。これは、ブロック生成時間が短いとマイナーが同時に別のブロックを生成する可能性が上がるからです。同時に生成されたブロックはその後各ノードに伝播されますが、その間に時間差が発生した場合には遅く伝播された方のブロックは破棄されてしまい、メインチェーンには含まれないことになります。このように破棄されてしまってはブロックを生成し、ネットワークのセキュリティを維持することに費やされたリソースが無駄になってしまいます。そこで、イーサリアムブロックチェーンでは、orphanedブロックになってしまい、メインチェーンに含まれることができなかったommerブロックを発見し、現在のブロックに取り込んだマイナー、そしてommerブロックを生成したマイナーにも報酬を与えています。(現在のブロックの7個前のブロックまでの場合)Ommerブロックを生成したマイナーは通常のブロック報酬の93.75%、ommerブロックのヘッダーを現在のブロックに取り込んだマイナーに通常のブロック報酬+通常のブロック報酬の3.125%を報酬として受け取ります。各ブロックが持つブロックヘッダーは以下の要素によって構成されています。transactions、receiptsは前回の記事で解説したマークルパトリシアツリー構造によってデータを集約しています。その他の要素についても解説して行きます。ブロックの生成・承認時間が一定となるようにするために存在しています。イーサリアムブロックチェーンの一つ目のブロックであるジェネシスブロックは131,072という難易度であり、以降のブロックの難易度はブロックごとに特殊な計算が行われ決定します。ブロックが、直前のブロックよりも早く生成・承認された場合には難易度が引き上げられ、遅く生成・承認された場合には難易度が引き下げられ、平均してブロック生成時間が15秒になるように設計されています。ここまでがトランザクションとブロックの解説になります。(EVM)、そしてマイニングについてはかなり難しい内容になるため次回に分けて解説していきます。5月お問い合わせ事例の紹介や、事業に合わせた提案など承っております。こちらのフォームからお申し込みください。2018特定業界や地域に特化した調査レポートの作成や、ブロックチェーンを活用したビジネスのプランニング等も承っております。