Tutorials, for Developer

Klaytnscope에서 Hardhat을 이용하여 컨트랙트 확인하기

개요

Klaytnscope를 사용하면 Klaytn 블록체인의 네트워크 상태와 통계를 모니터링하고 블록과 트랜잭션을 프로파일링하여 데이터를 찾을 수 있습니다. 일반적으로 Klaytn 네트워크에 배포된 스마트 컨트랙트의 소스 코드를 공개하고 검증할 수 있도록 하려는 경우, Klaytnscope에서 컨트랙트를 검증하는 것이 좋습니다. 이는 투명성과 신뢰성을 보장하기 위해 사용자 자금을 처리하거나 중요한 기능을 실행하는 컨트랙트의 경우 특히 중요합니다. Klaytnscope에서 컨트랙트를 검증하는 것이 도움이 되는 몇 가지 일반적인 시나리오는 다음과 같습니다.

1. 토큰 컨트랙트: KIP7/ERC20, KIP17/ERC721 또는 기타 토큰 표준 컨트랙트를 배포한 경우, Klaytnscope에서 이를 검증하면 사용자가 컨트랙트의 코드를 검토하고 기능과 보안을 확인할 수 있습니다.

2. DeFi 컨트랙트: 랜딩(lending) 프로토콜, 탈중앙화 거래소(DEX), 이자 농사(yield farming)프로토콜, 유동성 풀 등 탈중앙화 금융(DeFi) 애플리케이션에서 사용되는 콘트랙트는 사용자에게 무결성과 보안을 보장하기 위해 검증되어야 합니다.

3. Crowdsale/ICO 컨트랙트: 토큰 판매 또는 초기 코인 공개(ICO)를 진행하는 경우, Klaytnscope에서 컨트랙트를 검증하면 잠재 투자자가 코드를 검사하고 토큰 배포 메커니즘을 이해할 수 있어 투명성을 확보할 수 있습니다.

4. 멀티시그 월렛: 여러 당사자가 거래를 승인해야 하는 다중 서명 지갑을 관리하는 컨트랙트는 그 거래 로직이 정확하고 자금이 안전한지 확인해야 합니다.

5. 거버넌스 컨트랙트: 제안이나 프로토콜 업그레이드에 대한 투표와 같이 온체인 거버넌스를 담당하는 컨트랙트는 거버넌스 프로세스의 투명성과 공정성을 입증하기 위해 검증되어야 합니다.

6. 에스크로 컨트랙트: 당사자 간의 거래 또는 계약에 대한 에스크로 서비스를 처리하는 컨트랙트는 약관이 의도한 대로 시행되는지 확인해야 합니다.

7. 게임 컨트랙트: 블록체인 기반 게임을 구동하는 스마트 컨트랙트는 게임 메커니즘의 공정성을 확인하고 잠재적인 악용을 방지하기 위해 검증되어야 합니다.

8. 사용자 자금 또는 민감한 운영을 처리하는 모든 컨트랙트: 일반적으로 사용자 자금을 처리하거나 중요한 작업을 수행하는 모든 컨트랙트는 사용자와 감사자와의 신뢰를 구축하기 위해 Klaytnscope에서 검증되어야 합니다.

Klaytnscope에서 컨트랙트를 검증하는 것은 특히 사용자가 기본 스마트 컨트랙트의 정확성과 보안에 의존하는 탈중앙화 애플리케이션에서 투명성과 신뢰성을 높이기 위한 좋은 습관입니다.

전제 조건

  • Node.js and its package manager, NPM, version 18. Verify Node.js is installed by running the following terminal command: node -v and npm -v
    Node.js 및 해당 패키지 관리자 NPM, 버전 18. 다음 터미널 명령을 실행하여 Node.js가 설치되었는지 확인합니다: node -v 및 npm -v

Hardhat으로 Klaytnscope 컨트랙트 검증하기

다음은 Baobab 네트워크용 Hardhat을 사용하여 Klaytnscope에서 스마트 컨트랙트를 검증하는 단계별 가이드입니다. 비슷한 단계를 따라 Klaytn Cypress  메인넷의 컨트랙트를 검증할 수 있습니다.

1.프로젝트 폴더 설정하기
a. mkdir contractverification 

2. Hardhat 설치: npm을 사용하여 아직 Hardhat을 전역적으로 설치하지 않은 경우
a. npm install -g hardhat

3.Hardhat 프로젝트를 초기화합니다. 프로젝트 디렉터리로 이동하여 실행합니다.
a. cd contractverification
b. npx hardhat
c. 안내에 따라 Hardhat 프로젝트를 설정합니다. 프로젝트의 필요에 따라 적절한 옵션을 선택합니다.

4. 네트워크 세부 정보 및 개인 키 설정
a. `export PRIVATE_KEY=<your_private_key_here>` 를 실행합니다. 구성된 계정에 테스트 클레이가 있는지 확인합니다 (Faucet: https://baobab.wallet.klaytn.foundation/faucet )
b. `hardhat.config.js`파일의 코드를 아래 바오밥 네트워크용 코드로 바꿉니다. (Cypress Mainnet의 경우, configuration-for-hardhat-verify-plugin 참고)

require("@nomicfoundation/hardhat-toolbox");


const PRIVATE_KEY = process.env.PRIVATE_KEY || "";


// 1. Mainnet Cypress configuration details https://docs.klaytnscope.com/contract/configuration-for-hardhat-verify-plugin
// 2. RPC details can be found https://docs.klaytn.foundation/docs/references/service-providers/public-en/


/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
 solidity: "0.8.24",
 networks: {
   klaytn: {
     chainId: 1001,
     url: "https://public-en-baobab.klaytn.net",
     accounts:[PRIVATE_KEY]
   },
 },
 etherscan: {
   apiKey: {
     klaytn: "unnecessary",
   },
   customChains: [
     {
       network: "klaytn",
       chainId: 1001,
       urls: {
         apiURL: "https://api-baobab.klaytnscope.com/api",
         browserURL: "https://baobab.klaytnscope.com",
       },
     },
   ]
 },
 sourcify: {
   enabled: false
 }
}

5. 컨트랙트 컴파일: 프로젝트가 초기화되면, Hardhat을 사용하여 컨트랙트를 컴파일합니다.
a. npx hardhat compile
– 이 명령은 contracts 폴더에서 솔리디티 컨트랙트를 컴파일하고 `artifacts/` 디렉토리에 필요한 아티팩트를 생성합니다.

6. 컨트랙트 배포: Hardhat을 사용하여 컨트랙트를 Klaytn 네트워크에 배포합니다. `scripts/` 디렉토리에 배포 스크립트를 작성하거나 기존 스크립트를 사용해야 합니다.
a. npx hardhat run scripts/deploy.js –network <network>
b. Ex: npx hardhat run scripts/deploy.js –network klaytn

*Output:

Lock with 0.001ETH and unlock timestamp 1709729354 deployed to 0x131b54E65c99d34BCA738F29051fDAceEa91C969

7. 확인 명령 실행
a. npx hardhat verify –network <network> <deployed_address> <parameters>
b. Ex: npx hardhat verify –network klaytn 0x131b54E65c99d34BCA738F29051fDAceEa91C969 1000000000000000

*Output:

Successfully submitted source code for contract
contracts/Lock.sol:Lock at 0x131b54E65c99d34BCA738F29051fDAceEa91C969
for verification on the block explorer. Waiting for verification result...


Successfully verified contract Lock on the block explorer.
https://baobab.klaytnscope.com/address/0x131b54E65c99d34BCA738F29051fDAceEa91C969#code

결론

데모 프로젝트는 아래의 페이지에서 확인할 수 있습니다. 

https://github.com/klaytn/examples/tree/main/tools/klaytnscope/hardhat-contract-verification