Tech

技術者向け Ethereum(イーサリアム)の基礎知識

  • このエントリーをはてなブックマークに追加

次世代プラットフォーム 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)

などなど

メッセージとトランザクション

  • メッセージは、ビットコインのトランザクションに似ているが以下の点で違う
    1. 外部からもコントラクトからも作れる
    2. レスポンスを返す
  • トランザクション: 外部所有アカウントから送られるメッセージを保持しておく署名されたデータパッケージへの参照

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)

コントラクトを書くための言語

以下は、昔あったが今聞くことはない

  • 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は、以下2つのプロジェクトから影響を受けています。

  • Colored Coins

blockchainの上でスマートプロパティとカスタム通貨とアセットをやりとりするためのシステムを実装するための最初の試みは、Bitcoinの上に一種のオーパーレイとして作られた。
よくTCP上にあるHTTPに例えられる。

  • Metacoins

書き途中。

日本語の技術情報

Ethereumを学ぶ

インストール方法

使い方

スマートコントラクト

ツール

アルゴリズム

日本語の記事

基礎

説明

ウォレットのまとめ

翻訳・紹介

勉強会の動画

ホワイトペーパーを読む勉強会の動画
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

FAQ · ethereum/wiki Wiki

General FAQ @Reddit

coinwatcher comments on Hi, we’re the Ethereum Founding Team. Ask us anything!

技術ユーザグループ

ブロックチェーン技術を話し合う日本のユーザグループです。

日本ブロックチェーンユーザ会

ミートアップ

関連用語

イーサリアム、イサリウム、エセリウム、エサリアム、エサリウム、イーサ、ether, ethereum, smart contract, smart property, スマートプロパティ、スマートコントラクト

  • このエントリーをはてなブックマークに追加