2022年1月11日火曜日

Mac でイーサリアムの開発環境構築

Mac でイーサリアムの開発環境構築

概要

Mac でイーサリアム API を使った開発ができる環境を構築してみました
今回はイーサリアムの golang 実装である geth を使います

マイニングもできますがあくまでもローカルに構築した環境なので実際に報酬などは受け取れません

環境

  • macOS 11.6.2
  • geth 1.10.15-stable

geth のインストール

  • brew install ethereum

geth ではなく ethereum という Formulae をインストールしましょう

genesis ファイルの作成

  • mkdir eth_private_net
  • vim eth_private_net/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": {}
}

初期化

  • geth --datadir ./eth_private_net init ./eth_private_net/myGenesis.json
INFO [01-07|11:25:56.104] Maximum peer count                       ETH=50 LES=0 total=50
INFO [01-07|11:25:56.123] Set global gas cap                       cap=50,000,000
INFO [01-07|11:25:56.124] Allocated cache and file handles         database=/path/to/eth_private_net/geth/chaindata cache=16.00MiB handles=16
INFO [01-07|11:25:56.166] Writing custom genesis block
INFO [01-07|11:25:56.174] Persisted trie from memory database      nodes=0 size=0.00B time="357.389µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-07|11:25:56.177] Successfully wrote genesis state         database=chaindata hash=7b2e8b..7e0432
INFO [01-07|11:25:56.178] Allocated cache and file handles         database=/path/to/eth_private_net/geth/lightchaindata cache=16.00MiB handles=16
INFO [01-07|11:25:56.215] Writing custom genesis block
INFO [01-07|11:25:56.215] Persisted trie from memory database      nodes=0 size=0.00B time="5.795µs"   gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-07|11:25:56.217] Successfully wrote genesis state         database=lightchaindata hash=7b2e8b..7e0432

geth ノード起動

  • geth --networkid “15” --nodiscover --datadir ./eth_private_net console

30303 で起動しています

動作確認

コンソールでイーサリアム API をコールできるコマンドを実行できます

> 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: []
}

それ以外にもマイニング用の API や送金の API も試せます

  • admin.nodeInfo
  • net.peerCount
  • eth.accounts

最後に

今回は開発環境を構築してみました
イーサリアムを使ったブロックチェーンアプリなどを構築する場合にはこんな感じで開発用の API を構築するようです

マイニングだけしたい場合には ethminer というツールがありますが GPU (opencl or cuda) が必要になり GPU がない環境でのマイニングは geth を使うことになります

参考サイト

0 件のコメント:

コメントを投稿