Ethereum

Ethereumとは

GitHubリポジトリ: https://github.com/ethereum

目的

ブロックチェーン上でアプリを動かして, スマートコントラクトを実行できるようにし, 経済をさらに発展させる.
アプリの特徴: 分散型, 管理者不在, 一度デプロイすると修正不可

特徴

  • 分散型アプリケーション(スマートコントラクト)のプラットフォーム
  • 各ノードにバーチャルマシーン(通称: EVM)を積んでいるのでチューリング完全なスクリプトがEthereum上で書ける.
  • アカウントベース
  • ブロックチェーン2.0の代表格

スケーリング方法

スマートコントラクトとは

  • 何人かが合意した内容(契約)を、ヒトがいなくても自動的に実行する仕組み
    • 例は自動販売機

Ethereum dapps開発七つ道具

  1. Solidity
  2. MetaMask
  3. Truffle, Ganache
  4. web3.js
  5. OpenZepplien
  6. Remix
  7. Google翻訳

と, 上記の内容を広く浅く説明してくれてるサイト

gethの使い方

gethとはGoで実装された完全なethereumノードを実行するためのコマンドラインインターフェースのこと.

# gethのインストール
# for Mac
brew tap ethereum/ethereum
brew install ethereum
# ジェネシスブロックの生成の様式を作成
cd
mkdir ethereum
cd ethereum
mkdir privnet
cd privnet
touch genesis.json
# 以下をgenesis.jsonの中に書き込む
{
  "config": { "chainId": 4649 },
  "nonce": "0x0000000000000042",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "",
  "gasLimit": "0x8000000",
  "difficulty": "0x4000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}
# ジェネシスブロックを生成
geth --datadir ~/ethereum/privnet init ~/ethereum/privnet/genesis.json
# ログを書き込むファイルを作成
cd
cd ethereum/privnet
touch geth.log
# gethの起動の仕方
geth --networkid 4649 --nodiscover --datadir ~/ethereum/privnet --rpc --rpccorsdomain "*" console 2>> ~/ethereum/privnet/geth.log

で, gethを起動しつつ, --rpc--rpccorsdomainで, localhostに繋ぐ許可を出しつつ, consoleで対話型にしつつ, >> geth.logでlogをgeth.logファイルに出力している.

そして, 別ターミナルを開いて,

# logの見方
tail -f geth.log

で, そのターミナルでlogを表示する.

# アカウント作成する
personal.newAccount("passwd")
# アカウントを確認する
eth.accounts
# マイニングするノードを確認
eth.coinbase
# etherの採掘スタート
miner.start()
# etherの採掘ストップ
miner.stop()
# ブロック高確認
eth.blockNumber
# ブロックしてるか確認
eth.mining
# ハッシュレート確認
eth.hashrate
# ブロック内容確認
eth.getBlock(0)
# 残高確認
eth.getBalance(eth.accounts[0])
# ロック解除
personal.unlockAccount(eth.accounts[0])
# 送金
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(3, "ether")})
# solidityコードをコンパイル
solc --bin --abi hello_world.sol
# --bin でバイトコード生成.
# --abi でabi(コントラクトとトランザクションで通信する際に必要な情報を全て格納したもの)を生成.

Remixの使い方

Remixとはブラウザ上で動作するSolidityの統合開発環境(IDE)のこと.

truffleの使い方

  • truffleで使うsolidityのバージョンを変えるにはtruffle-config.jsの中のcompilerssolcversionを変更すれば良い.

Batch Over Flow を体験してみる

Ethereumのハッキングの練習

オンラインでsolidityを学ぶ