blockchain:ethereum構築ハンズオン_geth偏
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| blockchain:ethereum構築ハンズオン_geth偏 [2022/04/20 04:58] – dot | blockchain:ethereum構築ハンズオン_geth偏 [2022/04/28 01:46] (現在) – dot | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== ethereumブロックチェーンの構築(geth偏) ====== | ====== ethereumブロックチェーンの構築(geth偏) ====== | ||
| - | プライベート型のethereumブロックチェーンを構築し、採掘、スマートコントラクトを実行するハンズオンです。 | + | プライベート型のethereumブロックチェーンを構築し、採掘、送金、スマートコントラクトを実行するハンズオンです。 |
| ===== インストール ===== | ===== インストール ===== | ||
| 行 23: | 行 23: | ||
| 以下のファイルを作成してください。 | 以下のファイルを作成してください。 | ||
| - | < | + | < |
| { | { | ||
| " | " | ||
| 行 61: | 行 61: | ||
| PowerShell やコマンドラインから以下のようにコマンドを実行することで、ブロックチェーンを構築します。 | PowerShell やコマンドラインから以下のようにコマンドを実行することで、ブロックチェーンを構築します。 | ||
| - | (先程「インストール」した geth にパスを通すか、geth をフルパスで実行してください。 | + | (先程「インストール」した geth にパスを通すか、geth をフルパスで実行してください。) |
| - | < | + | < |
| - | geth init --datadir | + | geth --datadir private_network |
| </ | </ | ||
| コマンドの意味 | コマンドの意味 | ||
| * geth: コマンドです | * geth: コマンドです | ||
| - | * init: 初期化を意味します | ||
| * --datadir: 各種必要なファイルを保存するためのディレクトリを指定します | * --datadir: 各種必要なファイルを保存するためのディレクトリを指定します | ||
| + | * init: 初期化を意味します | ||
| * genesis.json: | * genesis.json: | ||
| ===== geth console でブロックチェーンにコンソール接続する ===== | ===== geth console でブロックチェーンにコンソール接続する ===== | ||
| - | < | + | < |
| - | geth console | + | geth --datadir private_network --nodiscover |
| </ | </ | ||
| + | |||
| + | コマンドの意味 | ||
| + | * geth: コマンドです | ||
| + | * --datadir: 各種必要なファイルを保存するためのディレクトリを指定します | ||
| + | * --nodiscover: | ||
| + | * console: geth console つまりコマンドラインを起動します | ||
| + | |||
| + | 上記のように「geth ... console」でconsole接続すると「ブロックチェーンの起動」と「console接続」が同時に行われます。そのため、コマンドを打つ度にブロックチェーンのログがconsoleに出力され、大変操作しづらくなります。おすすめの方法は、以下「ブロックチェーンの起動」と「attachでconsole接続」分けて行う方法です。 | ||
| + | |||
| + | [[blockchain: | ||
| + | |||
| ===== EOA(Externally Owned Account)の作成 ===== | ===== EOA(Externally Owned Account)の作成 ===== | ||
| 行 85: | 行 96: | ||
| 現在、アカウントが無いことを確認する。 | 現在、アカウントが無いことを確認する。 | ||
| - | < | + | < |
| > eth.accounts | > eth.accounts | ||
| [] | [] | ||
| 行 92: | 行 103: | ||
| アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します) | アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します) | ||
| - | < | + | < |
| > personal.newAccount(" | > personal.newAccount(" | ||
| " | " | ||
| 行 107: | 行 118: | ||
| 現在の coinbase を確認する。 | 現在の coinbase を確認する。 | ||
| - | < | + | < |
| > eth.coinbase | > eth.coinbase | ||
| " | " | ||
| 行 118: | 行 129: | ||
| __実行__ | __実行__ | ||
| - | < | + | < |
| > miner.start() | > miner.start() | ||
| null | null | ||
| 行 131: | 行 142: | ||
| > eth.getBalance(eth.accounts[1]) | > eth.getBalance(eth.accounts[1]) | ||
| 0 | 0 | ||
| + | |||
| + | ETH で残高を表示 | ||
| + | > web3.fromWei(eth.getBalance(eth.accounts[0]), | ||
| + | 210 | ||
| </ | </ | ||
| __停止__ | __停止__ | ||
| - | < | + | < |
| > miner.stop() | > miner.stop() | ||
| </ | </ | ||
| 行 141: | 行 156: | ||
| ===== 送金 ===== | ===== 送金 ===== | ||
| - | < | + | < |
| > personal.unlockAccount(eth.accounts[0]) | > personal.unlockAccount(eth.accounts[0]) | ||
| Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d | Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d | ||
| 行 149: | 行 164: | ||
| " | " | ||
| </ | </ | ||
| - | |||
| - | ===== スマートコントラクト ===== | ||
| 上記でトランザクションを送信している。 | 上記でトランザクションを送信している。 | ||
| 行 157: | 行 170: | ||
| - | < | + | < |
| > miner.start() | > miner.start() | ||
| null | null | ||
| 行 165: | 行 178: | ||
| null | null | ||
| </ | </ | ||
| + | |||
| + | ===== スマートコントラクト ===== | ||
| ==== コンパイラ(solc)のインストール ==== | ==== コンパイラ(solc)のインストール ==== | ||
| 行 177: | 行 192: | ||
| 内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 | 内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 | ||
| - | < | + | < |
| // SPDX-License-Identifier: | // SPDX-License-Identifier: | ||
| - | pragma solidity ^0.8.18; | + | pragma solidity ^0.8.13; |
| contract Counter { | contract Counter { | ||
| 行 205: | 行 220: | ||
| スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | ||
| - | < | + | < |
| solc-windows.exe --abi --bin Counter.sol | solc-windows.exe --abi --bin Counter.sol | ||
| </ | </ | ||
| 行 223: | 行 238: | ||
| - | < | + | < |
| ======= Counter.sol: | ======= Counter.sol: | ||
| Binary: | Binary: | ||
| 行 236: | 行 251: | ||
| - | < | + | < |
| - | geth console | + | geth --datadir private_network --nodiscover |
| > var bin = " | > var bin = " | ||
| b506004361061004c5760003560e01c806306661abd14610051578063371303c01461006f5780636d4ce63c14610079578063b3bcfa82146 | b506004361061004c5760003560e01c806306661abd14610051578063371303c01461006f5780636d4ce63c14610079578063b3bcfa82146 | ||
| 行 269: | 行 284: | ||
| デプロイ処理が完了すると「Contract Account」がaddressに付与されます。 | デプロイ処理が完了すると「Contract Account」がaddressに付与されます。 | ||
| - | < | + | < |
| > myContract | > myContract | ||
| { | { | ||
| 行 306: | 行 321: | ||
| デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | ||
| - | < | + | < |
| > miner.start() | > miner.start() | ||
| null | null | ||
| 行 353: | 行 368: | ||
| - | < | + | < |
| myContract.inc.sendTransaction({from: | myContract.inc.sendTransaction({from: | ||
| Error: authentication needed: password or unlock | Error: authentication needed: password or unlock | ||
| 行 375: | 行 390: | ||
| get でカウンターの値を参照する。 | get でカウンターの値を参照する。 | ||
| - | < | + | < |
| > myContract.get.call() | > myContract.get.call() | ||
| 0 | 0 | ||
| 行 392: | 行 407: | ||
| 確認してみましょう。 | 確認してみましょう。 | ||
| - | < | + | < |
| > eth.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
| 1.496999999999998206439e+21 | 1.496999999999998206439e+21 | ||
| </ | </ | ||
blockchain/ethereum構築ハンズオン_geth偏.1650430695.txt.gz · 最終更新: by dot
