gethの使い方とWindowsでのインストール方法で送金とマイニング
Ethereum(イーサリアム)の開発で使う基本的な ツールにgeth(ゲス)があります。
gethを使うとバーチャルマシンな環境でブロックチェーンの操作ができます。例えば、ETHの送金やマイニングなどです。
gethとはGO言語で書かれており、正式名はGo Ethereumと呼びます。
gethはEthereumのスマートコントラクトの開発においては入口の部分に当たる必須の知識です。初めての場合は少し難しいですが、慣れると簡単です。
この記事では、初心者の方にも分かりやすく解説します。
なお、gethの開発環境はOSによって少し異なります。使えるOSはLinux(CentOS、Ubuntuなど)やMAC、Windowsです。
ここではWindowsで、gethのインストール方法からアドレス作成、マイニング、ETH送金など一連の流れを解説します。
gethのインストール
1.最初にgethをインストールします。
Go Ethereumのサイトにアクセスします。
URL:Download Geth
2.Download Gethにある「Geth for Windows」を選択して、ダウンロードを開始します。64bit版になります。
なお、32bitや過去のバージョンはページをスクロールすると下側にあります。自分の環境に合う種類を選んでください。
3.インストーラーをクリックします。
4.ライセンス規約に関する説明画面です。「I Agree」をクリックします。
5.「Geth」にチェックが付いた状態で「Next>」をクリックします。
6.インストール先を選択します。初期設定ではProgram Filesになっています。
「Install」をクリックします。
7.「Completed」になればインストールが完了しました。「Close」をクリックします。
8.Program Fileを開くとGethフォルダがあり、中には「geth.exe」と「uniInstall」があります。
なお、コマンドプロンプトを使用して確認もできます。
以下のコードを入力して、gethが保存されている場所に移動します。
1 |
cd C:\Program Files\Geth |
フォルダ内のファイル一覧を確認します。
1 |
cd C:\Program Files\Geth |
「geth.exe」と「uniInstall」がありました。
9.Program File内のGethフォルダ内に「genesis.json」ファイルを作成します。
- genesis.jsonはブロックチェーンの最初のブロックを作成するための初期設定です。
- genesis.jsonファイルによりgethが起動して、ブロックチェーンが立ち上がります。
- genesis.jsonファイルはエディタを利用してコードを記述して作成します。
*メモ帳は使用しないでください。拡張子に.txtやBOM有りになるためです。
「TeraPad」や「サクラエディタ」などでも良いです。
以下のコードを記述してUTF-8のBOMなしで保存します。ファイル名はgenesis.jsonにします。
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x400", "alloc": {}, "coinbase": "0x3333333333333333333333333333333333333333", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x", "gasLimit": "0x8000000", "config": {} } |
10.Program File内のGethフォルダ内に「data」という名前のフォルダを作成しておきます。
ポイント
genesis.jsonの保存場所はProgram File内のGethフォルダ内以外でも可能です。
Program File内のGethフォルダに作成しても良いのですが、管理者権限のコマンドプロンプトを使用する必要が出て煩わしいので、デスクトップでもマイフォルダでも構いません。
方法としては「genesis.json」やgethで作成される各種データを保存するためのフォルダをデスクトップやマイフォルダなどに作成します。
フォルダ名は「Gethdata」にします。
*フォルダ名は他でも構いません。
また、根本的に最初のインストール先をProgram File内ではなく、「C:\Users\ユーザー名\geth」にすることをお勧めします。この記事では初心者の人に分かりやすいようにProgram File内へインストールしただけであり、通常の開発ではインストール先は「C:\Users\ユーザー名\geth」が一般的です。
gethの起動
プライベートネットワークに接続してgethを起動します。
1.管理者権限のコマンドプロンプトを起動します。
Gethフォルダに移動します。
1 |
cd C:\Program Files\Geth |
2.genesis.jsonを初期化する必要があります。
1 |
geth --datadir ./data init ./genesis.json |
Successfullyと表示されれば完了です。
3.gethを起動してプライベートネットワークに接続します。
1 |
geth --networkid 10 --datadir ./data --maxpeers 0 --nodiscover console 2>> node.log |
networkidには適当な数値を入力してください。ここでは、10にしました。
処理結果のログはnode.logに自動保存されます。
4.正しく起動しているか確認します。
1 |
eth.getBlock(0) |
genesis.json内のコードに記述した「nonce」や「mixhash」と内容が同じであれば大丈夫です。
アカウント作成
Ethereumを保存するためのアカウントアドレスを作成します。
1.ここでは2つ作成してみます。
1 |
personal.newAccount("test1") |
test1部分はパスワードを意味します。何でも構いません。
アカウントが作成できました。
続けて、もう1つ作成します。
1 |
personal.newAccount("test2") |
ちなみにパスワード部分はアカウント1と2ではtest1とtest2で変えていますが、同じにしても構いません。
2.作成したアカウントを確認しましょう。
1 |
eth.accounts |
無事2つ作成されています。
マイニング
Ethereumをマイニングします。
1.マイニング報酬を受け取るアカウントを確認します。
1 |
eth.coinbase |
アカウントは切り替えることもできます。2番目に作成したアカウントであれば、次のように記述します。
1 |
miner.setEtherbase(eth.accounts[1]) |
2.アカウントの残高を確認しておきます。
1 |
eth.getBalance(eth.accounts[0]) |
当たり前ですが、現時点では0ETHです。
eth.account[0]は1番目に作成したアカウントです。
2番目に作成したアカウントであれば、eth.account[1]です。
採掘前のブロックも確認してみます。
1 |
eth.blockNumber |
採掘前ですのでブロックも0です。
3.採掘をスタートします。
1 |
miner.start() |
nullになればマイニングが開始されます。
4.マイニングが開始されているかどうかを確認します。
1 |
eth.mining |
結果がtureであればマイニング中です。
5.採掘をストップします。
1 |
miner.stop() |
trueになればマイニングが終了します。
6.採掘したEthereumのブロックを確認しましょう。
1 |
eth.blockNumber |
ブロックが作成されています。
次にEthereumの残高を確認します。
1 |
eth.getBalance(eth.accounts[0]) |
無事にEthereumがアカウントに増えました。
当たり前ですがプライベートネットワークであるため現実世界で採掘したイーサリアムが存在する訳ではありません。
桁数が大きい理由は単位がwei(1eth=10の18乗)のためです。
ETHで表示するには次のようにコードを記述します。
1 |
web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") |
ETH表記に変わりました。
僅か5分間の採掘ですが、1ブロック当たりの報酬が5ETHのため511ブロックの生成で2555ETH採掘できたことになります。
送金
Ethereumを作成したアカウント1からアカウント2へ送金してみます。
1.送金するにはアカウントのロックを解除する必要があります。
1 |
personal.unlockAccount(eth.accounts[0],"test1") |
アカウント1からアカウント2へ10ETH送金します。
1 |
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(10, "ether")}) |
2.送金を完了するためにはマイニングをスタートする必要があります。
1 |
miner.start() |
送金できたか確認しましょう。
1 |
eth.getBalance(eth.accounts[1]) |
アカウント2に10ETHが増えました。
マイニングをストップします。
1 |
miner.stop() |
3.今回の送金に関するトランザクションを調べます。
1 |
eth.getTransaction("0x6ad4cd00d2dd0ae8d39d78b55e26735c0dc9837969486c743c6165e2f0744eb5") |
getTransaction内の数値は先程送金時に作成したトランザクションを記述します。
4.ブロック情報も調べられます。
先程のトランザクション情報に表示されたblogNumberで以下のコ-ドのように調べます。
1 |
eth.getBlock(512) |
Gethのまとめ
Gethを終了するときはexitを入力します。
1 |
exit |
gethでコマンドプロンプトに入力している際に[TAB]キーを押すと、コマンドの補完機能が使えます。便利ですので利用してください。
gethの使い方は難しいように見えて案外簡単です。
Ethereumの開発において基本となるので、しっかりとマスターしてください。