
イーサアリアムは、現在の「プルーフ・オブ・ワーク(PoW)」から「プルーフ・オブ・ステーク(PoS)」への移行でマイニングは無くなっていくようじゃ。
イーサリアムの開発者Tim Beiko氏もマイニング設備にこれ以上投資しないように勧めているのじゃ。

じゃあその前にということで、ノートパソコン1つでetherをマイニングしてみました。

結果は 0 ETH だったのじゃ。
イーサリアムはグラフィックカード(GPU)を使うマイニングに適しているから、ノートパソコン1つでソロマイニングはちょっと難しかったようじゃ。

でもマイニング体験はできたので良しとします。

今回のマイニングでは「Ubuntu」「Geth」「Visual Studio Code」を使用するので、これらが無ければ過去記事を参考にするのじゃ
- OS:Windows 10/バージョン 21H2 (OS ビルド 19044.1706)
- プロセッサ:Intel(R) Core(TM) i7-7500U
- メモリ:DDR4 8GB
- マザーボード:L-NSS172-L(みんなもっとカッコイイ名前の使ってますよね…)
Gethの確認

「Ubuntu」を立ち上げ、「Geth」がインストールされているか確認するのじゃ。
●コマンドを実行↓
geth --help

Genesisファイルを作成する

過去記事「Solidityで独自トークンを発行し、Faucetアプリを作る方法②」とは違う方法で作成するのじゃ。

以前作ったGenesisファイルはChain IDが「4」のRinkebyネットワークを使いました。
今回は「15」のChain IDを使っていますが、いくつかの番号以外であれば、自分で指定できます。

テストネット用のディレクトリを作るのじゃ。
今回は「My_eth_chain」としたのじゃ。
●コマンドを実行↓
mkdir /home/ユーザー名/My_eth_chain


「VS Code」をWSL2(Windows Subsystem for Linux 2)に接続するのじゃ。
①リモートエクスプローラーを選択
②「Ubuntu」を右クリックすると接続メニューが表示されるので、「Connect to WSL」を選択↓


新規でVisual Studio Codeが起動するのじゃ。
左下に「WSL: Ubuntu」と表示されていれば接続完了なのじゃ。

①「Open Folder」をクリック
②作成したディレクトリ「My_eth_chain」を選択
③「OK」↓

●「myGenesis.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ブロックの初期化
●コマンドを実行↓
geth --datadir /home/ユーザー名/My_eth_chain init /home/ユーザー名/My_eth_chain/myGenesis.json

Gethの起動
●コマンドを実行↓
geth --networkid "15" --nodiscover --datadir "/home/ユーザー名/My_eth_chain" console 2>> /home/ユーザー名/My_eth_chain/geth_err.log


今作ったmyGenesis.jsonファイルの内容のGenesisブロックか確認するのじゃ。
●コマンドを実行↓
eth.getBlock(0)


内容を簡単に確認してみるのじゃ。
myGenesis.json | |
“nonce” | “0x0000000000000042” |
“gasLimit” | “0x8000000″(16進表記) |
“difficulty” | “0x4000″(16進表記) |
Genesisブロック | |
“nonce” | “0x0000000000000042” |
“gasLimit” | 134217728(10進表記) |
“difficulty” | 16384(10進表記) |

16進表記から10進表記を確認するのは面倒だけど、ちゃんと作ったmyGenesis.jsonファイルの内容になってるね。
16進表記から10進表記なんて初めて調べてみたよ
ε=( ̄。 ̄;A フゥ…

目次の「Genesisファイルを作成する」から「Gethの起動」の工程によって、プライベートネット(テストネット)に接続することができたのじゃ。
アカウントの作成

アカウントの作成を行うのじゃ。
このアカウントによってマイニングを行うのじゃ。
その前に、まだアカウントを作ってない状態でアカウントを表示させるコマンドを実行してみるのじゃ。
●アカウント表示↓
eth.accounts

すると下図のように[]が表示されるのじゃ。
[]の中が何も表示されないのは、まだアカウントが無いということなのじゃ。


何もないことが分かったところで、アカウントを作成するのじゃ。
●アカウント作成↓
personal.newAccount("hogehoge01")

上記コマンドの hogehoge01
はアカウントを作成するためのパスワードなので、この部分は自分で決めたパスワードに書き換えて実行してください。
- パスワードを忘れると復元する手段はないので、パスワードは忘れないように自分で保管しておく。
- 半角英数記号を含む長い複雑なパスワードを設定して、セキュリティを強化しておく。


ほー、メタマスクなんかでお馴染みのアドレスができた。

アカウントを作ったところで、さっき空のリスト[]が表示された eth.accounts
コマンドを実行してみるのじゃ。


うん、ちゃんと作成したアドレスが表示された。

送金テスト用に、もう1つアドレスを作成しておくのじゃ。
●アカウント作成↓
personal.newAccount("hogehoge02")

hogehoge02にも新たにパスワードを設定して、忘れないようにしてください。



マイニングが成功時したときに報酬を受け取るアカウントを表示してみるのじゃ。
●マイニング成功時に報酬を受け取るアカウント確認↓
eth.coinbase


マイニングが成功時したときに報酬を受け取るアカウントを表示してみるのじゃ。
作成した2つのアカウントが表示されていて、この緑色の方が報酬を紐づけるアカウントなのじゃ。

2回目の表示からは緑色の方だけ表示されるみたいです。

このアカウントの事をetherbase(coinbase)と言うのじゃ。
etherbaseはデフォルトで eth.accounts[0]
コマンドを実行して表示されるアドレスに設定されているのじゃ。


違うアカウントに設定したい場合は…
●etherbase(coinbase)の変更↓
miner.setEtherbase(eth.accounts[1])

etherをマイニング

いよいよetherのマイニングなのじゃ。

(((o(*゚∀゚*)o)))ワクワク
●スタートコマンド↓
miner.start()
●ストップコマンド↓
miner.stop()


ゆるりは miner.stop() をしても止まらないときがありました。
そんな時は「Ctrl + D」でコンソールから抜けると止まります。
●現在マイニング中かどうかの確認↓
eth.mining

マイニング中であればコマンドの実行結果が true
になり、そうでなければ false
が返ってくるのじゃ。

●マイニング状況の確認↓
eth.blockNumber

●保有額確認(wei単位)↓
eth.getBalance(eth.accounts[0])
※etherbase(coinbase)を[0]以外で設定しているのであれば、[0]を自分の設定したアカウントの番号にに書き換えて実行。


「3.832e+21」?

このコマンド結果ではwei単位で表示されるのじゃ。

1wei = 0.000000000000000001ether だったね。

下記コマンドだとether単位でわかりやすくなるのじゃ。
●保有額確認(ether単位)↓
web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
※etherbase(coinbase)を[0]以外で設定しているのであれば、[0]を自分の設定したアカウントの番号にに書き換えて実行。


報酬額は 3832eth なのじゃ。

∑(゚Д゚)ファッ!!?
3832eth !!!!!!!?

落ち着くのじゃ、これはプライベートネット(テストネット)なのじゃ。
だから 3832eth は例えると子供銀行券のようなもので、なんの価値もないのじゃ。

そうだったね、
いきなりメインネットに接続すると、スマートコントラクトがちゃんと動かなかった時でもガス代(トランザクション手数料)がかかっちゃうから、まずはこのプライベートネット(テストネット)で動作確認するんだったね…(´・ω・`)
etherの送金


上の図を見ると、etherbase(coinbase)であるaccounts[0]に 3832eth が保有されていて、accounts[1]は 0 なのじゃ。
このaccounts[0]からaccounts[1]へ、気前よく 555eth を送金してみるのじゃ。
- 送金元のアカウントのロックを解除すること
- マイニング処理
miner.start()
を実行していること
●送金元アカウントのロック解除↓
personal.unlockAccount(eth.accounts[0])


Passphraseはアカウントを作成したときのパスワードを入力するのじゃ。

ちなみにパスワードは入力しても入力しているのかわからないし表示もされないので、間違えないようにキーボードをポチポチしましょう。

「true」と表示されれば、ロック解除成功なのじゃ。

デフォルトの設定で5分経過するとまたロックがかかりますが、気になる方はロックをかけなおしてください。
●アカウントのロック↓
personal.lockAccount(eth.accounts[0])
●ether送金↓
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(555, "ether")})

from
に送金元アドレス、 to
に送金先アドレス、 value
に送りたいether単位の額を指定するのじゃ

from
に送金元アドレス、 to
に送金先アドレス、 value
に送りたいether単位の額を指定するのじゃ
コメント