文書の過去の版を表示しています。
目次
ethereumブロックチェーンの構築(geth偏)
プライベート型のethereumブロックチェーンを構築し、採掘、スマートコントラクトを実行するハンズオンです。
インストール
geth は GitHub 上にソースコードが公開されており、 https://geth.ethereum.org/downloads/に Linux、macOS、Windows 用のパッケージが公開さています。
お使いの環境に合わせて geth パッケージをダウンロードし、インストールしてください。
初期化
genesis ファイルの作成
ブロックチェーンを構築するさい、1番最初のブロックを作成する必要があります。
1番最初のブロックを定義するためのファイルを「genesisファイル」(genesis: 発生、起源、創始の意)と呼びます。
ethereum では「genesisファイル」を JSON で定義します。
以下のファイルを作成してください。
- genesis.json
{ "config": { "chainId": 15, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "berlinBlock": 0, "londonBlock": 0 }, "alloc": { "0x0000000000000000000000000000000000000001": { "balance": "111111111" }, "0x0000000000000000000000000000000000000002": { "balance": "222222222" } }, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x20000", "extraData": "", "gasLimit": "0x2fefd8", "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" }
構築
PowerShell やコマンドラインから以下のようにコマンドを実行することで、ブロックチェーンを構築します。
(先程「インストール」した geth にパスを通すか、geth をフルパスで実行してください。
- sh
geth init --datadir ./private_network genesis.json
コマンドの意味
- geth: コマンドです
- init: 初期化を意味します
- –datadir: 各種必要なファイルを保存するためのディレクトリを指定します
- genesis.json: 1番最初のブロックを定義した genesis ファイルを指定しています
geth console でブロックチェーンにコンソール接続する
- sh
geth console
EOA(Externally Owned Account)の作成
geth console で作業します。
現在、アカウントが無いことを確認する。
- sh
> eth.accounts []
アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します)
- sh
> personal.newAccount("password01") "0xd236df380900a967dcc8a229f6a27bd03c330c6d" > eth.accounts ["0xd236df380900a967dcc8a229f6a27bd03c330c6d"] > personal.newAccount("password02") "0x7caf4b7dff26e89d7138627787d2cdf91d97c81f"
password01 と password02 はアカウントに紐づくパスワードです。 「0x」から始まる文字列がアカウントです。両方ペアでメモしておいてください。
現在の coinbase を確認する。
- sh
> eth.coinbase "0xd236df380900a967dcc8a229f6a27bd03c330c6d"
今後、採掘を行うと上記で表示された coinbase アカウントにコインが付加されます。
Mining(採掘)の実行
- sh
> miner.start() null > eth.blockNumber 0 > eth.blockNumber 5 > eth.blockNumber 42 > eth.getBalance(eth.accounts[0]) 210000000000000000000 > eth.getBalance(eth.accounts[1]) 0
送金
- sh
> personal.unlockAccount(eth.accounts[0]) Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d Passphrase: true > eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether")}) "0xe5c0307ca99f89dfa135a6609d0a01a48b62855ceb3a34a8e36c66d1d7a3d893"
スマートコントラクト
上記でトランザクションを送信している。 トランザクションは誰かが採掘をしているときに処理される。 よって、採掘を開始して send を完了させる。
- sh
> miner.start() null > eth.getBalance(eth.accounts[1]) 5000000000000000000 > miner.stop() null
コンパイラ(solc)のインストール
solidity releases でコンパイラーが公開されていますので、ダウンロードします。
(上記で配布されているのでコンパイラの実行ファイルでので、解凍やインストールは必要なく、すぐにコンパイラを利用できます。)
実装
- Counter.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; contract Counter { uint public count; // Function to get the current count function get() public view returns (uint) { return count; } // Function to increment count by 1 function inc() public { count += 1; } // Function to decrement count by 1 function dec() public { count -= 1; } }
コンパイル
- sh
solc-windows.exe --abi --bin Counter.sol
コマンドの意味
- solc-windows.exe: コマンドです
- –abi: コンパイルして ABI を出力します
- –bin: コンパイルして バイナリ を出力します
- Counter.sol: ソースコードを指定しています