アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【仮想通貨UbuntuDebian
Ubuntu Server 21.10でイーサリアムブロックチェーン【その2】
POSTED BY
2023-03-22

Ubuntu Server 21.10でイーサリアムブロックチェーン【その1】

続きです。それではローカルテストブロックチェーンを起動してみます。

geth --networkid "15" --nodiscover --rpc.allow-unprotected-txs --datadir "/home/hogeuser/eth_test" console 2>> /home/hogeuser/eth_test/geth_err.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.10.17-unstable-2352c722/linux-amd64/go1.17.5
at block: 0 (Thu Jan 01 1970 09:00:00 GMT+0900 (JST))
 datadir: /home/hogeuser/eth_test
 modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

To exit, press ctrl-d or type exit

・networkidは、さきのgenesis.jsonに記載したchainIdを指定します。
・操作consoleを起動しますが、標準エラー出力はgeth_err.logにリダイレクトします。(マイニング状況等各種ログが出力される)
・--rpc.allow-unprotected-txsは、送金テスト時にError: only replay-protected (EIP-155) transactions allowed over RPCと言われるのを防ぐオプションです。

1、最初のブロック情報の確認

eth.getBlock(0)として、ブロック番号0=最初のブロック=が、最初のブロック情報ファイルgenesis.jsonで指定した内容であるか確認します。

eth.getBlock(0)
{
  difficulty: 16384,
  extraData: "0x",
  gasLimit: 134217728,
  gasUsed: 0,
  hash: "0x7b2e8be699df0d329cc74a99271ff7720e2875cd2c4dd0b419ec60d1fe7e0432",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x3333333333333333333333333333333333333333",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 507,
  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  timestamp: 0,
  totalDifficulty: 16384,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

nonceやmixHash他、各項目はgenesis.jsonの設定が反映されています。

2、アカウントの作成

ブロックチェーン上で何かするにはまずアカウントが必要です。ここでは、採掘その他メインアカウント1つと、送金テストで受け取る用のアカウント1つ、計2つを作成します。

現在のアカウント一覧確認

eth.accounts

[]

まだ無いのでカラです。ではnewAccountコマンドでアカウントを2つ作成します。与える引数は名前ではなくパスワードです。ここでは簡易的にhoge1,hoge2とします。

personal.newAccount("hoge1")
"0x36d9643d7fdb4ed786293133cf9bc721509660b5"

personal.newAccount("hoge2")
"0x1a8355a4ae7465f7bf867a1a0ea88932b1c19891"

eth.accounts
["0x36d9643d7fdb4ed786293133cf9bc721509660b5", "0x1a8355a4ae7465f7bf867a1a0ea88932b1c19891"]

2つのアカウントが作成され一覧確認できました。続けて、採掘したり報酬を受け取ったりする代表アカウント=coinbaseが誰であるかを確認します。

eth.coinbase
"0x36d9643d7fdb4ed786293133cf9bc721509660b5"

coinbaseは最初に作ったアカウントにデフォルトで設定されています。

3、マイニングの開始

それではマイニング(ブロックの採掘)を開始します。自分1人がひたすら掘るので、ガンガン報酬=イーサリアム=が貯まっていきます。これが本物なら億万長者ですなぁ!
※マイニングにはPCの大量の電力を消費します。自己責任注意※

miner.start()
null

eth.blockNumber
15

eth.hashrate
0

eth.mining
true

eth.getBalance(eth.accounts[1])
0

eth.getBalance(eth.accounts[0])
122000000000000000000

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

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

miner.startでマイニングを開始して、blockNumberで掘ったブロック数が確認できます。マイニングしてるかどうかはeth.miningで確認。

eth.accounts[0]にどんどん報酬が入ってきているのがわかります。eth.accounts[1]は何もしていないので何も入ってきてません。単位はweiなので、etherに直して出力。

geth_err.logに採掘状況を含めた動作ログが随時書き込まれているので確認。

tail -f /home/hogeuser/eth_test/geth_err.log

INFO [03-22|13:00:36.746] Commit new sealing work                  number=2246 sealhash=9b86d8..b39735 uncles=0 txs=0 gas=0       fees=0           elapsed="347.65μs"
INFO [03-22|13:00:36.746] Commit new sealing work                  number=2246 sealhash=9b86d8..b39735 uncles=0 txs=0 gas=0       fees=0           elapsed="545.594μs"
INFO [03-22|13:00:41.205] Successfully sealed new block            number=2246 sealhash=9b86d8..b39735 hash=b62173..30164c elapsed=4.459s
INFO [03-22|13:00:41.205] ? block reached canonical chain          number=2239 hash=619b55..fcd3d2

4、マイニングの終了、およびブロックチェーンの終了

miner.stop()

で終了します。ブロックチェーンそのものを終了するには

exit

とするか、Ctrl+Dを打ちます。ログで終わりを確認し、

tail /home/hogeuser/eth_test/geth_err.log

INFO [03-22|13:00:59.978] Persisted trie from memory database      nodes=0 size=0.00B   time="2.567μs"  gcnodes=0    gcsize=0.00B     gctime=0s         livenodes=251 livesize=31.90KiB
INFO [03-22|13:00:59.980] Writing clean trie cache to disk         path=/home/hogeuser/eth_test/geth/triecache threads=4
INFO [03-22|13:00:59.982] Persisted the clean trie cache           path=/home/hogeuser/eth_test/geth/triecache elapsed=1.870ms
INFO [03-22|13:00:59.982] Blockchain stopped

ps aux | grep hogeuser

で、gethプロセスが残ってないか確認します。次回は採掘したイーサリアムを、別のアカウント(2番目に作ったアカウント)に送金してみます。

Ubuntu Server 21.10でイーサリアムブロックチェーン【その3】

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】