Ethereumの環境構築（ethereum1）



###Inside Mac

Mac上でvagrantにguestを追加

```:bash
vagrant box add "ubuntu-16_0_4" https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box
```

```:bash
mkdir ethereum_workspace
```

```:bash
cd ethereum_workspace
```

```:bash
vagrant init
```

```:bash
vi Vagrantfile
```

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.define "host" do |node|
    node.vm.box = "ubuntu-16_0_4"
    node.vm.hostname = "ethereum1"
    node.vm.network :private_network, ip: "192.168.43.61"
  end

  config.vm.provider "virtualbox" do |vm|
    vm.customize ["modifyvm", :id, "--memory", "2048"]
  end
end
```

```:bash
vagrant up
```

```:bash
vagrant ssh
```

###inside Ubuntu

```:bash
sudo apt-get update
```

```:bash
sudo apt-get install -y build-essential libgmp3-dev golang git tree
```

```:bash
cd
```

```:bash
git clone https://github.com/ethereum/go-ethereum.git
```

```:bash
cd go-ethereum/
```

```:bash
git checkout refs/tags/v1.5.5
```

build

```:bash
make geth
```

check geth version

```:bash
./build/bin/geth version
```

```:shell-session
Geth
Version: 1.5.5-stable
Git Commit: ff07d54843ea7ed9997c420d216b4c007f9c80c3
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.6.2
OS: linux
GOPATH=
GOROOT=/usr/lib/go-1.6
```

```:bash
sudo cp build/bin/geth /usr/local/bin/
```

confirm user

```:bash
id
```

```:shell-session
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),110(lxd)
```

```bash
mkdir ~/data_testnet
```

```bash
cd ~/data_testnet
```

```bash
pwd
```

```:shell-session
/home/ubuntu/data_testnet
```

```bash
vi genesis.json
```


```vi:genesis.json
{
  "nonce": "0x0000000000000042",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x0",
  "gasLimit": "0x8000000",
  "difficulty": "0x4000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}
```

Gethを初期化

```bash
geth --datadir ~/data_testnet init ~/data_testnet/genesis.json
```

```:shell-session
I1219 08:17:08.410343 cmd/utils/flags.go:615] WARNING: No etherbase set and no accounts found as default
I1219 08:17:08.410851 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/ubuntu/data_testnet/geth/chaindata
I1219 08:17:08.418139 ethdb/database.go:176] closed db:/home/ubuntu/data_testnet/geth/chaindata
I1219 08:17:08.418272 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/ubuntu/data_testnet/geth/chaindata
I1219 08:17:08.423806 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set: 3b3326d56983eec74bcd3c5757801dcd42e0bf2f169fc0c5d695e28e20f217d7
```

check current status

```bash
tree
```

```shell-session
.
├── genesis.json
├── geth
│   └── chaindata
│       ├── 000002.log
│       ├── CURRENT
│       ├── LOCK
│       ├── LOG
│       └── MANIFEST-000003
└── keystore
```

start geth

```bash
geth --networkid 4649 --nodiscover --maxpeers 0 --datadir /home/ubuntu/data_testnet console 2>> /home/ubuntu/data_testnet/geth.log
```


```shell-session
Welcome to the Geth JavaScript console!

instance: Geth/v1.5.5-stable-ff07d548/linux/go1.6.2
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
```

explanation of option


|サービスレベル|サービス名|
|:-----------|:------------|
|--networkid 4649|ネットワーク識別子(整数)。0 ~ 3 は予約済みです (0=Olympic (disused), 1=Frontier, 2=Morden (disused), 3=Ropsten) (default: 1)。それ以外の数値であれば問題ありません。今回は 4649 を指定 しました。|
|--nodiscover|あなたのノードを、他のノードから検出できないようにするオプションです。ノード追加は手動にな ります。指定しないと、同じ GenesisファイルとネットワークIDのブロックチェーンネットワークにあなたのノードが接続してしまう可能性があります。|
|--maxpeers 0|あなたのノードに接続できるノード数です。0 を指定すると、他のノードとは接続しなくなります。|
|--datadir /home/ubuntu/data_testnet|データディレクトリを指定します。指定しないと、デフォルトのディレクトリが使用されます。|
|console|対話型のJavaScriptコンソールを起動します。|
|2>> /home/ubuntu/data_testnet/geth.log|ログファイルを作成するため、エラー出力をリダイレクトします。これは Geth のオプションではあ りません。|