EthereumのテストネットワークであるRopstenへgethで接続する方法を記載します。
使用OSはWindows10。gethのバージョンは1.8.8-stableです。
gethの起動
テストネットへは以下のコマンドで起動します。bootnodeへ接続し、Ropstenと同期をさせます。
geth --testnet --fast --bootnodes "enode://7df4f8fa037f82cc03ba0c1acd3fccba4ae40fc03704283979f074cadf37cc5b70845d1acee4161c3432eb6934ba3020cbaf9cc2ba841cdfb03d113ebeef5b79@172.104.5.185:30303" console 2>> ./geth.log
fastオプションで実行していますが、それでもこの記事を書いている地点で同期したブロックの容量は19.4Gとなっています。デフォルトだとブロックはCドライブへ格納されていると思いますので、SSDを使っていて容量を圧迫したくない方はシンボリックリンクを用いてHDDへ保存するようにすると良いと思います。
参考:シンボリックリンクでgethのBlockChain Directoryの場所を変更する
なお、上記のbootnodeで指定しているアドレスはRopstenのGithubに記載されているアドレスとは違いますのでご注意ください。
最初はGithubに記載されているアドレスをbootnodeとして実行していたのですが何度か失敗した為、以下のページを参考に接続先を変えて実行しました。
アドレスを変更して実行した後に同期には成功しましたが、同期に失敗した原因が接続先にあったかどうかははっきりしていませんのでご留意ください。
The NEW NEW If you need some Ropsten Testnet Ethers … from ethdev
同期状況の確認
ブロックの同期状況は「eth.syncing」のコマンドで確認することが出来ます。
> eth.syncing { currentBlock: 1279628, highestBlock: 3287992, knownStates: 1935473, pulledStates: 1915319, startingBlock: 1078810 } > eth.syncing { currentBlock: 1361854, highestBlock: 3287992, knownStates: 2062110, pulledStates: 2049039, startingBlock: 1078810 } > eth.syncing { currentBlock: 1444111, highestBlock: 3287992, knownStates: 2242183, pulledStates: 2233575, startingBlock: 1078810 }
currentBlockが同期が完了しているブロック数、highestBlockが現在のネットワーク上のブロック数となります。同期がすべて完了すると、falseが返ってきます。
> eth.syncing false
falseが返ってこれば同期は完了です。
ETHを取得する。
Ropsten上のETHを取得するにはいくつか方法があります。
1.faucetから取得
faucetという有志の方によって作られた仕組みを使用して取得することが出来ます。
まずは受け取り用のアカウントを作成。
> personal.newAccount(PassWord) "0xb9e2529bdf298785ab12364bd930173bc0dbbe4d"
※PassWordには任意の文字列
アカウントを作成したら、faucetのサイトへアクセス。
Ethereum Ropsten Faucet
「Enter your testnet account address」と記載された部分へ送金先のアドレスを入力し、「Send me 1 test ether!」をクリックすると、1回1ETH貰うことが出来ます。
また、curlを使ってリクエストを送ることでも0.5ETH受け取ることが出来ます。
PS C:\Users\kamat> curl -X POST -H "Content-Type: application/json" -d '{"toWhom":"0xb9e2529bdf298785ab12364bd930173bc0 dbbe4d"}' https://ropsten.faucet.b9lab.com/tap { "txHash" : "0x3db5218baf215623481c8f49c92f859cb0efa5dfb0de228976fee507346ae9dc" }
Ropsten上のトランザクションの状況はRopsten用のEtherscanで確認することが出来ます。
右上のボックスにアドレスを入力して「GO」を押すとそのアカウントに紐づく様々な情報を見ることが出来ます。
Blockの欄にブロックナンバーが表示されていればトランザクションが取り込まれて承認がされている状態となります。
なお、curlを使った場合はコントラクトから送金されるため、「Internal Transaction」のタブにトランザクションの情報が記載されています。
2.Miningして取得する
ライブネットと比べると採掘難易度が高くないので、Ropsten上でもMiningしてETHを取得することも可能です。
> personal.newAccount(PassWord) "0xb9e2529bdf298785ab12364bd930173bc0dbbe4d" > web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") 4 > miner.start() null > eth.mining true > web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") 7.255480445
Miningに成功すると、Etherscan上の「Mined Blocks」のタブにMiningしたブロックの情報が表示されます。
上手く同期できない場合
fastオプションで同期をすると、currentBlockがhighestBlockに近づいてもその後同期が進まなくなるという事象が発生する場合があり、私の環境でも実際に発生しました。
以下のように、highestBlockは更新されるがcurrentBlockが更新されなくなってしまいます。色々調べてみましたが、原因はよくわかりませんでした。
> eth.syncing { currentBlock: 3288074, highestBlock: 3288139, knownStates: 6395961, pulledStates: 6365096, startingBlock: 1078810 } > eth.syncing { currentBlock: 3288074, highestBlock: 3288141, knownStates: 6438405, pulledStates: 6409455, startingBlock: 1078810 } > eth.syncing { currentBlock: 3288074, highestBlock: 3288144, knownStates: 6511927, pulledStates: 6486153, startingBlock: 1078810 }
私の場合は何度か再起動して放置していたらいつの間にか同期に成功しましたが、fastオプションをやめて「–syncmode=full」を指定しなければ解消されない場合もあるようです。
上記事象に遭遇したら再起動、もしくはfullオプションでの同期を試してみてください。