hardhat 실습

유지민·2022년 12월 21일
0

hardhat

목록 보기
1/3

hardhat 실습

truffle과 비슷하다는 hardhat 간단히 실습

hardhat은 verify를 자체적으로 할수있는 특징이 있다.
베포나 관리면에서는 Remix보다 truffle, hardhat을 많이 쓴다고 한다.

hardhat 설치하기

npm init

npm install --save-dev hardhat

npx hardhat
// Create an empty ~~~ 선택 ->Create an empty hardhat.config.js

npm install --save-dev @nomicfoundation/hardhat-toolbox

후 solidity 파일을 만든다.
간단한 테스트 이므로

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

contract Simple {
    uint a;
    
    function getA() public view returns(uint) {
        return a;
    }

    function setA(uint _a) public {
        a = _a;
    }
}

정도로만 만든다.

npx hardhat compile

문제 없는지 컴파일 후

베포용 js 파일을 만든다.
Scripts폴더흘 만든후 그 안에 파일이름은 deploy.js

const hre = require("hardhat");

async function main() {
    //contract 변수로 설정
    const Contract_A = await hre.ethers.getContractFactory("Simple");
    //contract를 deploy하고
    const contract_a = await Contract_A.deploy();

    await contract_a.deployed();
    console.log("Address : ", contract_a.address);
}

main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
});

후 먼저 loacl에서 되는지 확인해보겠다.

hardhat.config.js에

require("@nomiclabs/hardhat-ethers");

를 추가 후

split Terminal로 추가한 후 오른쪽 터미널에서

npx 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.

이렇게 20개의 샘플 지갑이 나온다.

npx hardhat run --network localhost scripts/deploy.js

로 local에 베포하면

//왼쪽 터미널
Address : 0x5FbDB2315678afecb367f032d93F642f64180aa3

//오른쪽 터미널
eth_chainId
eth_accounts
eth_blockNumber
eth_chainId (2)                                   
eth_estimateGas
eth_getBlockByNumber
eth_gasPrice
eth_sendTransaction
  Contract deployment: Simple
  Contract address:    0x5fbdb2315678afecb367f032d93f642f64180aa3
  Transaction:         0x7ef719ce80f69ca84bb5cd3e396909684e3e04281532800321210b5671327e43
  From:                0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
  Value:               0 ETH
  Gas used:            125653 of 125653
  Block #1:            0x8be46f7097650565bd122240c8dd569634317497a8407ee7dc73da5e83db33ec

eth_chainId
eth_getTransactionByHash
eth_chainId
eth_getTransactionReceipt

정상적으로 실행된걸 볼수 있다.

이제 local 말고 Goelri 테스트넷에서 베포 해보자.

두가지를 준비한다.
1. infura goerli api key 전체 주소
2. goerli testnet 용 1번 지갑 개인키

hardhat.config.js에

/** @type import('hardhat/config').HardhatUserConfig */
require("@nomiclabs/hardhat-ethers");

const PVK = "여러분 개인키"

module.exports = {
  solidity: "0.8.17",
  networks : {
    goerli : {
      url : `https://goerli.infura.io/v3/여러분 api 키`,
      accounts : [PVK],
    }
  }
};

를 추가.

베포 명령어인

npx hardhat run --network goerli scripts/deploy.js

로 실행 후 기다리면 결과가 나와야하는데... 이 날 Goerli가 이상한 탓인지 나포함 다수가 실행이 안되고 멈춰있었다.. 이더스캔에도 따로 거래내역이 없는걸보면 실행이 안된것같은데 내일 다시 베포해보자

profile
개발 취준생

0개의 댓글