Eyes, JAPAN Blog > 【Ethereum入門】gethでマイニングをする

【Ethereum入門】gethでマイニングをする

Tamahashi

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

はじめに

はじめまして!アルバイトのタマハシです。

Eyes,JAPANに来てからまだ3ヶ月ですが、多くの経験をさせてもらうなかで、現在業務の関係でスマートコントラクトの勉強をしています。

そこで、Ehererumに関する知識を共有することで、これからスマートコントラクトを学ぶ人の最初の足掛かりになればと思いこの記事を書います。

今回は、Ethereumに関する用語の整理とgethを用いて仮想通貨であるetherをマイニングするところまで紹介します。

Ethereumとは

イーサリアムEthereum)とは、分散型アプリケーション (DApps) やスマート・コントラクトを構築するためのプラットフォームの名称、及び関連するオープンソース・ソフトウェア・プロジェクトの総称である。
イーサリアム – Wikipedia

あまりピンとこないのでEthereumの特徴を私なりに整理してみます。

  • 仮想通貨であるEtherによって資産のやり取りができる。
  • マイニングや、送金はgethと呼ばれるクライアントで実行できる。
  • 送金の際はトランザクションを生成することで実現する。
  • トランザクションにはEtherだけでなく任意のデータを載せることができ、そこに任意のコードも載せることができる。
  • コードはSolidityと呼ばれる独自のプログラミング言語で記述する。
  • 以上の仕組みを提供するプラットフォームをEthereumと呼ぶ。

このように解釈しています。

なかでもトランザクションに任意のデータを載せることができる点が、bitcoinやNEMと比較してEthereumの最も特徴的な部分だと考えています。これによりブロックチェーン上で任意のプログラムを実行させることでスマートコントラクトを用いたさまざまなアプリケーションを実現することができます。

マイニングをする準備

gethをインストール


> brew tap ethereum/ethereum
> brew install ethereum

 

Dockerを利用の方
docker-compose.ymlファイルを作成したのでこちらをご使用ください!


version: '3'
services:
  geth:
      image: ethereum/client-go
      volumes:
        - ./data:/root
      ports:
        - "30303:30303"
        - "8545:8545"
      tty: true

Genesisファイルを作成

Genesisファイルとは、ネットワークでやり取りされるブロックチェーンの最初(0番目)のブロック情報を定義したもので、Ethereumをプラベートネットワークで運用する際は必須です。

genesis.json


{
    "config": {
      "chainId": 15,
      "homesteadBlock": 0,
      "eip150Block": 0,
      "eip155Block": 0,
      "eip158Block": 0,
      "byzantiumBlock": 0,
      "constantinopleBlock": 0,
      "petersburgBlock": 0,
      "istanbulBlock": 0,
      "berlinBlock": 0
    },
    "nonce": "0x0000000000000042",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "",
    "gasLimit": "0x8000000",
    "difficulty": "0x4000",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {}
  }

Genesisファイルで初期化

以下のコマンドでgenesisファイルを用いてブロックチェーンを初期化します。
/root/eth_private_net/の部分はgenesisファイルがあるパスに適宜読み替えてください


geth --datadir /root/eth_private_net init /root/eth_private_net/genesis.json

gethを起動


geth --networkid "15" --nodiscover --port 30304 --datadir "/root/eth_private_net" console 2>> /root/eth_private_net/geth_err.log

アカウントの作成

マイニングした際の報酬を受け取るアカウントを作成します。
ここで入力したパスワードを忘れないようにしてください。


> personal.newAccount("testpassword")
"0xa18bc09f7193f6092e7e37b3ce32228ff2c2cc31"

マイニングをする

以下のコマンドでマイニングを開始します。
結果とてnullが帰ってきますが、戻り値がないだけなので特に問題はありません。


> miner.start()
null

 

以下のコマンドで現在マイニング中かどうかを確認できます。


> eth.mining
true

 

以下のコマンドでマイニングの速度を確認できます。
0より大きい値が出力されれば正常にマイニングできています(初回は時間がかかるようで私の環境だと10分ほど待つと0より大きい値が表示されました)。


> eth.hashrate
13043

 

マイニングが成功したら以下のコマンドで終了します。


> miner.stop()

 

報酬として得たetherを確認します。


> eth.getBalance(eth.accounts[0])
125000000000000000000

 

以上でマイニング完了です!おつかれさまでした!

終わりに

いかがだったでしょうか?今回はEthereum周辺知識の確認とgethを用いてマイニングをしてみました。
今後の目標はsolidityを使ってスマートコントラクトのアプリケーションを作成することですのでまだまだ学ぶべきことは多いです。
また知見がたまりましたら共有できればと思っています。
ありがとうございました!

Comments are closed.