Hardhat을 사용하여 테스트넷에 스마트 계약 배포 및 검증

다음 게시물에서는 Hardhat을 사용하여 Rinkeby 테스트넷에 스마트 계약을 배포하고 확인하는 방법을 배웁니다.

참고: Rinkeby는 곧 사용되지 않을 예정입니다. 자세한 내용을 알고 싶다면 here을 클릭하세요. 어쨌든 이 예제는 Goerli, Kovan 등과 같은 다른 테스트넷에서 작동할 수 있습니다.

안전모는 무엇입니까?



공식documentation에 따르면 Hardhat은 Ethereum 소프트웨어용 개발 환경입니다. 스마트 계약 및 dApp을 편집, 컴파일, 디버깅 및 배포하기 위한 다양한 구성 요소로 구성되며, 모두 함께 작동하여 완전한 개발 환경을 만듭니다.

전제 조건



  • Node.js 설치됨
  • Metamask Wallet
  • Infura API Key
  • Etherscan Account
  • 지갑에 Rinkeby 자금을 보관하세요. 필요한 경우 사용할 수 있습니다faucet.

  • 프로젝트 생성


  • 터미널을 열고 다음 명령을 입력합니다
  • .
  • mkdir 안전모 자습서
  • cd 안전모 튜토리얼
  • npm init --y
  • 선호하는 코드 편집기로 프로젝트 열기

  • 종속성


  • 도텐브이
  • 안전모
  • @nomiclabs/hardhat-etherscan
  • @nomicfoundation/hardhat-toolbox

  • 종속성을 설치하려면 프로젝트 폴더로 이동하여 터미널을 열고 다음 명령을 입력하십시오.

    npm i dotenv
    



    npm i hardhat --save-dev hardhat @nomiclabs/hardhat-etherscan @nomicfoundation/hardhat-toolbox
    


    이제 다음 명령을 실행합니다.

    npx hardhat
    


    이 예제에서는 JavaScript 옵션을 사용할 수 있습니다.



    프로젝트 파일 구조




    hardhat-tutorial/
    ├── contracts/
    ├── node_modules/
    ├── scripts/
    ├── test/
    ├── .env
    ├── hardhat.config.js
    └── package.json
    


    목차


  • Config our .env file
  • Set Up hardhat.config.js
  • Creating the contract to deploy
  • Deploy Script
  • Deploying and Verifying
  • Conclusion



  • 1. .env 파일 구성

    Let's create a .env file in case you haven't already and open it.

    we will need to set the following variables:

    INFURA_API_KEY = your infura api key
    METAMASK_ACCOUNT = your metamask account
    ETHERSCAN_API_KEY = your etherscan api key
    

    In case you don't know how to get your Metamask account, just follow the following steps:

    1. Open your metamask browser extension, click on the 3 dots

  • 계정 세부 정보를 클릭합니다
  • .


  • 개인 키 내보내기를 클릭합니다.


  • 마지막으로 비밀번호를 입력합니다
  • .



    2. hardhat.config.js 설정

    First we need to set up the configuration file, so let's open hardhat.config.js , you will see something similar to this

    require("@nomicfoundation/hardhat-toolbox");
    require("@nomiclabs/hardhat-etherscan");
    
    module.exports = {
      solidity: "0.8.9",
    };
    

    We need to specify the networks we want to use, for this example we are only going to use rinkeby.

    require("@nomicfoundation/hardhat-toolbox");
    require("@nomiclabs/hardhat-etherscan");
    //dotenv
    require("dotenv").config();
    
    module.exports = {
      solidity: "0.8.9",
      networks: {
        rinkeby: {
          url: `https://rinkeby.infura.io/v3/${process.env.INFURA_API_KEY}`,
          accounts: [`${process.env.METAMASK_ACCOUNT}`]
        }
      },
      etherscan: {
        apiKey: process.env.ETHERSCAN_API_KEY
      }
    };
    

    3. 배포할 컨트랙트 생성

    For this example will be using a Dummiy contract called Greeter.sol, so let's open it.

    //SPDX-License-Identifier: Unlicense
    pragma solidity ^0.8.0;
    
      import "hardhat/console.sol";
    
      contract Greeter {
          string public greeting = 'Hello World';
    
          function setGreeting(string memory _greeting) public {
              console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
              greeting = _greeting;
          }
      }
    

    4. 스크립트 배포

    Go to scripts folder and open deploy.js, delete everything inside.

    1. First let's require ethers from hardhat
    2. Then we will create a function that will be executed when the script is executed
    3. we will use ethers.getSigners() to get a object with our ethereum account information
    4. then we with getContractFactory() we are going to abstract the contract information, in this case of Greeter.sol
    5. we will deploy that information with deploy().
    6. Finally we wait for the contract to be deployed and get the address of the contract.
    const { ethers } = require("hardhat");
    
    async function main(){
      const [deployer] = await ethers.getSigners();
    
      console.log("Deploying contracts with the account: ", deployer.address);
    
      const DummyContract = await ethers.getContractFactory("Greeter");
      const dummyContract = await DummyContract.deploy();
    
      await dummyContract.deployed();
    
      console.log("DummyContract deployed to: ", dummyContract.address);
    }
    
    main()
      .then(() => process.exit(0))
      .catch(error => {
        console.error(error);
        process.exit(1);
      })
    

    5. 배포 및 확인

    Finally we will execute the following commands to deploy and verify our contract.

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

    you will get something similar to this:

    DummyContract deployed to:  0x5c2E1BD82EDC0695cbA5AE64dA7aE34f073E167C
    

    then to verify the contract type the following command:

    the address used in the next command will be the value that you previously get from the console.



    npx hardhat verify --network rinkeby 0x5c2E1BD82EDC0695cbA5AE64dA7aE34f07
    


    마지막으로 다음과 유사한 메시지를 받게 됩니다.

    Successfully verified contract Greeter on Etherscan.
    https://rinkeby.etherscan.io/address/0x5c2E1BD82EDC0695cbA5AE64dA7aE34f073E167C#code
    


    이제 해당 링크를 방문하면 계약서와 코드를 볼 수 있습니다.



    6. 결론

    We learned how to deploy and verify a smart contract using Hardhat.

    I really hope you have been able to follow the post without any trouble, otherwise i apologize, please leave me your doubts or comments.

    If you're looking for a blockchain dev position, or more content related, you should check codenjobs

    You can also visit the spanish version of this post

    You can contact me by telegram if you need to hire a Full Stack developer.

    Discord Appu#9136에서 나를 추가할 수도 있습니다.

    시간 내 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기