この記事では、macOS High Sierra 10.13.6を使っています。
Ethereumの環境構築をして、プライベートネットで動かす方法についてまとめてみます。
今回はクライアントとして、gethの1.8.20-stableを利用してます。
1. macにgethをインストール
brew tap ethereum/ethereum
brew install ethereum
// バージョン確認
geth version
Geth
Version: 1.8.20-stable
〜省略〜
2. データ用のディレクトリを作成する
mkdir /path/to/home/eth_private_net
3. genesis.json(初期ブロック)を作成
cd /path/to/home/eth_private_net
vim genesis.json
genesis.json
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x00",
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x1312d00"
}
4. 初期化処理を実行
geth --datadir /path/to/home/eth_private_net init /path/to/home/eth_private_net/genesis.json
5. geth起動
geth --networkid "10" --nodiscover --datadir "/path/to/home/eth_private_net" --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --targetgaslimit "20000000" console 2>> /path/to/home/eth_private_net/geth_err.log
// 下記が出力されたらOK
Welcome to the Geth JavaScript console!
instance: Geth/v1.8.20-stable/darwin-amd64/go1.11.2
modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
>
6. コマンド実行
アカウント作成
> personal.newAccount("test")
"0x1c5dcf3fb4614a82adcf09bc194365a127ff272a"
アカウントリスト確認
> eth.accounts
["0x1c5dcf3fb4614a82adcf09bc194365a127ff272a"]
index指定でアカウント確認
> eth.accounts[0]
"0x1c5dcf3fb4614a82adcf09bc194365a127ff272a"
coinbaseアカウント(mining報酬を受取るアカウント)の確認
> eth.coinbase
"0x1c5dcf3fb4614a82adcf09bc194365a127ff272a"
genesisブロックの確認
> eth.getBlock(0)
{
difficulty: 0,
extraData: "0x00",
gasLimit: 20000000,
gasUsed: 0,
hash: "0x76d747ec34337ec5677b1aba554769485e160663eee3c63486400bddc21a5e65",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0x0000000000000000000000000000000000000000",
mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
nonce: "0x0000000000000042",
number: 0,
parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 505,
stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
timestamp: 0,
totalDifficulty: 0,
transactions: [],
transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
uncles: []
}
マイニング開始
> miner.start(2)
null
マイニングステータス確認
> eth.mining
true
アカウント残高確認
> eth.getBalance(eth.accounts[0])
0
// 少し待つ
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
80
送金テスト用にアカウントを作成
> personal.newAccount("test")
0x581206828d6faf24fc8b842d0d3544da5c180210
送金
// 送金元のアカウントロックを解除
> personal.unlockAccount(eth.accounts[0])
Unlock account 0x1c5dcf3fb4614a82adcf09bc194365a127ff272a
Passphrase: // personal.newAccountで作成した際のパスワードを指定。この例では、「test」
true
// 送金
> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether")})
"0x906ccd91621ac73f6221a2a8ffe825c18199ca6708d4ee5fa5f73b4c9c9ca779" //txid
// 少し待つとアカウント残高が反映される
> web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
5
トランザクション確認
> eth.getTransactionReceipt("0x906ccd91621ac73f6221a2a8ffe825c18199ca6708d4ee5fa5f73b4c9c9ca779")
{
blockHash: "0x86279ca24cd8b163ebdf22cf7ae656389278c0dcd133bc99c0ffe4558b7e9cc2",
blockNumber: 55,
contractAddress: null,
cumulativeGasUsed: 21000,
from: "0x1c5dcf3fb4614a82adcf09bc194365a127ff272a",
gasUsed: 21000,
logs: [],
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
root: "0x810497dd7957105d8262f21a71af0d84e30d72bd6c267946d44b7519242e34a9",
to: "0x581206828d6faf24fc8b842d0d3544da5c180210",
transactionHash: "0x906ccd91621ac73f6221a2a8ffe825c18199ca6708d4ee5fa5f73b4c9c9ca779",
transactionIndex: 0
}
マイニング停止
> miner.stop()