ユーザ用ツール

サイト用ツール


blockchain:ethereum構築ハンズオン_geth偏

文書の過去の版を表示しています。


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: ソースコードを指定しています

上記コンパイルを実行すると、以下のように「Binary」と「Contract JSON API」が出力されます。

今後利用するときに「Binary」の先頭に「0x」を付ける必要がありますので、「0x」を付けてメモしておいてください。

(例) 608060… → 0x608060…

コンパイル実行結果
======= Counter.sol:Counter =======
Binary:
608060405234801561001057600080fd5b50610209806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806306661abd14610051578063371303c01461006f5780636d4ce63c14610079578063b3bcfa8214610097575b600080fd5b6100596100a1565b60405161006691906100ff565b60405180910390f35b6100776100a7565b005b6100816100c2565b60405161008e91906100ff565b60405180910390f35b61009f6100cb565b005b60005481565b60016000808282546100b99190610149565b92505081905550565b60008054905090565b60016000808282546100dd919061019f565b92505081905550565b6000819050919050565b6100f9816100e6565b82525050565b600060208201905061011460008301846100f0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610154826100e6565b915061015f836100e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101945761019361011a565b5b828201905092915050565b60006101aa826100e6565b91506101b5836100e6565b9250828210156101c8576101c761011a565b5b82820390509291505056fea26469706673582212207a90fc8477fe04ed648a217280498cc223d36737bb62448b5f15b12f4496447a64736f6c634300080d0033
Contract JSON ABI
[{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inc","outputs":[],"stateMutability":"nonpayable","type":"function"}]

デプロイ

実行

ガス代(手数料)の確認

blockchain/ethereum構築ハンズオン_geth偏.1650429057.txt.gz · 最終更新: 2022/04/20 04:30 by dot