blockchain:ethereum構築ハンズオン_geth偏
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
blockchain:ethereum構築ハンズオン_geth偏 [2022/04/21 00:17] – 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 --datadir private_network init genesis.json | geth --datadir private_network init genesis.json | ||
</ | </ | ||
行 75: | 行 75: | ||
===== geth console でブロックチェーンにコンソール接続する ===== | ===== geth console でブロックチェーンにコンソール接続する ===== | ||
- | < | + | < |
geth --datadir private_network --nodiscover console | geth --datadir private_network --nodiscover console | ||
</ | </ | ||
行 84: | 行 84: | ||
* --nodiscover: | * --nodiscover: | ||
* console: geth console つまりコマンドラインを起動します | * console: geth console つまりコマンドラインを起動します | ||
+ | |||
+ | 上記のように「geth ... console」でconsole接続すると「ブロックチェーンの起動」と「console接続」が同時に行われます。そのため、コマンドを打つ度にブロックチェーンのログがconsoleに出力され、大変操作しづらくなります。おすすめの方法は、以下「ブロックチェーンの起動」と「attachでconsole接続」分けて行う方法です。 | ||
+ | |||
+ | [[blockchain: | ||
行 92: | 行 96: | ||
現在、アカウントが無いことを確認する。 | 現在、アカウントが無いことを確認する。 | ||
- | < | + | < |
> eth.accounts | > eth.accounts | ||
[] | [] | ||
行 99: | 行 103: | ||
アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します) | アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します) | ||
- | < | + | < |
> personal.newAccount(" | > personal.newAccount(" | ||
" | " | ||
行 114: | 行 118: | ||
現在の coinbase を確認する。 | 現在の coinbase を確認する。 | ||
- | < | + | < |
> eth.coinbase | > eth.coinbase | ||
" | " | ||
行 125: | 行 129: | ||
__実行__ | __実行__ | ||
- | < | + | < |
> miner.start() | > miner.start() | ||
null | null | ||
行 138: | 行 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() | ||
</ | </ | ||
行 148: | 行 156: | ||
===== 送金 ===== | ===== 送金 ===== | ||
- | < | + | < |
> personal.unlockAccount(eth.accounts[0]) | > personal.unlockAccount(eth.accounts[0]) | ||
Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d | Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d | ||
行 156: | 行 164: | ||
" | " | ||
</ | </ | ||
- | |||
- | ===== スマートコントラクト ===== | ||
上記でトランザクションを送信している。 | 上記でトランザクションを送信している。 | ||
行 164: | 行 170: | ||
- | < | + | < |
> miner.start() | > miner.start() | ||
null | null | ||
行 172: | 行 178: | ||
null | null | ||
</ | </ | ||
+ | |||
+ | ===== スマートコントラクト ===== | ||
==== コンパイラ(solc)のインストール ==== | ==== コンパイラ(solc)のインストール ==== | ||
行 184: | 行 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 { | ||
行 212: | 行 220: | ||
スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | ||
- | < | + | < |
solc-windows.exe --abi --bin Counter.sol | solc-windows.exe --abi --bin Counter.sol | ||
</ | </ | ||
行 230: | 行 238: | ||
- | < | + | < |
======= Counter.sol: | ======= Counter.sol: | ||
Binary: | Binary: | ||
行 243: | 行 251: | ||
- | < | + | < |
geth --datadir private_network --nodiscover console | geth --datadir private_network --nodiscover console | ||
> var bin = " | > var bin = " | ||
行 276: | 行 284: | ||
デプロイ処理が完了すると「Contract Account」がaddressに付与されます。 | デプロイ処理が完了すると「Contract Account」がaddressに付与されます。 | ||
- | < | + | < |
> myContract | > myContract | ||
{ | { | ||
行 313: | 行 321: | ||
デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | ||
- | < | + | < |
> miner.start() | > miner.start() | ||
null | null | ||
行 360: | 行 368: | ||
- | < | + | < |
myContract.inc.sendTransaction({from: | myContract.inc.sendTransaction({from: | ||
Error: authentication needed: password or unlock | Error: authentication needed: password or unlock | ||
行 382: | 行 390: | ||
get でカウンターの値を参照する。 | get でカウンターの値を参照する。 | ||
- | < | + | < |
> myContract.get.call() | > myContract.get.call() | ||
0 | 0 | ||
行 399: | 行 407: | ||
確認してみましょう。 | 確認してみましょう。 | ||
- | < | + | < |
> eth.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
1.496999999999998206439e+21 | 1.496999999999998206439e+21 | ||
</ | </ | ||
blockchain/ethereum構築ハンズオン_geth偏.1650500264.txt.gz · 最終更新: 2022/04/21 00:17 by dot