【イーサリアム】クライアントソフト geth を使ってみた。
イーサリアムのクライアントソフト geth をインストールして使ってみました。
クライアントソフトを入れることによって、Ethereum ネットワークに参加することができます。
OS は Linux にしました(Windows はインストールが少し面倒だと書いてあったので)。
Windows10 に Linux(Ubuntu)を入れる方法については以前にまとめました。
【WSL】Windows10 に Linux(Ubuntu) を入れてみた。
Contents
geth のインストール
まずは、geth をインストールします。
1 |
$ sudo add-apt-repository -y ppa:ethereum/ethereum |
1 2 3 4 5 6 7 8 |
gpg: keyring `/tmp/tmpg1sqjhgo/secring.gpg' created gpg: keyring `/tmp/tmpg1sqjhgo/pubring.gpg' created gpg: requesting key 923F6CA9 from hkp server keyserver.ubuntu.com gpg: /tmp/tmpg1sqjhgo/trustdb.gpg: trustdb created gpg: key 923F6CA9: public key "Launchpad PPA for Ethereum" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK |
1 |
$ sudo apt-get update |
1 2 3 4 5 6 7 8 |
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB] Get:3 http://ppa.launchpad.net/ethereum/ethereum/ubuntu xenial InRelease [17.5 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] Hit:5 http://ppa.launchpad.net/orangain/opencv/ubuntu xenial InRelease … Fetched 5,086 kB in 3min 26s (24.6 kB/s) Reading package lists... Done |
1 |
$ sudo apt-get install ethereum |
Genesis ブロックの作成
ローカル環境に1番最初のブロックの Genesis を作成します。
以下のような genesis.json ファイルを用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "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" } |
以下のコマンドで初期化を行います。
1 |
$ geth --datadir /home/eth_private_net init genesis.json |
以下のようなエラーが出てしまいました。
Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0
英語のサイトで調べ、genesis.json ファイルを以下のように修正しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
{ "config": { "chainId": 10, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5e4a53b2", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x47b760", "difficulty": "0x80000", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { "0000000000000000000000000000000000000088": { "balance": "0x200000000000000000000000000000000000000000000000000000000000000" } }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } |
無事に「Successfully…」と表示され、初期化できました。
INFO [07-17|11:11:21.323] Successfully wrote genesis state database=lightchaindata hash=”743236…b31e94″
geth の起動
1 |
$ geth --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --networkid "10" --nodiscover --datadir "/home/eth_private_net" console |
Warning や ERROR がちょくちょくでましたが、「Welcome to the Geth JavaScript console!」と表示され、geth の対話型コンソールが起動できました。
アカウントの作成
EOA(Externally Owned Account) を作成します。引数にパスワードを指定します。
今回はプライベート環境を使っているので簡易なパスワードに設定しますが、本番環境では複雑なパスワードを設定しましょう。
1 |
> personal.newAccount("password") |
「0x」から始まるアドレスが表示されます。
INFO [07-17|11:30:00.052] Your new key was generated address=0x7534af2C274F7DbC00b2f254cbfaf7BB0C0bBE9A
後ほど、ether の送金を行うので、アカウントを複数作っておきます。
アカウントの確認
複数作成したアカウントの確認を行います。
1 |
> eth.accounts |
アドレスが配列で表示されます。
1 |
["0x7534af2c274f7dbc00b2f254cbfaf7bb0c0bbe9a", "0x3d821f20e2c30fcaabad29241a69560ccacec678", "0x04e58d153ae8b62f8255fdfdc71ab0e86b78fe22", "0x27de546aeeb606cf1bd375d81b7d8b4e6d306a0a"] |
マイニング
マイニングを実行してみます。
ここで coinbase というものを設定します。coinbase は、マイニングの報酬などに紐づいたアカウントのことで、デフォルトでは配列の最初のアドレス(accounts[0])が設定されています。
「eth.coinbase」コマンドで確認できます。
1 2 |
> eth.coinbase "0x7534af2c274f7dbc00b2f254cbfaf7bb0c0bbe9a" |
「miner.start(スレッド数)」コマンドで、マイニングが始まります。引数でスレッド数を指定することもできます。
1 2 3 4 |
> miner.start() INFO [09-16|10:28:23.710] Updated mining threads threads=4 INFO [09-16|10:28:23.712] Transaction pool price threshold updated price=1000000000 null |
「null」もしくは「true」と出力されていれば問題ありません。
放っておくとずっとマイニングしているので、適当なところで「miner.stop()」として停止させましょう。
残高の確認
coinbase について、マイニングした報酬を確認します。
1 2 |
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether") 1128 |
送金
coinbase(accounts[0])から accounts[2] に送金をしてみます。
このとき、送金する側(accounts[0])のロックを解除しないとエラーが出てしまうようです。
1 2 3 |
> personal.unlockAccount(eth.accounts[0]) Unlock account 0x7534af2c274f7dbc00b2f254cbfaf7bb0c0bbe9a Passphrase:(パスワード入力) |
エラーが出ます。
GoError: Error: account unlock with HTTP access is forbidden at web3.js:6347:37(47)
at native
at <eval>:1:24(6)
エラーが出たので geth の起動オプションを変更してみました。
まず、「password.txt」というファイルを「eth_private_nex」ディレクトリ直下に作成し、4つのアカウントのパスワードを指定します。
password
password
password
password
そして、以下のように geth の起動オプションでアカウントと password.txt ファイルを指定します。
1 |
$ geth --networkid "10" --nodiscover --datadir "/home/eth_private_net" --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --networkid "10" --nodiscover --datadir "/home/eth_private_net" --unlock 0x7534af2c274f7dbc00b2f254cbfaf7bb0c0bbe9a,0x3d821f20e2c30fcaabad29241a69560ccacec678,0x04e58d153ae8b62f8255fdfdc71ab0e86b78fe22,0x27de546aeeb606cf1bd375d81b7d8b4e6d306a0a --password "/home/eth_private_net/password.txt" console |
しかし、以下のようなエラーが出てしまいました。
Fatal: Account unlock with HTTP access is forbidden!
ちょっとこれ以上はよく分からなかったので送金は断念しました。。
参考書籍
関連記事
-
【ビットコイン】 アドレス生成方法について調べてみた。
仮想通貨の1つであるビットコインを送金するときは、送付側と受け手側のそれぞれのアドレスが必要
-
初心者でも分かるビットコインの仕組みについてまとめてみた。
ビットコインは,時価総額が1位で最も有名な仮想通貨です. 仮想通貨の時価総額の見方について
-
【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】
ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital s
-
【Solidity】 イーサリアムでコントラクトを生成してみた。
スマートコントラクトプログラミングの高級言語の1つである Solidity を使って、イーサ
-
【ビットコイン】1ブロックに含まれる情報について調べてみた【マークル木】
ビットコインなどの仮想通貨では、トランザクション(取引)の束を「ブロック」という単位で扱い、
-
【イーサリアム】 チューリング完全性について調べてみた。
仮想通貨の1つであるイーサリアムについて調べていると、チューリング完全性(Turing co
-
【仮想通貨】時価総額のランキングを円(JPY)で見る方法。
ビットコインやイーサリアムなどの仮想通貨の時価総額のランキングを 円(JPY)で見れる分かり
-
【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】
ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザク
-
【イーサリアム】 ハッシュ関数(Keccak-256)について調べてみた。
仮想通貨の1つであるイーサリアムで用いられているハッシュ関数「Keccak-256」について
-
【仮想通貨】デジタル署名と公開鍵暗号の違いは!?
ビットコインなどの仮想通貨のブロックチェーン技術で用いられている「デジタル署名」「公開鍵暗号