Ethereum
https://gyazo.com/92dd355346006aa9f7898f8fa54df737
Ethereumとは
分散型アプリケーション(スマートコントラクト)のプラットフォーム
ブロックチェーン上にアプリケーションを載せることで、通貨以外でも管理者のいないサービスを作れるようにした。
各ノードにバーチャルマシーン(通称: EVM)を積んでいるのでチューリング完全なスクリプトがEthereum上で書ける.
スケーラビリティ問題への取り組み
サイドチェーン
Plasma: Ethereumのメインチェーンとは別のプラズマチェーンと呼ばれるサイドチェーンをツリー状に作ることで, メインチェーンに格納される情報量を減少させる取り組み.
オフチェーン
Raiden Network: ETHおよびERC20トークンをブロックチェーンの外側で処理することで, メインチェーンの負担を軽減する仕組み. 最終的な取引結果のみをブロックチェーンで処理する.
分割処理
Sharding: トランザクション処理を各ノードで分割して行うことで, 処理速度の向上を図る取り組み. Ethereum2.0のCasperで導入されるPoSというコンセンサスアルゴリズムと相性が良い.
スマートコントラクトとは
何人かが合意した内容(契約)を、ヒトがいなくても自動的に実行する仕組み
例は自動販売機
Ethereum dapps開発七つ道具
と, 上記の内容を広く浅く説明してくれてるサイト
gethとはGoで実装された完全なethereumノードを実行するためのコマンドラインインターフェースのこと.
code:gethのインストール
// for Mac
brew tap ethereum/ethereum
brew install ethereum
code:ジェネシスブロックの生成の様式を作成
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": {}
}
code:ジェネシスブロックを生成
geth --datadir ~/ethereum/privnet init ~/ethereum/privnet/genesis.json
code:ログを書き込むファイルを作成
cd
cd ethereum/privnet
touch geth.log
code: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ファイルに出力している.
そして, 別ターミナルを開いて,
code: logの見方
tail -f geth.log
で, そのターミナルでlogを表示する.
code:アカウント作成する
personal.newAccount("passwd")
code:アカウントを確認する
eth.accounts
code:マイニングするノードを確認
eth.coinbase
code:etherの採掘スタート
miner.start()
code:etherの採掘ストップ
miner.stop()
code:ブロック高確認
eth.blockNumber
code:ブロックしてるか確認
eth.mining
code:ハッシュレート確認
eth.hashrate
code:ブロック内容確認
eth.getBlock(0)
code:残高確認
eth.getBalance(eth.accounts0) code:ロック解除
personal.unlockAccount(eth.accounts0) code:送金
eth.sendTransaction({from: eth.accounts0, to: eth.accounts1, value: web3.toWei(3, "ether")}) code:solidityコードをコンパイル
solc --bin --abi hello_world.sol
# --bin でバイトコード生成.
# --abi でabi(コントラクトとトランザクションで通信する際に必要な情報を全て格納したもの)を生成.
Remixの使い方
Remixとはブラウザ上で動作するSolidityの統合開発環境(IDE)のこと.
truffleの使い方
truffleで使うsolidityのバージョンを変えるにはtruffle-config.jsの中のcompilersのsolcのversionを変更すれば良い.
Batch Over Flow を体験してみる
Ethereumのハッキングの練習
オンラインでsolidityを学ぶ場所