ゲームエンジニアの雑記ブログ

ゲームエンジニアの雑記ブログ。テーマ自由、技術について解説します

【Ethereum開発】Gethを使ったether(イーサ)の採掘

【Ethereum開発】Gethを使ったether(イーサ)の採掘

こんにちは、エンジニアのオオバです。

前回に引き続きGethを使ったEthereum開発の学習を進めています。

環境構築についてはコチラの記事を見ていただければと思います。

今回はetherの採掘です。

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

ether(イーサ)とは?

Ethereumは内部通貨etherが規定されており、Ethereumでトランザクションを発生させるためにはetherの手数料が必要になります。

etherとはEthereumの内部通貨のことです。
そもそもEhtereumは通貨ではなくプラットフォーム。

そのプラットフォーム内で使われる通貨がether(イーサ)です。

プラットフォームと言われてもという感じですが、
毎度のごとく細かいことはスキップして本題の採掘を始めます。

本記事もコチラのサイトを参考にさせていただいております。
いつもありがとうございます。
etherを採掘する - Ethereum入門

EOAアカウントの作成

Ethereumには2種類のアカウントがありますが、
今回はEOA(Externally Owened Account)というアカウントを作成します。

前回記事で接続したプライベートネットワーク上の対話型コンソールを使っていきます。
もしまだでしたらコチラの記事を参考にして対話型コンソールを起動してください。

現在のEOAアカウント調査

> eth.accounts  
[ ]  

まだ作っていないため空の配列が出力されます。

アカウントの作成

personal.newAccountメソッドでアカウントが作成できます。

> personal.newAccount("pass")  
"0xf49a337c6f16b1897576bdd12d4d76fef4f0ad65"  

再度現在のアカウントリストを確認します。

> eth.accounts  
["0xf49a337c6f16b1897576bdd12d4d76fef4f0ad65"]  

このように、さきほどは空の配列でしたが、
作成したハッシュ値(アドレス)が格納されます。

あとで送金処理をするため、もう1アカウント作成します。

> personal.newAccount("pass2")  
"0x2a93c84276d063851c307a9a490e5f83f75153e1"  

> eth.accounts  
["0xf49a337c6f16b1897576bdd12d4d76fef4f0ad65", "0x2a93c84276d063851c307a9a490e5f83f75153e1"]  

このようにアカウントが2つ作成されました。

パスワードは復元できないので忘れないようにしてください

採掘と報酬をひも付けるetherbase またはcoinbase

> eth.coinbase  
"0xf49a337c6f16b1897576bdd12d4d76fef4f0ad65"  

eth.coinbaseと実行すると、
さきほど作成したEOAアカウントのうち片方のアドレスが表示されました。

このアドレスが採掘した時の報酬にひも付きます。

報酬をひも付けるアドレスを変えたい場合は、
以下のコマンドを実行します。

miner.setEtherbase(new_adress)  

etherの採掘

👇以下のコマンドで採掘が開始します。

> miner.start()  
null  

採掘状況の確認

> eth.blockNumber  
157  

このように採掘したブロック数を確認できます。

採掘しているかどうかの確認

> eth.mining  
true  

採掘の停止

> miner.stop()  
null  

ハッシュレートの確認

マイニングをする際の1秒あたりの計算力、採掘速度のことです。 単位は hash/s (セカンド)で、「毎秒 ◯ ハッシュの計算ができる」ことを意味します。

そもそもハッシュレートとは採掘スピードとのことです。
ハッシュレートを確認してみましょう。

ところが、ドキュメントでは eth.hashrateと記載されていますが、

Error: the method eth_hashrate does not exist/is not available  
 at web3.js:6347:37(47)  
 at get (web3.js:6247:66(14))  

👆このようなエラーがスローされます。

バージョン違いによる仕様の変更かもしれません。
中身を確認すると、
👇正しくはこちらで確認できます。

> ethash.getHashrate()  
494672  

採掘したブロックの確認

100個目のブロックを確認してみます。

> eth.getBlock(100)  

すると以下のようなJSONが出力されます。

{
  difficulty: 137514,  
  extraData: "0xd983010a02846765746888676f312e31362e338664617277696e",  
  gasLimit: 121724529,  
  gasUsed: 0,  
  hash: "0xb454ce4bab83f6ae896469381a8831b004e89c19655dc139078347176e69dc5f",  
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",  
  miner: "0xf49a337c6f16b1897576bdd12d4d76fef4f0ad65",  
  mixHash: "0xf7058ff56352eda9708d940e9414048871108746d98268b0ebf958ac6593b693",  
  nonce: "0x16d87ae5f6da90d8",  
  number: 100,  
  parentHash: "0xc89fabade2b4373520aab707a4a2d7fe1aa8ef0c4cd7f2c37dd7eee086e58026",  
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",  
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",  
  size: 538,  
  stateRoot: "0xc537d04ec12de7055ca44163ca95144bab45b149af09e38bd63e82752e97ee2b",  
  timestamp: 1619428804,  
  totalDifficulty: 13443302,  
  transactions: [],  
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",  
  uncles: []  
}

一旦細かいことはスキップして先に進みます。

採掘報酬の確認

getBalanceメソッドで現状の保有etherを確認できます。

> eth.getBalance(eth.accounts[0])  
1.0485e+22  

wei単位の報酬量では分かりづらいためether単位に変換してみます。

> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")  
10485  

現在採掘して、10485イーサ所有していることになります。

まとめ

etherの採掘をしてきました。

ただ、テスト環境だと正直どんどん採掘でき、
報酬も付与されるため何をしているのか実感はありません。

新しいことの学習とは、最初はそういうものです。
とりあえず引き続き全体把握に努めていきます。

次回はetherの送金です。

オススメ記事
検証環境
  • macOS Catalina 10.15.7
  • ethereum 1.10.2
  • go 1.16.3 darwin/amd64