ユーザ用ツール

サイト用ツール


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

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
blockchain:ethereum構築ハンズオン_geth偏 [2022/04/20 04:46] dotblockchain:ethereum構築ハンズオン_geth偏 [2022/04/28 01:46] (現在) dot
行 1: 行 1:
 ====== ethereumブロックチェーンの構築(geth偏) ====== ====== ethereumブロックチェーンの構築(geth偏) ======
  
-プライベート型のethereumブロックチェーンを構築し、採掘、スマートコントラクトを実行するハンズオンです。+プライベート型のethereumブロックチェーンを構築し、採掘、送金、スマートコントラクトを実行するハンズオンです。
  
 ===== インストール ===== ===== インストール =====
行 23: 行 23:
 以下のファイルを作成してください。 以下のファイルを作成してください。
  
-<code genesis.json>+<code JSON genesis.json>
 { {
   "config": {   "config": {
行 61: 行 61:
 PowerShell やコマンドラインから以下のようにコマンドを実行することで、ブロックチェーンを構築します。 PowerShell やコマンドラインから以下のようにコマンドを実行することで、ブロックチェーンを構築します。
  
-(先程「インストール」した geth にパスを通すか、geth をフルパスで実行してください。+(先程「インストール」した geth にパスを通すか、geth をフルパスで実行してください。)
  
-<code - sh+<code PowerShell
-geth init --datadir ./private_network genesis.json+geth --datadir private_network init genesis.json
 </code> </code>
  
 コマンドの意味 コマンドの意味
   * geth: コマンドです   * geth: コマンドです
-  * init: 初期化を意味します 
   * --datadir: 各種必要なファイルを保存するためのディレクトリを指定します   * --datadir: 各種必要なファイルを保存するためのディレクトリを指定します
 +  * init: 初期化を意味します
   * genesis.json: 1番最初のブロックを定義した genesis ファイルを指定しています   * genesis.json: 1番最初のブロックを定義した genesis ファイルを指定しています
  
 ===== geth console でブロックチェーンにコンソール接続する ===== ===== geth console でブロックチェーンにコンソール接続する =====
  
-<code - sh+<code PowerShell
-geth console+geth --datadir private_network --nodiscover console
 </code> </code>
 +
 +コマンドの意味
 +  * geth: コマンドです
 +  * --datadir: 各種必要なファイルを保存するためのディレクトリを指定します
 +  * --nodiscover: 「他のノードを探さない」を意味します。ブロックチェーンはP2Pで他のノードと接続しあうネットワークですが、今回はプライベート型で構築しているため、このオプションを指定しています。
 +  * console: geth console つまりコマンドラインを起動します
 +
 +上記のように「geth ... console」でconsole接続すると「ブロックチェーンの起動」と「console接続」が同時に行われます。そのため、コマンドを打つ度にブロックチェーンのログがconsoleに出力され、大変操作しづらくなります。おすすめの方法は、以下「ブロックチェーンの起動」と「attachでconsole接続」分けて行う方法です。
 +
 +[[blockchain:ethereum:start_attach_console|ブロックチェーンの起動とattachを使用したconsole接続]]
 +
  
 ===== EOA(Externally Owned Account)の作成 ===== ===== EOA(Externally Owned Account)の作成 =====
行 85: 行 96:
 現在、アカウントが無いことを確認する。 現在、アカウントが無いことを確認する。
  
-<code - sh>+<code PowerShell>
 > eth.accounts > eth.accounts
 [] []
行 92: 行 103:
 アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します) アカウント2つ作成してみる。(後に送金と入金を確認するため2つ作成します)
  
-<code - sh>+<code PowerShell>
 > personal.newAccount("password01") > personal.newAccount("password01")
 "0xd236df380900a967dcc8a229f6a27bd03c330c6d" "0xd236df380900a967dcc8a229f6a27bd03c330c6d"
行 107: 行 118:
 現在の coinbase を確認する。 現在の coinbase を確認する。
  
-<code - sh>+<code PowerShell>
 > eth.coinbase > eth.coinbase
 "0xd236df380900a967dcc8a229f6a27bd03c330c6d" "0xd236df380900a967dcc8a229f6a27bd03c330c6d"
行 114: 行 125:
 今後、採掘を行うと上記で表示された coinbase アカウントにコインが付加されます。 今後、採掘を行うと上記で表示された coinbase アカウントにコインが付加されます。
  
-===== Mining(採掘)の実行 =====+===== Mining(採掘)の実行と停止 =====
  
-<code - sh>+__実行__ 
 + 
 +<code PowerShell>
 > miner.start() > miner.start()
 null null
行 129: 行 142:
 > eth.getBalance(eth.accounts[1]) > eth.getBalance(eth.accounts[1])
 0 0
 +
 +ETH で残高を表示
 +> web3.fromWei(eth.getBalance(eth.accounts[0]), 'ether')
 +210
 </code> </code>
  
 +__停止__
 +
 +<code PowerShell>
 +> miner.stop()
 +</code>
  
 ===== 送金 ===== ===== 送金 =====
  
-<code - sh>+<code PowerShell>
 > personal.unlockAccount(eth.accounts[0]) > personal.unlockAccount(eth.accounts[0])
 Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d
行 142: 行 164:
 "0xe5c0307ca99f89dfa135a6609d0a01a48b62855ceb3a34a8e36c66d1d7a3d893" "0xe5c0307ca99f89dfa135a6609d0a01a48b62855ceb3a34a8e36c66d1d7a3d893"
 </code> </code>
- 
-===== スマートコントラクト ===== 
  
 上記でトランザクションを送信している。 上記でトランザクションを送信している。
行 150: 行 170:
  
  
-<code - sh>+<code PowerShell>
 > miner.start() > miner.start()
 null null
行 158: 行 178:
 null null
 </code> </code>
 +
 +===== スマートコントラクト =====
  
 ==== コンパイラ(solc)のインストール ==== ==== コンパイラ(solc)のインストール ====
行 168: 行 190:
 ==== 実装 ==== ==== 実装 ====
  
-<code Counter.sol>+内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 
 + 
 +<code JavaScript Counter.sol>
 // SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.18;+pragma solidity ^0.8.13;
  
 contract Counter { contract Counter {
行 196: 行 220:
 スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。
  
-<code - sh>+<code PowerShell>
 solc-windows.exe --abi --bin Counter.sol solc-windows.exe --abi --bin Counter.sol
 </code> </code>
行 214: 行 238:
  
  
-<code コンパイル実行結果>+<code PowerShell コンパイル実行結果>
 ======= Counter.sol:Counter ======= ======= Counter.sol:Counter =======
 Binary: Binary:
行 227: 行 251:
  
  
-<code - sh+<code PowerShell
-geth console+geth --datadir private_network --nodiscover console
 > var bin = "0x608060405234801561001057600080fd5b50610209806100206000396000f3fe608060405234801561001057600080fd5 > var bin = "0x608060405234801561001057600080fd5b50610209806100206000396000f3fe608060405234801561001057600080fd5
 b506004361061004c5760003560e01c806306661abd14610051578063371303c01461006f5780636d4ce63c14610079578063b3bcfa82146 b506004361061004c5760003560e01c806306661abd14610051578063371303c01461006f5780636d4ce63c14610079578063b3bcfa82146
行 260: 行 284:
 デプロイ処理が完了すると「Contract Account」がaddressに付与されます。 デプロイ処理が完了すると「Contract Account」がaddressに付与されます。
  
-<code - sh>+<code PowerShell>
 > myContract > myContract
 { {
行 297: 行 321:
 デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。
  
-<code - sh>+<code PowerShell>
 > miner.start() > miner.start()
 null null
行 339: 行 363:
  
 ==== 実行 ==== ==== 実行 ====
 +
 +スマートコントラクトを呼び出してカウンターの値を1増やしてみます。
 +この処理はトランザクションを伴うため、採掘時に実行されます。
 +
 +
 +<code PowerShell>
 +myContract.inc.sendTransaction({from:eth.accounts[0]})
 +Error: authentication needed: password or unlock
 +        at web3.js:6365:37(47)
 +        at send (web3.js:5099:62(35))
 +        at web3.js:4155:41(53)
 +        at <eval>:1:35(9)
 +
 +> personal.unlockAccount(eth.accounts[0])
 +Unlock account 0xd78f9a659a9a7b50689eb2bd4c4aebdc9c2e5312
 +Passphrase:
 +true
 +> myContract.inc.sendTransaction({from:eth.accounts[0]})
 +"0xd254b4b2e830350da787720e9b037e1e27cc11ad93452ff79345e88d716b9cf2"
 +</code>
 +
 +カウンターの値を参照してみましょう。
 +
 +採掘前後で確認してみます。
 +
 +get でカウンターの値を参照する。
 +
 +<code PowerShell>
 +> myContract.get.call()
 +0
 +> miner.start()
 +null
 +> myContract.get.call()
 +1
 +> miner.stop()
 +</code>
  
 ==== ガス代(手数料)の確認 ==== ==== ガス代(手数料)の確認 ====
 +
 +トランザクションの実行にはガス代と呼ばれる手数料がかかります。
 +そのため、トランザクションを発行したaccount[0]は想定よりも少しだけコインが減っているはずです。
 +
 +確認してみましょう。
 +
 +<code PowerShell>
 +> eth.getBalance(eth.accounts[0])
 +1.496999999999998206439e+21
 +</code>
  
blockchain/ethereum構築ハンズオン_geth偏.1650430008.txt.gz · 最終更新: 2022/04/20 04:46 by dot