blockchain:ethereum構築ハンズオン_ganache編
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
blockchain:ethereum構築ハンズオン_ganache編 [2022/04/27 00:23] – [送金] dot | blockchain:ethereum構築ハンズオン_ganache編 [2022/04/28 01:48] (現在) – dot | ||
---|---|---|---|
行 1: | 行 1: | ||
====== ethereumブロックチェーンの構築(Ganache編) ====== | ====== ethereumブロックチェーンの構築(Ganache編) ====== | ||
- | Ganacheを使用してethereumブロックチェーンを構築し、gethでブロックチェーンに接続して採掘、送金、スマートコントラクトを実行するハンズオンです。 | + | Ganacheを使用してethereumブロックチェーンを構築し、gethでブロックチェーンに接続して送金、スマートコントラクトを実行するハンズオンです。 |
===== Ganacheとは? | ===== Ganacheとは? | ||
行 8: | 行 8: | ||
アプリケーションをインストールするだけで、すぐに ethereum ブロックチェーンを利用した開発が始められます。 | アプリケーションをインストールするだけで、すぐに ethereum ブロックチェーンを利用した開発が始められます。 | ||
また、デフォルトで採掘が自動的に行われますので、必要なトランザクションは自動的に処理されます。 | また、デフォルトで採掘が自動的に行われますので、必要なトランザクションは自動的に処理されます。 | ||
+ | 権限についてもデフォルトでゆるく設定されており、アカウントのアンロック(eth.unlockAccount)しなくても送金やガス代の支払いができるようになっています。 | ||
===== インストール ===== | ===== インストール ===== | ||
行 28: | 行 29: | ||
{{: | {{: | ||
- | 後ほど、この Ganache の ethereum ブロックチェーンに geth でアクセスする際、このウィンドウにある「RPC SERVER URL」のを使用します。(下図参照) | + | 後ほど、この Ganache の ethereum ブロックチェーンに geth でアクセスする際、このウィンドウにある「RPC SERVER URL」を使用します。(下図参照) |
{{: | {{: | ||
- | また、一番上のアカウントの 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.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
94999580000000000000 | 94999580000000000000 | ||
行 81: | 行 68: | ||
105000000000000000000 | 105000000000000000000 | ||
</ | </ | ||
+ | |||
+ | Ganache でも残金やトランザクションが確認できる。 | ||
+ | |||
+ | {{: | ||
===== スマートコントラクト ===== | ===== スマートコントラクト ===== | ||
行 95: | 行 86: | ||
内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 | 内部にカウンターをもち、カウンターの値を取得する(get)と、カウンターの値を1増やす(inc)するスマートコントラクトを実装します。 | ||
- | < | + | < |
// SPDX-License-Identifier: | // SPDX-License-Identifier: | ||
pragma solidity ^0.8.13; | pragma solidity ^0.8.13; | ||
行 123: | 行 114: | ||
スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | スマートコントラクトのコンパイルはコマンドラインから solc を使用して実行します。 | ||
- | < | + | < |
solc-windows.exe --abi --bin Counter.sol | solc-windows.exe --abi --bin Counter.sol | ||
</ | </ | ||
行 141: | 行 132: | ||
- | < | + | < |
======= Counter.sol: | ======= Counter.sol: | ||
Binary: | Binary: | ||
行 153: | 行 144: | ||
スマートコントラクトのデプロイは geth console 上で行います。 | スマートコントラクトのデプロイは geth console 上で行います。 | ||
- | < | + | < |
geth --datadir private_network --nodiscover console | geth --datadir private_network --nodiscover console | ||
> var bin = " | > var bin = " | ||
行 164: | 行 155: | ||
> var contract = eth.contract(abi) | > var contract = eth.contract(abi) | ||
undefined | undefined | ||
- | > var myContract = contract.new({ from: eth.accounts[0], | + | > 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], data: bin}) | + | |
undefined | undefined | ||
</ | </ | ||
行 183: | 行 164: | ||
デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | デプロイ処理が完了しているため「Contract Account」がaddressに付与されています。 | ||
- | < | + | < |
> miner.start() | > miner.start() | ||
null | null | ||
行 230: | 行 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: | ||
" | " | ||
行 252: | 行 222: | ||
get でカウンターの値を参照する。 | get でカウンターの値を参照する。 | ||
- | < | + | < |
> myContract.get.call() | > myContract.get.call() | ||
0 | 0 | ||
行 267: | 行 237: | ||
確認してみましょう。 | 確認してみましょう。 | ||
- | < | + | < |
> eth.getBalance(eth.accounts[0]) | > eth.getBalance(eth.accounts[0]) | ||
1.496999999999998206439e+21 | 1.496999999999998206439e+21 |
blockchain/ethereum構築ハンズオン_ganache編.1651019017.txt.gz · 最終更新: 2022/04/27 00:23 by dot