blockchain:ethereum構築ハンズオン_ganache編
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| blockchain:ethereum構築ハンズオン_ganache編 [2022/04/27 01:02] – [デプロイ] dot | blockchain:ethereum構築ハンズオン_ganache編 [2022/04/28 01:48] (現在) – dot | ||
|---|---|---|---|
| 行 8: | 行 8: | ||
| アプリケーションをインストールするだけで、すぐに ethereum ブロックチェーンを利用した開発が始められます。 | アプリケーションをインストールするだけで、すぐに ethereum ブロックチェーンを利用した開発が始められます。 | ||
| また、デフォルトで採掘が自動的に行われますので、必要なトランザクションは自動的に処理されます。 | また、デフォルトで採掘が自動的に行われますので、必要なトランザクションは自動的に処理されます。 | ||
| + | 権限についてもデフォルトでゆるく設定されており、アカウントのアンロック(eth.unlockAccount)しなくても送金やガス代の支払いができるようになっています。 | ||
| ===== インストール ===== | ===== インストール ===== | ||
| 行 32: | 行 33: | ||
| {{: | {{: | ||
| - | また、一番上のアカウントの PRIVATE KEY を後ほど使用しますので、メモしておいてください。(下図参照) | + | 各アカウントの PRIVATE KEY は以下の手順で確認できます。 |
| {{: | {{: | ||
| 行 41: | 行 42: | ||
| 「起動」の手順で確認した「RPC SERVER URL」を使用して、以下のようにコンソール接続することができます。 | 「起動」の手順で確認した「RPC SERVER URL」を使用して、以下のようにコンソール接続することができます。 | ||
| - | < | + | < |
| geth --nodiscover attach http:// | geth --nodiscover attach http:// | ||
| </ | </ | ||
| - | |||
| - | ===== アカウントのアンロック ===== | ||
| - | |||
| - | ガス代(手数料)がかかるトランザクション処理や送金を行うためには、アカウントをアンロックする必要があります。 | ||
| - | 「起動」の手順で確認した「PRIVATE KEY」を使用して、以下のようにアカウントのアンロックができます。 | ||
| - | |||
| - | <code - geth> | ||
| - | > personal.unlockAccount(eth.accounts[0]) | ||
| - | Unlock account 0xd236df380900a967dcc8a229f6a27bd03c330c6d | ||
| - | Passphrase: | ||
| - | true | ||
| - | </ | ||
| - | |||
| - | 今後、必要に応じてアカウントアンロックを実施してください。 | ||
| ===== 送金 ===== | ===== 送金 ===== | ||
| 送金前 | 送金前 | ||
| - | < | + | < |
| > eth.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
| 100000000000000000000 | 100000000000000000000 | ||
| 行 70: | 行 57: | ||
| 送金 | 送金 | ||
| - | < | + | < |
| > eth.sendTransaction({from: | > eth.sendTransaction({from: | ||
| </ | </ | ||
| 送金後(eth.accounts[0] についてはガス代分も少なくなっている) | 送金後(eth.accounts[0] についてはガス代分も少なくなっている) | ||
| - | < | + | < |
| > eth.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
| 94999580000000000000 | 94999580000000000000 | ||
| 行 99: | 行 86: | ||
| 内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 | 内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 | ||
| - | < | + | < |
| // SPDX-License-Identifier: | // SPDX-License-Identifier: | ||
| pragma solidity ^0.8.13; | pragma solidity ^0.8.13; | ||
| 行 127: | 行 114: | ||
| スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | ||
| - | < | + | < |
| solc-windows.exe --abi --bin Counter.sol | solc-windows.exe --abi --bin Counter.sol | ||
| </ | </ | ||
| 行 145: | 行 132: | ||
| - | < | + | < |
| ======= Counter.sol: | ======= Counter.sol: | ||
| Binary: | Binary: | ||
| 行 157: | 行 144: | ||
| スマートコントラクトのデプロイは geth console 上で行います。 | スマートコントラクトのデプロイは geth console 上で行います。 | ||
| - | < | + | < |
| geth --datadir private_network --nodiscover console | geth --datadir private_network --nodiscover console | ||
| > var bin = " | > var bin = " | ||
| 行 168: | 行 155: | ||
| > var contract = eth.contract(abi) | > var contract = eth.contract(abi) | ||
| undefined | undefined | ||
| - | > var myContract = contract.new({ from: eth.accounts[0], | ||
| - | Error: authentication needed: password or unlock | ||
| - | at web3.js: | ||
| - | at send (web3.js: | ||
| - | at web3.js: | ||
| - | at < | ||
| - | > personal.unlockAccount(eth.accounts[0]) | ||
| - | Unlock account 0xd78f9a659a9a7b50689eb2bd4c4aebdc9c2e5312 | ||
| - | Passphrase: | ||
| - | true | ||
| > var myContract = contract.new({ from: eth.accounts[0], | > var myContract = contract.new({ from: eth.accounts[0], | ||
| undefined | undefined | ||
| 行 187: | 行 164: | ||
| デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | ||
| - | < | + | < |
| > miner.start() | > miner.start() | ||
| null | null | ||
| 行 234: | 行 211: | ||
| - | < | + | < |
| - | myContract.inc.sendTransaction({from: | + | |
| - | Error: authentication needed: password or unlock | + | |
| - | at web3.js: | + | |
| - | at send (web3.js: | + | |
| - | at web3.js: | + | |
| - | at < | + | |
| - | + | ||
| - | > personal.unlockAccount(eth.accounts[0]) | + | |
| - | Unlock account 0xd78f9a659a9a7b50689eb2bd4c4aebdc9c2e5312 | + | |
| - | Passphrase: | + | |
| - | true | + | |
| > myContract.inc.sendTransaction({from: | > myContract.inc.sendTransaction({from: | ||
| " | " | ||
| 行 256: | 行 222: | ||
| get でカウンターの値を参照する。 | get でカウンターの値を参照する。 | ||
| - | < | + | < |
| > myContract.get.call() | > myContract.get.call() | ||
| 0 | 0 | ||
| 行 271: | 行 237: | ||
| 確認してみましょう。 | 確認してみましょう。 | ||
| - | < | + | < |
| > eth.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
| 1.496999999999998206439e+21 | 1.496999999999998206439e+21 | ||
blockchain/ethereum構築ハンズオン_ganache編.1651021343.txt.gz · 最終更新: by dot
