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との連携をやっていきましょう。
この記事が気に入ったらサポートをしてみませんか?