次世代プラットフォーム Ethereum の技術面の基礎知識。
状況がすぐに変わるので、随時追加、変更していきます。
前提知識
- 基本的なインターネットのネットワークの知識
- 基本的なプログラミングの知識
- Bitcoin関連の技術的基礎知識
- ブロックチェイン
- Proof of Work
上記、知っていることとする。
Ethereum とは?
公式サイトでの表現は「次世代のスマートコントラクトと非中央集権型アプリケーションのプラットフォーム」
上記の説明だと、スマートコントラクトとDApp(非中央集権型アプリケーション)とは何かがわからないと思いますが、一言で言うと
Ethereumは、ブロックチェーン上でアプリケーションを配置し、実行できるプラットフォームです。
大雑把に
- ブロックチェーンの上で動くプラットフォーム(プロトコル)
- スマートコントラクトを実行基盤
- 独自Blockchainを利用
- 独自Proof of Work(Ethash) から Proof of Stake(Casper)に移行予定
- P2P上でチューリング完全なブログラムを動かせる
- 例えると、HTML上のJavaScript (Bitcoin上のEthereum)
- Ethereum Virtual Machine(EVM)上で、コードを実行
- 独自言語でコントラクト(プログラム)を書く (Solidity, Serpentなど)
- アプリは、ブラウザからJavaScriptから直接ブロックチェーンへ問い合わせて動作させる形がメジャー
大雑把に、次世代の非集権型の契約、財産をやり取りするためのプロトコル、とも言えるでしょう。
独自プログラムで、アプリが作れます。
ざっくりとしたEthereumの動き
以下に講義をした内容が書いてあります。
Ethereumは、何ではないか
- Bitcoinのような暗号通貨ではない
- ビルトイン通貨は、Ether (プログラムを動かす燃料として使われる)
基礎用語
- Ether: Ethereumのビルトイン通貨。手数料を払うために使われる
- message: メッセージ。ビットコインのトランザクションに似ているがもの。コントラクトを動かしたりする
- transaction: etherの送信等に使われる
- smart property: スマートプロパティ。資産管理に利用される。
- smart contracts: スマートコントラクトとは何か? Smart Contractの定義 | block-chain.jp
- GAS: 燃料(fuel)。プログラムを実行するのに必要な燃料となるether
- STARTGAS: 燃料の上限。
- GASPRICE: 計算ステップ当たりにマイナーに払う手数料
- EVM(Ethereum Virtual Machine): プログラムを動かすためのVirtual Machine
- Mist: Ethereumのブラウザ (Web3.0)
- Ethereum Wallet: 公式ウォレット
- DApp: Decentralized Applicationの略。非中央集権的アプリ。
- Mix -> ReMix: DAppのIDE Mix: The DApp IDE · ethereum/wiki Wiki
- Whisper: メッセージ用プロトコル
- Swarm: データ・ストレージ用 (IPFSと同じようなもの)
Ethereumの2つのアカウント
以下の2つがある
- 外部所有アカウント: EOA (Externally-owned Account)
- 簡単に言うと、人が使うアカウント
- 外部所有アカウント (ビットコインでいう普通のアカウント)
- 人かDAppによってコントロールされる
- EOAのみが、トランザクションを初期化できる
- このEOアカウントの秘密鍵で署名されたトランザクションが引き金となる
- 簡単に言うと人が管理するアカウント
- コントラクトアカウント(Contract Account)
- コントラクト・アカウント
- 簡単に言うと、デプロイしたコントラクトのアカウント(アドレス)
- ブロックチェーン上に存在する
- トランザクションを受け付けることができる
- メッセージを自分自身か、他のコントラクトに送ることができる
- メッセージを送るとプログラムを実行する
Ethereumクライアント
- geth (Go言語)
- parity (Rust)
- eth (C++)
- pyethapp (Python)
- EthereumJ (Java)
などなど
メッセージとトランザクション
- メッセージは、ビットコインのトランザクションに似ているが以下の点で違う
- 外部からもコントラクトからも作れる
- レスポンスを返す
- トランザクション: 外部所有アカウントから送られるメッセージを保持しておく署名されたデータパッケージへの参照
BitcoinのScriptingに追加してできるようになったこと
- チューリング完全性
- Value-awarenss
- blockchain-awareness
- 状態
できること
自律的な組織がブロックチェーン上で作成することができる
- DAOs (decentralized autonomous organizations)
- DAC (decentralized autonomous corporation)
プロトコル
- GHOST (Greedy Heavist Observed Subtree) protocol
- Block Protocol 2.0 (BP2)
コントラクトを書くための言語
- Solidity: JavaScriptに似ている言語。現時点で、一番メジャーな言語。
- Serpent: Pythonのような言語
- LLL : Lispのような言語
- Mutan: Cのような言語 obscuren/mutan
以下は、昔あったが今聞くことはない
- CLL, ECLL (Ethereum C-Like Language)
- AST(Abstract Syntax Tree)
- EHLL (Ethereum High Level Language)
使えるデータ保存場所
- Stack: プログラム用のスタック
- Memory: 所謂プログラム実行用のメモリ
- Storage: データを保存するためのストレージ
詳しくは以下へ
EVM(Ethereum Virtual Machine)が保存できる3つのデータ領域 | block-chain.jp
仕様
- RLP
- Patricia Tree
- Wire Protocol
- block’s ancestor (in Ethereum jargon, “uncles”)
Ethash (Proof of Work)
- Dagger + Hashimotoの最新バージョン
- EthashのPoWは、メモリーハードで、基本的にASIC resistant
Ethash DAG
ASIC耐性のために必要
- DAG: 数ギガバイトのデータセット
- DAGを生成するのは、長い時間がかかる
- DAG は、30,000ブロック毎に全く違うものになる。
- この30,000ブロック(100時間)は、epochと言われる
Ethash DAG · ethereum/wiki Wiki
RLP (Recursive Linear Prefix)
大雑把な説明: データをエンコードする方法のこと
- RLPの目的
- 任意にネストしたバイナリーデータの配列をエンコードすること
- Ethereum でオブジェクトをシリアライズために使われるメインのエンコーディング方法
パトリシア・ツリー(Patricia Tree)
- ブロックチェーンの状態を保存、ハッシュ化するために使われる構造
Wire Protocol
EthereumノードのP2P通信のためのプロトコル
- Ethereumのノードは、TCPのみで接続する
- ポート番号: 30303
- 仕様は公式Wikiで
関連する他のプロジェクト
Ethereumは、以下2つのプロジェクトから影響を受けています。
- Colored Coins
blockchainの上でスマートプロパティとカスタム通貨とアセットをやりとりするためのシステムを実装するための最初の試みは、Bitcoinの上に一種のオーパーレイとして作られた。
よくTCP上にあるHTTPに例えられる。
- Metacoins
書き途中。
日本語の技術情報
Ethereumを学ぶ
インストール方法
- Ethereum のセットアップ、インストール方法 | block-chain.jp
- Ethereum Dapp フレームワーク Embark のインストールと使い方 | block-chain.jp
使い方
- Ethereum のアカウントの管理、アドレスを作る方法 | block-chain.jp
- Ethereum – ガスと取引コスト: Gas Limit と Gas Price とは? | block-chain.jp
- Ethereum のネットワーク状態を調べる方法 | block-chain.jp
- Ethereum で etherを送る方法 | block-chain.jp
スマートコントラクト
- Ethereum Solidity で 初めてのDappを作る | block-chain.jp
- Ethereum Solidity 情報まとめ | block-chain.jp
- Ethereumの言語 Solidityの仕様 | block-chain.jp
- Ethereum の Smart Contracts やアプリの作り方 | block-chain.jp
ツール
アルゴリズム
日本語の記事
基礎
説明
- イーサリアムの衝撃-ビットコイン技術がもたらす社会基盤へのイノベーション : アゴラ – ライブドアブログ
- 大きな可能性を秘める「リップル」と「イーサリアム」――ビットコインに続くもの|通貨革命か、それとも虚構か?「ビットコイン」を正しく理解する 野口悠紀雄|ダイヤモンド・オンライン
ウォレットのまとめ
翻訳・紹介
- ホワイトペーパーの日本語訳: kurihei/Ethereum-WhitePaper-JP
-
[Ethereum] [入門編] 「暗号通貨 2.0」話題のEthereumの紹介ページを訳してみた » bitlywatch.com
勉強会の動画
ホワイトペーパーを読む勉強会の動画
Ethereum勉強会 – YouTube
ブログ・感想・意見
White Paper
[English] White Paper · ethereum/wiki Wiki
Official Sites
- Main site: http://www.ethereum.org
- Forum: http://forum.ethereum.org
- Code: https://code.ethereum.org
- Blog: http://blog.ethereum.org
- Wiki: http://wiki.ethereum.org
- Whitepaper: http://ethereum.org/ethereum.html
- Facebook: https://www.facebook.com/ethereumproject
- Youtube: http://www.youtube.com/ethereumproject
- Vimeo: https://vimeo.com/ethereumproject
- Google+: http://plus.google.com/+EthereumOrgOfficial
-
日本語チュートリアル: [Japanese] Ethereum Development Tutorial · ethereum/wiki Wiki
-
ネットワークステータス: Ethereum Network Status
-
ビルドのステータス BuildBot: Ethereum
コース
Ethereum 101 | B9Lab Academy
https://academy.b9lab.com/courses/B9lab/X16-0/2016/about
FAQ
wiki
General FAQ @Reddit
coinwatcher comments on Hi, we’re the Ethereum Founding Team. Ask us anything!
技術ユーザグループ
ブロックチェーン技術を話し合う日本のユーザグループです。
ミートアップ
関連用語
イーサリアム、イサリウム、エセリウム、エサリアム、エサリウム、イーサ、ether, ethereum, smart contract, smart property, スマートプロパティ、スマートコントラクト