見出し画像

Ethereum環境をUbuntu16.04で作ろう

前提

この記事を実践するには下記でリンクでさくらサーバーをレンタルしてUbuntu16.04 をOSインストールしている必要があります。

環境作成

ますは諸々便利なものをいれていきます

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install git vim -y

gethをインストールします。geth は Go言語で実装された Ethereumクライアントです。アカウントの作成からマイニングまで、Ethereum に関わる多くの機能を担います。まあこれをいれればEthereumでいろいろできるようになるよくらいの認識で大丈夫です!

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum

//反応があればOK
$ geth --help
NAME:
   geth - the go-ethereum command line interface

   Copyright 2013-2018 The go-ethereum Authors
(省略)

次にブロックチェーンの始まり、つまり1番最初のブロックは「genesisブロック」を作成しましょう。「genesisブロック」がないと何も始まりません。

//ディレクトリを作成
$ mkdir /home/ubuntu/eth_private_net
$ cd eth_private_net

//genesisブロックを作成
$ touch myGenesis.json

//中身を書き込んでいきます。
$ vim myGenesis.json
//myGenesis.jsonに以下をコピペしてください
{
  "config": {
    "chainId": 15
  },
  "nonce": "0x0000000000000042",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "",
  "gasLimit": "0x8000000",
  "difficulty": "0x4000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}

これで準備完了!データ・ディレクトリとgenesisファイルを作成できたので、以下のコマンドを実行しブロックチェーン情報をgenesisファイルの内容で初期化します。

//blockの初期化
$ geth --datadir /home/ubuntu/eth_private_net init /home/ubuntu/eth_private_net/myGenesis.json
INFO [05-13|13:05:03] Maximum peer count                       ETH=25 LES=0 total=25
INFO [05-13|13:05:03] Allocated cache and file handles         database=/home/ubuntu/eth_private_net/geth/chaindata cache=16 handles=16
INFO [05-13|13:05:03] Persisted trie from memory database      nodes=0 size=0.00B time=5.58µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [05-13|13:05:03] Successfully wrote genesis state         database=chaindata                                   hash=7b2e8b…7e0432
INFO [05-13|13:05:03] Allocated cache and file handles         database=/home/ubuntu/eth_private_net/geth/lightchaindata cache=16 handles=16
INFO [05-13|13:05:03] Persisted trie from memory database      nodes=0 size=0.00B time=3.116µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [05-13|13:05:03] Successfully wrote genesis state         database=lightchaindata                                   hash=7b2e8b…7e0432

次にgethを起動します。

$ geth --networkid "15" --nodiscover --datadir "/home/ubuntu/eth_private_net" console 2>> /home/ubuntu/eth_private_net/geth_err.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.7-stable-66432f38/linux-amd64/go1.10
coinbase: 0x9e14489b93a30f0acd621d048828093891cca012
at block: 170 (Sun, 13 May 2018 12:57:30 JST)
 datadir: /home/ubuntu/eth_private_net
 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

> 

これでEthereumの環境作成は完了です!これだけできるなんて簡単ですよね。gethを起動してコンソールに入れたので次は動かしてみましょう!
※コンソールというのは「>」←こいつです。

実際に動かしてみよう!

まずはBlockの確認をしましょう!最初のBlockを見てみましょう!

> eth.getBlock(0)
{
  difficulty: 16384,
  extraData: "0x",
  gasLimit: 134217728,
  gasUsed: 0,
  hash: "0x7b2e8be699df0d329cc74a99271ff7720e2875cd2c4dd0b419ec60d1fe7e0432",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x3333333333333333333333333333333333333333",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 507,
  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  timestamp: 0,
  totalDifficulty: 16384,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

次はAccountの作成ですね!Accountがなければ送金もマイニングもできません。

//accountの確認
> eth.accounts
[ ]

//accountの作成
> personal.newAccount("hogehoge01")
"0x9e14489b93a30f0acd621d048828093891cca012"
> personal.newAccount("hogehoge02")
"0x05786fbbfe1a10fdbb2ba09a7d694f6821a6ad59"

//2つできていることがわかります
> eth.accounts
["0x9e14489b93a30f0acd621d048828093891cca012", "0x05786fbbfe1a10fdbb2ba09a7d694f6821a6ad59"]

次はマイニングをしていきましょう!

//minningしてくれるaccountを確認
> eth.coinbase
"0x9e14489b93a30f0acd621d048828093891cca012"

//mining開始 nullになるのは正しいです
> miner.start(1)
null

//mining停止
> miner.stop()
true

//mining状況を確認
> eth.blockNumber
3

基本的な動作確認はできましたね。
これだけで自身の環境にEthereumが作れてしまいました。
次の記事ではSmartContractとの連携をやっていきましょう。

この記事が気に入ったらサポートをしてみませんか?