Ethereumアカウントの種類とDAG(ファイル)を理解する
どうも、ぺろりんです。
今回は、マイニングしてみたところの記事で別途調べると予告した「アカウント」と「DAG(ファイル)」について調べましたので、そのまとめを書きます。
技術的な詳細をもっと調べて理解したいところですが、調べてみると時期尚早感があったので、これはコントラクトなんかにちゃんと触れてからまた戻ってこれたらいいなと思っています。
なので、今回は技術的な詳細には踏み込み過ぎない程度に調べた結果をまとめました。
一応、参考に挙げたリンクをたどっていただくともう少し詳細が書いていたりするのでご参考ください。
なお、理解が間違っていたりしたらメールフォームからこっそり教えていただけると幸いです。
EOAとContract account
EOA (Externally-owned Account:外部所有アカウント)
ユーザーと紐づくアカウント。コードは持たず、秘密鍵によって管理される。
ユーザーはEOAを通してブロックチェーンとやり取りする。
EOAは、宛先をEOA or Contract Accountとしてトランザクションを生成できる。宛先がEOAの場合は送金、宛先がContract Accountの場合は送金 or コントラクト(・コード)の実行をする。
Contract Account(コントラクト・アカウント)
ユーザーに紐づかないアカウント。ユーザーが持つことはできず、ブロックチェーン上に存在するアカウント。
コントラクト(・コード)のアドレス。オブジェクト指向言語での「クラス」に似たものというイメージらしい。
Contract Account自身はトランザクションを生成できない。(あくまでトリガーはEOA)
EOAとContract accountの違い
両者の違いとしてポイントになるようなのは、今回調べた感じだと
(1) ユーザーと結びつくか?
(2) トランザクションを生成できるか?
という2点のように思います。
(参考)
・トランザクションレベルで理解する。イーサリアムの具体的な仕組みを解説(ZOOM)
・技術者向け Ethereum(イーサリアム)の基礎知識(block-chain.jp)
・スマートコントラクトを作成し実行する(Ethereum入門)
DAG
DAGって何?
Directed Acyclic Graph(有向非巡回グラフ)のことです。
マルとマルを線で結んだものを「グラフ」と呼ぶのですが、この線に向きを付けて矢印にしたものが「“有向”グラフ」で、しかも閉路になっていないようなもの(“非巡回”)のことです。


詳しくは「グラフ理論」という数学のおはなしをググってみてください。「グラフ理論」自体は私もあまり知りません。。
この考えをマイニングのアルゴリズムに応用するためにあるのが、イーサリアムをマイニングするときに出てきたDAGファイルというやつです。
DAGを使った取引の仕組みは、参考に挙げた2つ目のリンクが個人的にわかりやすかったです。
DAGファイルをどう使うのかは、今回は調べきれずよくわからなかったです。だれか教えてw
(参考)
・有向非巡回グラフ(Wikipedia)
・DAG型暗号通貨のすすめ ブロックチェーンを代替しうる新技術(BTCN)
何のためにある?
マイニングにASIC(Application Specific Integrated Circuit)耐性を持たせるために、DAGファイルが作成されます。
(参考)
・技術者向け Ethereum(イーサリアム)の基礎知識(block-chain.jp)
ASIC耐性とは?
ASICというのはその名の通り「特定用途のために作られた集積回路」のことで、用途をしぼって必要最低限の機能だけを1つのチップにまとめ、しぼった特定の用途に関しては汎用チップよりも高速だったり低消費電力だったりで動作できるようなチップです。
そして「ASIC耐性」とは、こういった専用のICチップを持った人(特定の人)がマイニングで有利にならないよう、「ASICを作れない」もしくは「ASICを使う意味がない(ASICを使ってもマイニングで有利にならない)」という性質のことです。
(参考)
・ASIC(Wikipedia)
・ASIC(IT用語辞典)
・ASIC耐性とは(とってもやさしいビットコイン)
なぜASIC耐性が必要?
ASIC耐性がない(=ASICが有効)と「中央集権化を助長する可能性があり、これを防ぐためにASIC耐性が必要」と考えるからです。
なぜ中央集権化を嫌うかというと、ブロックチェーン技術はそもそも「“分散システムで”うまく合意形成できる」というのが売りで、中央集権化というのはこれに反するからです。
中央集権的な構造でないことにより、“第三者の承認なし”でAさんとBさんのやり取りが「確かに正しく行われた」ことが合意されるわけです。
“第三者の承認なし”というのが肝です。
ASIC耐性がなければ、ASICを使う人がマイニングにおいて有利になります。
ASICを使う人たちのコミュニティにより寡占が起こると、51%攻撃のリスクも生じます。
ただし、Bitcoinのように「ASICを使わないと実質的にマイニング不可能」な状況は悪意あるマイナーの参入障壁になっていたり、ASIC耐性がないことが完全に悪いというわけでもありません。
ASIC耐性を持たせるかどうかは賛否両論あるようで、たとえばTwitter上で以下のようなアンケートがありました。
(参考)
・ASICマイニング排斥の動き!ASICの性能と問題点とは(MoneyToday)
・ブロックチェーンの安全性を脅かす「51%攻撃」の仕組みと実態(ZOOM)
・ASICマイニング戦争|ユーザーはASICを許容すべきか否か (CoinPost)
なぜDAGでASIC耐性になる?
DAGにより計算が複雑化されるからです。
ASICというのは「やることを絞る」ことで性能を上げますが、DAGの考えを取り入れることで計算が複雑化し、高性能な計算ができる分野だけでは計算し切れないようにします。
単純な計算だからこそ特化して性能を上げられるのに、せっかく性能を上げた専門分野の計算だけではマイニングできないよう計算を複雑化し、「このような複雑な計算のためのASICはコストがかかり過ぎて作るメリットがない」状況を作ります。
これにより、「ASICを使う意味がない(ASICを使ってもマイニングで有利にならない)」状況になり、すなわちこれはASIC耐性なわけです。
(参考)
・Ethash DAG(ethereum/wiki)
・Dagger Hashimoto(ethereum/wiki)
・Ethashとは?(ETHEREUM JAPAN)
・暗号通貨 ハッシュ関数を学ぶ その1 SHA Ethash(草コイン、おかわりください)
・ASIC耐性とは(とってもやさしいビットコイン)
まとめ
今回は、過去の記事でよくわからなかった「アカウント」と「DAG」について調べてみました。
ざくっというと、アカウントはユーザーと結びついてトランザクションを生成できる「EOA」と、ユーザーとは結び付かずトランザクションを生成できない「コントラクト・アカウント」という2種類がありました。
「コントラクト・アカウント」はコントラクト・コードを実行するために必要なもののようです。
DAGは、これ自身は数学のグラフ理論で出てくる概念で、Ethereum(やブロックチェーン)の文脈では「この概念を応用した取引の仕組みが実装されている」というおはなしでした。
では何のためにかというと、「ASIC耐性」という、ブロックチェーンの(マイニングで)中央集権化を防ぐための性質を、そのブロックチェーンに持たせるためでした。
ASIC耐性の要不要については賛否両論あるようです。
とまぁ、現段階ではこのへんの理解にとどめて先へ進んでみようかと思います。
ではでは。
今回は、マイニングしてみたところの記事で別途調べると予告した「アカウント」と「DAG(ファイル)」について調べましたので、そのまとめを書きます。
技術的な詳細をもっと調べて理解したいところですが、調べてみると時期尚早感があったので、これはコントラクトなんかにちゃんと触れてからまた戻ってこれたらいいなと思っています。
なので、今回は技術的な詳細には踏み込み過ぎない程度に調べた結果をまとめました。
一応、参考に挙げたリンクをたどっていただくともう少し詳細が書いていたりするのでご参考ください。
なお、理解が間違っていたりしたらメールフォームからこっそり教えていただけると幸いです。
EOAとContract account
EOA (Externally-owned Account:外部所有アカウント)
ユーザーと紐づくアカウント。コードは持たず、秘密鍵によって管理される。
ユーザーはEOAを通してブロックチェーンとやり取りする。
EOAは、宛先をEOA or Contract Accountとしてトランザクションを生成できる。宛先がEOAの場合は送金、宛先がContract Accountの場合は送金 or コントラクト(・コード)の実行をする。
Contract Account(コントラクト・アカウント)
ユーザーに紐づかないアカウント。ユーザーが持つことはできず、ブロックチェーン上に存在するアカウント。
コントラクト(・コード)のアドレス。オブジェクト指向言語での「クラス」に似たものというイメージらしい。
Contract Account自身はトランザクションを生成できない。(あくまでトリガーはEOA)
EOAとContract accountの違い
両者の違いとしてポイントになるようなのは、今回調べた感じだと
(1) ユーザーと結びつくか?
(2) トランザクションを生成できるか?
という2点のように思います。
(参考)
・トランザクションレベルで理解する。イーサリアムの具体的な仕組みを解説(ZOOM)
・技術者向け Ethereum(イーサリアム)の基礎知識(block-chain.jp)
・スマートコントラクトを作成し実行する(Ethereum入門)
DAG
DAGって何?
Directed Acyclic Graph(有向非巡回グラフ)のことです。
マルとマルを線で結んだものを「グラフ」と呼ぶのですが、この線に向きを付けて矢印にしたものが「“有向”グラフ」で、しかも閉路になっていないようなもの(“非巡回”)のことです。


詳しくは「グラフ理論」という数学のおはなしをググってみてください。「グラフ理論」自体は私もあまり知りません。。
この考えをマイニングのアルゴリズムに応用するためにあるのが、イーサリアムをマイニングするときに出てきたDAGファイルというやつです。
DAGを使った取引の仕組みは、参考に挙げた2つ目のリンクが個人的にわかりやすかったです。
DAGファイルをどう使うのかは、今回は調べきれずよくわからなかったです。だれか教えてw
(参考)
・有向非巡回グラフ(Wikipedia)
・DAG型暗号通貨のすすめ ブロックチェーンを代替しうる新技術(BTCN)
何のためにある?
マイニングにASIC(Application Specific Integrated Circuit)耐性を持たせるために、DAGファイルが作成されます。
(参考)
・技術者向け Ethereum(イーサリアム)の基礎知識(block-chain.jp)
ASIC耐性とは?
ASICというのはその名の通り「特定用途のために作られた集積回路」のことで、用途をしぼって必要最低限の機能だけを1つのチップにまとめ、しぼった特定の用途に関しては汎用チップよりも高速だったり低消費電力だったりで動作できるようなチップです。
そして「ASIC耐性」とは、こういった専用のICチップを持った人(特定の人)がマイニングで有利にならないよう、「ASICを作れない」もしくは「ASICを使う意味がない(ASICを使ってもマイニングで有利にならない)」という性質のことです。
(参考)
・ASIC(Wikipedia)
・ASIC(IT用語辞典)
・ASIC耐性とは(とってもやさしいビットコイン)
なぜASIC耐性が必要?
ASIC耐性がない(=ASICが有効)と「中央集権化を助長する可能性があり、これを防ぐためにASIC耐性が必要」と考えるからです。
なぜ中央集権化を嫌うかというと、ブロックチェーン技術はそもそも「“分散システムで”うまく合意形成できる」というのが売りで、中央集権化というのはこれに反するからです。
中央集権的な構造でないことにより、“第三者の承認なし”でAさんとBさんのやり取りが「確かに正しく行われた」ことが合意されるわけです。
“第三者の承認なし”というのが肝です。
ASIC耐性がなければ、ASICを使う人がマイニングにおいて有利になります。
ASICを使う人たちのコミュニティにより寡占が起こると、51%攻撃のリスクも生じます。
ただし、Bitcoinのように「ASICを使わないと実質的にマイニング不可能」な状況は悪意あるマイナーの参入障壁になっていたり、ASIC耐性がないことが完全に悪いというわけでもありません。
ASIC耐性を持たせるかどうかは賛否両論あるようで、たとえばTwitter上で以下のようなアンケートがありました。
Would you support a hard fork that obsceletes ETH ASICs? (Just wondering, this is not a proposal)
— Vlad ''not giving away ETH'' Zamfir (@VladZamfir) 2018年3月28日
(参考)
・ASICマイニング排斥の動き!ASICの性能と問題点とは(MoneyToday)
・ブロックチェーンの安全性を脅かす「51%攻撃」の仕組みと実態(ZOOM)
・ASICマイニング戦争|ユーザーはASICを許容すべきか否か (CoinPost)
なぜDAGでASIC耐性になる?
DAGにより計算が複雑化されるからです。
ASICというのは「やることを絞る」ことで性能を上げますが、DAGの考えを取り入れることで計算が複雑化し、高性能な計算ができる分野だけでは計算し切れないようにします。
単純な計算だからこそ特化して性能を上げられるのに、せっかく性能を上げた専門分野の計算だけではマイニングできないよう計算を複雑化し、「このような複雑な計算のためのASICはコストがかかり過ぎて作るメリットがない」状況を作ります。
これにより、「ASICを使う意味がない(ASICを使ってもマイニングで有利にならない)」状況になり、すなわちこれはASIC耐性なわけです。
(参考)
・Ethash DAG(ethereum/wiki)
・Dagger Hashimoto(ethereum/wiki)
・Ethashとは?(ETHEREUM JAPAN)
・暗号通貨 ハッシュ関数を学ぶ その1 SHA Ethash(草コイン、おかわりください)
・ASIC耐性とは(とってもやさしいビットコイン)
まとめ
今回は、過去の記事でよくわからなかった「アカウント」と「DAG」について調べてみました。
ざくっというと、アカウントはユーザーと結びついてトランザクションを生成できる「EOA」と、ユーザーとは結び付かずトランザクションを生成できない「コントラクト・アカウント」という2種類がありました。
「コントラクト・アカウント」はコントラクト・コードを実行するために必要なもののようです。
DAGは、これ自身は数学のグラフ理論で出てくる概念で、Ethereum(やブロックチェーン)の文脈では「この概念を応用した取引の仕組みが実装されている」というおはなしでした。
では何のためにかというと、「ASIC耐性」という、ブロックチェーンの(マイニングで)中央集権化を防ぐための性質を、そのブロックチェーンに持たせるためでした。
ASIC耐性の要不要については賛否両論あるようです。
とまぁ、現段階ではこのへんの理解にとどめて先へ進んでみようかと思います。
ではでは。