소개
이 문서는 Quai Network의 모든 체인에서 Hardhat을 사용하여 Solidity 스마트 계약을 배포하는 방법을 보여줍니다.필수 조건
Quai에서 단일 체인 스마트 계약을 배포하려면 몇 가지 도구와 종속성이 필요합니다. 사용할 모든 종속성에 대한 개요는 다음과 같습니다:환경 설정
예제 저장소 설치
먼저hardhat-example 저장소를 복제하고, 이 튜토리얼에서 사용할 Solidity 디렉토리로 이동한 다음, npm을 통해 종속성을 설치합니다.
스마트 계약
Solidity/ 디렉토리에는 contracts/ 디렉토리 내에 2개의 샘플 계약이 있습니다: ERC20.sol과 ERC721.sol. 두 계약 모두 Open Zeppelin 라이브러리에서 파생된 구현입니다.
이 튜토리얼에서는 ERC20.sol 샘플 계약을 사용하지만, 자체 계약을 추가하거나 다른 라이브러리의 계약을 사용할 수도 있습니다.
환경 변수
hardhat-example 저장소 루트에 토큰 세부 정보, 개인 키 및 RPC URL을 안전하게 관리하기 위한 샘플 환경 파일 .env.dist가 포함되어 있습니다.
.env.dist 파일은 템플릿 파일이며 그대로 사용해서는 안 됩니다. .env.dist 파일을 새로운 .env 파일로 복사해야 합니다.이 파일은 hardhat-example 저장소의 루트에 위치하며 Solidity/ 디렉토리의 설정 파일 역할을 합니다..env.dist 파일을 저장소 루트의 새 .env 파일로 복사합니다:
.env 파일을 열고 개인 키, RPC URL 및 배포하려는 계약의 토큰 인수를 추가합니다. .env 파일은 다음과 같아야 합니다:
.env
샘플
.env.dist는 Orchard 테스트넷을 대상으로 하므로 실제 QUAI 없이 배포할 수 있습니다.
메인넷에 배포하려면 CHAIN_ID를 9로, RPC_URL을 https://rpc.quai.network로 변경하세요.hardhat-example 저장소는 Quais SDK를 사용하여 단일 RPC URL만으로 네트워크 연결을 구성합니다. SDK가 네트워크 제공자를 구성하는 방법에 대해 자세히 알아보려면 SDK 제공자 예제 섹션을 방문하세요.
개인 키와 RPC URL을 입력한 후, 이제 hardhat.config.js 내에서 안전하게 사용할 준비가 되었습니다.
Hardhat 구성
Hardhat은 스마트 계약 배포를 구성하는 데hardhat.config.js 파일을 사용합니다. 설정 파일을 통해 배포 네트워크, 작업, 컴파일러 등을 정의할 수 있습니다.
hardhat-example에는 Cyprus-1에서 스마트 계약을 배포하고 검증하기 위한 구성이 포함된 사전 제작된 hardhat.config.js 파일이 포함되어 있습니다.
샘플 hardhat 구성 파일
샘플 hardhat 구성 파일
이 샘플 구성 파일은
hardhat-example 저장소의 일부로 제공됩니다.hardhat.config.js
Cyprus-1은 현재 Quai Network에서 유일하게 활성화된 영역이므로, 샘플 구성은 단일
cyprus1 네트워크만 정의합니다. 전체 영역 엔드포인트 목록은
네트워크를 참조하세요.hardhat.config.js는 .env 파일에서 개인 키와 RPC URL을 가져옵니다. solidity 객체에서 Solidity 버전과 컴파일러 설정을 지정할 수도 있습니다.
배포 및 상호 작용
1
Hardhat으로 컴파일
Hardhat을 사용한 스마트 계약 컴파일은 간단하며 CLI에서 다음과 같이 출력되어야 합니다:
npx를 사용하여 수행할 수 있습니다.다음을 사용하여 contracts/ 디렉토리 내의 모든 계약을 컴파일합니다:2
배포 스크립트 구성
scripts/ 디렉토리 내에서 ERC20 및 ERC721 계약 모두에 대한 배포 스크립트를 찾을 수 있습니다: deployERC20.js 및 deployERC721.js. 이 튜토리얼에서는 ERC20 계약을 배포할 것입니다.deployERC20.js 스크립트는 hardhat.config.js에서 네트워크 구성을 가져오고 저장소 루트의 .env 파일에서 토큰 인수를 가져와서 계약을 배포하는 데 사용합니다.토큰 인수는 tokenArgs 배열을 통해 사용됩니다:@quai/hardhat-deploy-metadata 플러그인을 사용하여 컴파일된 계약의 메타데이터를 IPFS에 푸시하고 생성된 CID를 반환합니다:ContractFactory의 네 번째 인수로 전달되어 배포된 바이트코드에 임베드됩니다. Quaiscan은 나중에 해당 CID를 읽어 검증을 위해 소스를 가져옵니다 — 이것이 없으면 계약은 배포할 수 있지만 검증할 수 없습니다.3
계약 배포
배포 스크립트는 배포하려는 네트워크를 지정하는 다음과 같이 출력되어야 합니다:첫 번째 줄에 출력되는
--network 플래그를 사용합니다. 샘플 구성은 cyprus1만 정의하며, 여기서 이를 사용합니다.CID는 Quaiscan에서 계약을 검증하는 데 필요한 IPFS 해시입니다 — 저장해 두세요.축하합니다! 이제 Quai Network에 ERC20 토큰을 배포했습니다!