Ethereum技術入門書「Ethereum入門」を元に環境構築〜ether送金までの手順をOSX/Ubuntu環境で手順確認してみました。
##0. 前提条件
以下の環境で環境構築を実施しています。
- mscOS HighSiera(10.13.5) / Ubuntu 16.04 LTS
##1. Ubuntu環境を構築
- OSXにOracle VM VirtualBoxを導入。
- Ubuntu 16.04 LTSをダウンロード。
- VirtualBoxにUbuntu 16.04 LTSを導入。(詳細手順は省略)
- 環境構築時に、再起動後「intel_rapl: no valid rapl domains found in package 0」とよく出るが、その際はVirtualBox上でVMをリセットで対処。
##2. 事前準備(1)
- カーネルの更新
sudo apt-get dist-upgrade
- そして、いつものおまじない。
sudo apt-get update
とsudo apt-get upgrade
。
##3. 事前準備(2)
Vimなのにと言われそうですが、、手抜きをするため、Vimでコピペが出来るように事前準備。
- VirtualBox上で、「デバイス>Guest Additions CDイメージの挿入」を実施。
- VirtualBox上で、「デバイス>クリップボードの共有>双方向」を有効に。
- Terminal上で、
sudo reboot
で再起動。 - クリップボードを使いたいので、
sudo apt-get install vim-gnome
でvim-gnomeをインストール。
##4. Gethをインストール
- Gethインストール
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
- gethのインストール確認
geth --help
→オプションが表示されていればOK。
- gethのアップデート
sudo apt-get update
sudo apt-get upgrade
→自分が実施した時はアップデートはなし。
##5. Genesisファイルの作成
- 格納ディレクトリの作成
mkdir /home/[ユーザ名]/eth_private_net
→手順書上は、ubuntuになっているが、ユーザ名で作成する。以下、[ユーザ名]は同様。
- myGenesisファイルの作成
vim myGenesis.json
→以下の内容をコピペして、Vimを使ってgenesisファイルを作成する。
{
"config": {
"chainId": 15
},
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit": "0x8000000",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
##6. Gethをプライベート・ネットで起動
- genesisブロックの初期化
geth --datadir /home/[ユーザ名]/eth_private_net init /home/[ユーザ名]/eth_private_net/myGenesis.json
→上記コマンドで、myGenesis.jsonの内容で初期化。
- Gethの起動
geth --networkid "15" --nodiscover --datadir "/home/[ユーザ名]/eth_private_net" console 2>> /home/[ユーザ名]/eth_private_net/geth_err.log
上記コマンドでGethを起動。Geth JavaScript consoleが立ち上がるので、以降はGethプロンプトで実施する。
##7. 口座の作成
口座1から口座2へ送金を実施するため、口座を2つ作成します。
- ノードに登録された口座の事前確認
eth.accounts
→まだ口座を作成していないので、ここでは空のリストが返ってくる。
- 口座1の作成
personal.newAccount("[パスワード1]") ※パスワードは任意
→eth.accounts[0]
を実施した際に表示される口座。
- 口座2の作成
personal.newAccount("[パスワード2]") ※パスワードは任意
→eth.accounts[1]
を実施した際に表示される口座。
- 口座の確認
eth.coinbase
→上記コマンドで、プライマリー口座の確認が出来ます。デフォルトでは、eth.accounts[0]
を実行した際に表示される口座。
- etherの採掘開始
miner.start()
→上記コマンドで採掘開始します。今回の手順では、ネットワーク上で自分しかマイニングをしていないので、ether送金をする場合は、採掘をバックグラウンドで実行している必要がある。
- 採掘中かどうかの確認
eth.mining
→上記コマンドで採掘されているか分かる。採掘されていれば、trueが返る。
- 採掘状況の確認
eth.blockNumber
→上記コマンドでブロックチェーンに何番目のブロックまで連なっているのか(=ブロック高)を確認。これがなかなか採掘されない。最初の10分~30分の間、DAGの生成が行われ、その後採掘となるので、結構時間がかかる。(しばらくしてやっと10)
##8. etherの送金
- etherの残高の確認。
eth.getBalance(eth.accounts[0])
→送金を行う前にetherの残高を事前に確認するため、上記のコマンドで、1番目の口座の残高を確認。(自分の場合は500 ether貯まってました)
- 口座のロック解除
personal.unlockAccount(eth.accounts[0])
→送金するためには、事前に口座のロック解除が必要なので、上記コマンドでロック解除します。
- 送金の実行
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether")})
→口座1から口座2へ5ether
を送金します。
- 口座2の残高確認
eth.getBalance(eth.accounts[1])
→口座2の残高を確認を行い、無事送金が完了していることを確認します。これで完了!
##参考文献