blockchain:hardhatを使ったスマートコントラクト開発
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| blockchain:hardhatを使ったスマートコントラクト開発 [2022/05/11 04:38] – dot | blockchain:hardhatを使ったスマートコントラクト開発 [2022/05/24 06:42] (現在) – dot | ||
|---|---|---|---|
| 行 2: | 行 2: | ||
| ====== Hardhatを使ったスマートコントラクト開発 ====== | ====== Hardhatを使ったスマートコントラクト開発 ====== | ||
| + | ほぼ Hardhat オフィシャルの[[https:// | ||
| ===== 前提 ===== | ===== 前提 ===== | ||
| 行 65: | 行 66: | ||
| Mode | Mode | ||
| ---- | ---- | ||
| - | d----- | + | d----- |
| - | -a---- | + | d----- |
| - | -a---- | + | d----- |
| - | -a---- | + | d----- |
| + | -a---- | ||
| + | -a---- | ||
| + | -a---- | ||
| + | -a---- | ||
| + | -a---- | ||
| </ | </ | ||
| - | Hardhat | + | * contracts: スマートコントラクトのソースコードを格納するディレクトリ |
| - | + | * サンプルの「Greeter.sol」が既に格納されています。 | |
| - | hardhat.config.js | + | * scripts: スマートコントラクトを ethereum ブロックチェーンにデプロイするためのスクリプトを格納するディレクトリ(他の目的のスクリプトが格納されることもあるかもしれません。) |
| - | + | * サンプルの「Greeter」スマートコントラクトをデプロイする sample-script.js | |
| - | <code JavaScript> | + | * test: テストプログラムを格納するディレクトリ |
| - | /** | + | * サンプルの「Greeter」スマートコントラクトをテストする sample-test.js |
| - | * @type import(' | + | * hardhat.config.js: Hardhat の設定ファイル |
| - | */ | + | |
| - | module.exports = { | + | |
| - | solidity: " | + | |
| - | }; | + | |
| - | </ | + | |
| Hardhat のバージョンとコマンドの仕様を確認してみます。 | Hardhat のバージョンとコマンドの仕様を確認してみます。 | ||
| 行 118: | 行 119: | ||
| To get help for a specific task run: npx hardhat help [task] | To get help for a specific task run: npx hardhat help [task] | ||
| + | </ | ||
| + | |||
| + | ===== コンパイル ===== | ||
| + | |||
| + | Hardhat セットアップ時に自動的に作成されている contracts/ | ||
| + | |||
| + | <code PowerShell> | ||
| + | hardhat_project> | ||
| + | </ | ||
| + | |||
| + | ===== テスト ===== | ||
| + | |||
| + | Hardhat セットアップ時に自動的に作成されている test/ | ||
| + | |||
| + | <code PowerShell> | ||
| + | hardhat_project> | ||
| + | |||
| + | |||
| + | Greeter | ||
| + | Deploying a Greeter with greeting: Hello, world! | ||
| + | Changing greeting from ' | ||
| + | ✔ Should return the new greeting once it's changed (1328ms) | ||
| + | |||
| + | |||
| + | 1 passing (1s) | ||
| + | </ | ||
| + | |||
| + | ===== node の起動 ===== | ||
| + | |||
| + | Hardhat を Ganache や ganache-cli のように ethereum ブロックチェーン(node)を起動することができます。 | ||
| + | ethereum ブロックチェーンにスマートコントラクトをデプロイし、Hardhat 外部からも連携ができるように、ethereum ブロックチェーンを起動します。 | ||
| + | |||
| + | 新たなターミナル(PowerShell等)を起動し、以下のコマンドで node を起動してください。 | ||
| + | |||
| + | <code PowerShell> | ||
| + | hardhat_project> | ||
| + | </ | ||
| + | |||
| + | Hardhat の node には固定で以下のアカウントが自動作成されます。これは毎回同じアドレスであるため、以下の情報も毎回利用できます。 | ||
| + | |||
| + | < | ||
| + | Accounts | ||
| + | ======== | ||
| + | |||
| + | WARNING: These accounts, and their private keys, are publicly known. | ||
| + | Any funds sent to them on Mainnet or any other live network WILL BE LOST. | ||
| + | |||
| + | Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH) | ||
| + | Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 | ||
| + | |||
| + | Account #1: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH) | ||
| + | Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d | ||
| + | |||
| + | Account #2: 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc (10000 ETH) | ||
| + | Private Key: 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a | ||
| + | |||
| + | Account #3: 0x90f79bf6eb2c4f870365e785982e1f101e93b906 (10000 ETH) | ||
| + | Private Key: 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 | ||
| + | |||
| + | Account #4: 0x15d34aaf54267db7d7c367839aaf71a00a2c6a65 (10000 ETH) | ||
| + | Private Key: 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a | ||
| + | |||
| + | Account #5: 0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc (10000 ETH) | ||
| + | Private Key: 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba | ||
| + | |||
| + | Account #6: 0x976ea74026e726554db657fa54763abd0c3a0aa9 (10000 ETH) | ||
| + | Private Key: 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e | ||
| + | |||
| + | Account #7: 0x14dc79964da2c08b23698b3d3cc7ca32193d9955 (10000 ETH) | ||
| + | Private Key: 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 | ||
| + | |||
| + | Account #8: 0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f (10000 ETH) | ||
| + | Private Key: 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 | ||
| + | |||
| + | Account #9: 0xa0ee7a142d267c1f36714e4a8f75612f20a79720 (10000 ETH) | ||
| + | Private Key: 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 | ||
| + | |||
| + | Account #10: 0xbcd4042de499d14e55001ccbb24a551f3b954096 (10000 ETH) | ||
| + | Private Key: 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 | ||
| + | |||
| + | Account #11: 0x71be63f3384f5fb98995898a86b02fb2426c5788 (10000 ETH) | ||
| + | Private Key: 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 | ||
| + | |||
| + | Account #12: 0xfabb0ac9d68b0b445fb7357272ff202c5651694a (10000 ETH) | ||
| + | Private Key: 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 | ||
| + | |||
| + | Account #13: 0x1cbd3b2770909d4e10f157cabc84c7264073c9ec (10000 ETH) | ||
| + | Private Key: 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd | ||
| + | |||
| + | Account #14: 0xdf3e18d64bc6a983f673ab319ccae4f1a57c7097 (10000 ETH) | ||
| + | Private Key: 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa | ||
| + | |||
| + | Account #15: 0xcd3b766ccdd6ae721141f452c550ca635964ce71 (10000 ETH) | ||
| + | Private Key: 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 | ||
| + | |||
| + | Account #16: 0x2546bcd3c84621e976d8185a91a922ae77ecec30 (10000 ETH) | ||
| + | Private Key: 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 | ||
| + | |||
| + | Account #17: 0xbda5747bfd65f08deb54cb465eb87d40e51b197e (10000 ETH) | ||
| + | Private Key: 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd | ||
| + | |||
| + | Account #18: 0xdd2fd4581271e230360230f9337d5c0430bf44c0 (10000 ETH) | ||
| + | Private Key: 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 | ||
| + | |||
| + | Account #19: 0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199 (10000 ETH) | ||
| + | Private Key: 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e | ||
| + | |||
| + | WARNING: These accounts, and their private keys, are publicly known. | ||
| + | Any funds sent to them on Mainnet or any other live network WILL BE LOST. | ||
| + | </ | ||
| + | |||
| + | ===== デプロイ ===== | ||
| + | |||
| + | Hardhat セットアップ時に自動的に作成されている scripts/ | ||
| + | |||
| + | 先ほど立ち上げた node にデプロイするために「--network localhost」オプションを指定します。 | ||
| + | |||
| + | <code PowerShell> | ||
| + | hardhat_project> | ||
| + | Deploying a Greeter with greeting: Hello, Hardhat! | ||
| + | Greeter deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3 | ||
| + | </ | ||
| + | |||
| + | 上記の場合だと「0x5FbDB2315678afecb367f032d93F642f64180aa3」が Greeter スマートコントラクトのアドレスですので、メモしておいてください。 | ||
| + | |||
| + | ===== コンソールでスマートコントラクトの実行 ===== | ||
| + | |||
| + | 「npx hardhat console」でコンソールが起動します。 | ||
| + | 先ほど立ち上げた node に接続するために「--network localhost」オプションを指定します。 | ||
| + | |||
| + | <code PowerShell> | ||
| + | hardhat_project> | ||
| + | Welcome to Node.js v16.13.1. | ||
| + | > const Greeter = await ethers.getContractAt(' | ||
| + | undefined | ||
| + | > await Greeter.greet(); | ||
| + | ' | ||
| + | > await Greeter.setGreeting(' | ||
| + | { | ||
| + | hash: ' | ||
| + | type: 2, | ||
| + | accessList: [], | ||
| + | blockHash: ' | ||
| + | blockNumber: | ||
| + | transactionIndex: | ||
| + | confirmations: | ||
| + | from: ' | ||
| + | gasPrice: BigNumber { _hex: ' | ||
| + | maxPriorityFeePerGas: | ||
| + | maxFeePerGas: | ||
| + | gasLimit: BigNumber { _hex: ' | ||
| + | to: ' | ||
| + | value: BigNumber { _hex: ' | ||
| + | nonce: 1, | ||
| + | data: ' | ||
| + | r: ' | ||
| + | s: ' | ||
| + | v: 0, | ||
| + | creates: null, | ||
| + | chainId: 31337, | ||
| + | wait: [Function (anonymous)] | ||
| + | } | ||
| + | > await Greeter.greet(); | ||
| + | ' | ||
| + | </ | ||
| + | |||
| + | ===== 別の node に接続する ===== | ||
| + | |||
| + | hardhat.config.js に ethereum ブロックチェーン(node) の設定を追加することで、メインネットや Ropsten や Ganache の node に接続することができます。 | ||
| + | |||
| + | 以下、Ganache を設定して console 接続する例です。 | ||
| + | |||
| + | hardhat.config.js の module.exports に以下を追加。 | ||
| + | <code JavaScript> | ||
| + | module.exports = { | ||
| + | solidity: " | ||
| + | networks: { | ||
| + | ganache: { | ||
| + | url: " | ||
| + | } | ||
| + | }, | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | ganache にコンソール接続 | ||
| + | <code PowerShell> | ||
| + | hardhat_project> | ||
| + | Welcome to Node.js v16.13.1. | ||
| + | Type " | ||
| + | > const signers = await ethers.getSigners(); | ||
| + | undefined | ||
| + | > signers[0].address | ||
| + | ' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== hardhat console でアカウントの切り替え ===== | ||
| + | |||
| + | TODO: もっと良い方法があるはず! | ||
| + | |||
| + | Hardhat はデフォルトでアカウント一覧の先頭のアカウントが使用される。 | ||
| + | hardhat console でトランザクションが発生するような処理を行った場合、上記のアカウントが sender として使用されることになる。 | ||
| + | |||
| + | hardhat.config.js の network 設定で「アカウント一覧」を絞ることで「先頭のアカウント」を変更し、トランザクションの sender を変更する。 | ||
| + | |||
| + | <code PowerShell> | ||
| + | > code hardhat.config.js | ||
| + | </ | ||
| + | |||
| + | hardhat.confg.js の network 設定に以下を追記。 | ||
| + | |||
| + | <code JavaScript> | ||
| + | networks: { | ||
| + | localhost_account2: | ||
| + | url: ' | ||
| + | //from: ' | ||
| + | accounts: [ | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | }, | ||
| + | </ | ||
| + | |||
| + | hardhat console 使用時に以下のように「localhost_account2」を選択すれば、上記 accounts の先頭が sender として使用される。 | ||
| + | |||
| + | <code PowerShell> | ||
| + | > npx hardhat console --network localhost_account2 | ||
| </ | </ | ||
blockchain/hardhatを使ったスマートコントラクト開発.1652243889.txt.gz · 最終更新: by dot
