クリプト

イーサリアム(Ethereum)のホワイトペーパーを読んでみようPart4

watanabe's icon'
  • watanabe
  • 2018/05/12 14:42


こんにちは!Etheruemの仕組みが難しくて挫折しそうなIzuruです笑

ビットコインの論文は割とサクサク読めたのですが、イーサリアムはビットコインより複雑で、理解するのに結構時間がかかりますね、、


でも、諦めずに読み進めていきましょう!

きちんと理解すれば必ずいいことがあります、、きっと笑


イーサリアム(Ethereum)のホワイトペーパーを読んでみようPart1

イーサリアム(Ethereum)のホワイトペーパーを読んでみようPart2

イーサリアム(Ethereum)のホワイトペーパーを読んでみようPart3


今回は、

Ethereum の 状態遷移関数
コード実行
Blockchain と 採掘

のチャプターをいってみましょう!


Content image


Ethereum の 状態遷移関数

1. トランンザクションが 「 well-formed 」であるか(例えば、値が正しい数値であるか)チェックし、 署名が有効であれば、ノンスが送信者のアカウントのものと合致するかチェックします。もし、そうでなければ、エラーを返します。
2. トランザクションの手数料を STARTGAS * GASPRICE として計算し、署名から送信アドレスを決定します。 送信者のアカウントの残高から手数料を差し引き、送信者のノンスを次の値へとインクリメントします。 もし、残高不足であれば、エラーを返します。
3. GAS = STARTGAS として、GAS 値を初期化し、トランザクションにおける byteデータ量 のぶんだけ byte あたり一定量の gas を支払います。
4. 送信者のアカウントから受信者のアカウントにトランザクションの値を転送します。もし、受信者のアカウントが存在しないものであったならば、あたらしくつくります。もし、受信者のアカウントが contract であれば、すべての実行が完了するか、あるいは ガス欠 になるまで contract のコードを実行します。
5. もし、送信者が十分なお金を持っていなかったり、 ガス欠 のために、値の転送が失敗した場合には、手数料の支払いを除いて、全状態を元に戻し、手数料はマイナーのアカウントに加えます。
6. そうでなければ、余った全ての gas を全て送信者に返し、消費した gas は採掘者に支払われる手数料として送信します。
Content image

んーなに言ってるかわかりませんね笑

とりあえずここで言いたいことは、トランザクションのやり方です。

全てのトランザクションはEOAから作られます。

・トランザクションに有効な署名やノンスがあるかどうか
・GASの量が足りているかどうか をチェックします。
・EOAから受信者のEOAにトランザクションを行います。もし受信者がcontractであればコードを実行します。
・途中でガス欠になったら手数料の支払いを行なった後は、全状態を元に戻して終了します。
・逆にもしガスが余ったら、お釣りを送信者に返します。

さらにイーサリアムに特徴的なのは、contractアカウントを作成するトランザクションがあるということですね。

つまり、EOAからの指示で、コントラクトアカウントを作成するトランザクションです。


Content image


コード実行

Ethereum の contract コードは低級スタック・ベース・バイトコード言語で書かれており、「 Ethereum 仮想マシンコード 」や「 EVM code 」などと呼ばれております。 そのコードは一連のbyte列から構成されており、各 byte はひとつの命令を表しております。
EVM における 命令 はデータを貯蔵するために必要な 三種類の スペース にアクセスします。
* stack, 後入れ先出しのコンテナで、push と pop という二つの命令により値を出し入れします。
* Memory, 無限拡張および無限展開可能なバイト配列
* storage, contract が保持する長期保存用ストレージで 、Key/value の貯蔵庫。スタックやメモリでは計算実行後毎にリセットされるのに対し、storage では長期間、値が保持される。

ちょっと専門的すぎるのでここは大幅にシンプルに、

コントラクトアカウントにかかれているコードは、「EVMコード」というコードで書かれていると理解しましょう。(EVM = Ethereum Virtual Machine, イーサリアム仮想マシン。

そして、スタックやメモリー(一時的なデータを保存する)、ストレージ(永久的にデータを保存する)という部分に分かれているということですね。

そして、EOAからcontractアカウントへのトランザクションによって、contractアカウントに書かれているコードが実行されるということですね。

これによって、イーサリアムでは、ブロックチェーン上でアプリケーションを動かすことを可能にしています。



Blockchain と 採掘

Ethereum の blockchain は多くの点で Bitcoin のそれと似ていますが、いくつか違う点があります。 bockchain のアーキテクチャに関する Ethereum と Bitcoin の違いは、次のようになります。 Bitcoin とは違い Ethereum のブロックはトランザクションのリストとブロック生成時点の 状態 のコピーを内部に保持しています。 脇道にそれますが、ブロック番号 と difficulty という、べつの二つの値もブロックに貯蔵されます。 Ethereum における基本的な、ブロック有効化 アルゴリズム は以下となります。
1. ブロックの参照する 直前のブロック が存在し、それが有効であるかをチェックします。
2. タイムスタンプが 、直前のにおけるそれよりも値が大きく、15分さきの未来まで後出のものより値が小さいことを確認します。
3. ブロック番号、難易度、トランザクションのルート、Uncle のルート および ガスの上限(様々な、低級Ethereumの仕様概念)が有効であるか確認します。
4. ブロックの有効証である proof of work が有効であるか確認します。
5. 直前のブロックの最後の状態を S[0] とする。
6. TX をトランザクション・リストとし、n 個のトランザクションを含むものとする。 0...n-1 までの全ての数に対し、S[i+1] = APPLY(S[i], TX[i]) とする。 もし、アプリケーション群のどれか一つでもエラーを返したり、ブロックで消費される全 gas 量がこの段階で GASLIMIT を超過していたりすると、エラーを返します。
7. S[N] を S_FINAL としますが、採掘者へのブロック採掘に対する報酬も加えます。
8. 状態 S_FINAL の マークル木 の ルート がブロックヘッダにおいて与えられる 最終状態のルート と一致するか確かめます。 もしそうであれば、ブロックは有効で、そうでなければ、ブロックは無効です。
Content image

ここで述べられているのは、ブロックの採掘の仕方ですね。

イーサリアムのブロックには、ビットコインと異なり、トランザクションのリストだけでなく、「ブロック生成時点の状態のコピー」が含まれています。

ビットコインのやりとりはUTXO; Unspent Transaction Output(未使用のトランザクションの出力)のやりとりとして行われています。

つまり、「電子署名の履歴」そのものがビットコインであり、新しい署名の履歴(=トランザクションの出力)だけが無数に存在している状態がビットコインです。

ビットコインでは、誰がいくら保有しているか、という情報は保存されず、UTXOを全てかぞえあげることでしか誰がいくら保有しているかを知ることはできません。

それに対し、イーサリアムでは、アカウントごとに「現在の状態」の情報が保存されています。

ビットコインの仕組みについてはこちらで説明していますので、ご覧ください。

ブロック生成にあたっては、タイムスタンプや難易度、トランザクションのルート、ガスなどの有効性を確認します。

ひとつひとつトランザクションを認証していき全てのトランザクションを確認したら、マイナーは報酬をもらいます。


今回もなかなか重い内容でしたね笑

では、続きはまた次回!

イーサリアムのホワイトペーパーより引用



公開日:2018/05/12
獲得ALIS:13.42
watanabe's icon'
  • watanabe
  • @Izuru
crypt

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
120.79 ALIS
Eye catch
クリプト

【初心者向け】JPYCを購入して使ってみました!

Like token Tip token
30.03 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

Polygon(Matic)で、よく使うサイト(DeFi,Dapps)をまとめてみた

Like token Tip token
235.30 ALIS
Eye catch
クリプト

Eth2.0のステークによるDeFiへの影響を考える。

Like token Tip token
43.10 ALIS
Eye catch
クリプト

【DeFi】複利でトークンを運用してくれるサイト

Like token Tip token
54.01 ALIS
Eye catch
クリプト

バイナンスの信用取引(マージン取引)を徹底解説~アカウントの開設方法から証拠金計算例まで~

Like token Tip token
3.50 ALIS
Eye catch
クリプト

ブロックチェーンの51%攻撃ってなに

Like token Tip token
0.00 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
クリプト

2021年1月以降バイナンスに上場した銘柄を140文字以内でざっくりレビュー(Twitter向け情報まとめ)

Like token Tip token
38.10 ALIS
Eye catch
クリプト

クリプトスペルズで入手したMCHCを引き出す方法

Like token Tip token
196.20 ALIS