체인 링크는 현재 API가 체인 링크 함수로 대체되기 때문에이 스타터 키트에서 API가 제거된다는 데 주목하십시오. 체인 링크 기능의 스타터 키트를 여기에서 찾으십시오
Hardhat 개발 환경을 사용하여 다음 3 개의 체인 링크 기능 구현 :
체인 링크 함수의 경우이 Tarter 키트로 이동하십시오 : Hardhat | 파운드리 (곧 출시)
ChainLink CCIP (크로스 체인 상호 운용성 프로토콜)의 경우이 스타터 키트로 이동하십시오 : Hardhat | 주조
여기에서 진행하기 전에 Hardhat 시작 문서화를 거치는 것이 좋습니다.
git --version
실행하고 git version xxx
와 같은 응답을 볼 수 있다면 올바르게했다는 것을 알게 될 것입니다.node --version
및 vx.xx
와 같은 출력을 얻습니다npm
대신 원사yarn --version
및 xxx
와 같은 출력을 얻으십시오
yarn
대신npx
및npm
에 익숙한 경우 실행에npx
사용할 수 있고 종속성 설치에는npm
사용할 수 있습니다.
모든 요구 사항을 설치 한 후 다음을 실행하십시오.
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
그 다음에:
npm install
권장 사항은 NPM 7 이상을 사용하는 것입니다. 이전 버전의 NPM을 사용하는 경우 도구 상자에서 사용하는 모든 패키지를 설치해야합니다.
npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers
원사를 사용하는 경우에도 마찬가지입니다.
yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers
npx hardhat test
또는
npm run test
또는
yarn test
TypeScript를 사용하려면 실행 :
git checkout typescript
npm install
npx hardhat --help
실행하면 실행할 수있는 모든 작업의 출력이 나타납니다.
npm run deploy
이것은 계약을 로컬 네트워크에 배치합니다. 또한 로컬 네트워크에서 Mock ChainLink 계약을 배포하여 상호 작용할 수 있습니다. 배포 된 계약과 상호 작용하려면 배포 된 계약과 상호 작용하기 위해 건너 뛰십시오.
스마트 계약을 테스트하고 상호 작용하는 가장 좋은 방법 중 하나는 로컬 네트워크를 사용하는 것입니다. 모든 계약으로 로컬 네트워크를 실행하려면 다음 명령을 실행하십시오.
npx hardhat node
로컬 블록 체인, 비공개 키, 배치 된 계약 ( deployment
폴더 스크립트에서) 및 EVM 지갑에 잠재적으로 추가 할 수있는 엔드 포인트를 얻을 수 있습니다.
hardhat.config.js
에는 다음과 같은 섹션이 표시됩니다.
module.exports = {
defaultNetwork: "hardhat",
networks: {
파일 의이 섹션은 상호 작용할 네트워크를 정의하는 위치입니다. Hardhat 문서에서 해당 전체 파일에 대한 자세한 내용을 읽을 수 있습니다.
라이브 또는 테스트 네트워크와 상호 작용하려면 다음과 같이 필요합니다.
Sepolia Testnet을 사용하여 설정하는 예를 살펴 보겠습니다.
먼저 환경 변수를 설정해야합니다. 우리는 .env
파일로 설정하여 그렇게 할 수 있습니다 (존재하지 않으면 작성). 링크 된 Twilio 블로그에서 환경 변수에 대한 자세한 내용을 읽을 수도 있습니다. .env.example
에서이 파일의 모습 샘플을 찾을 수 있습니다.
중요 :이
.env
파일에 넣은 키를 노출하지 않도록하십시오. 즉, 나는 그들을 공개 리포에 밀어 넣지 말고 실제 자금과 관련이없는 개발에 사용하는 열쇠를 유지하십시오.
SEPOLIA_RPC_URL
환경 변수를 설정하십시오.연금술, Infura 또는 Moralis에서 무료로 하나를 얻을 수 있습니다. 이것이 블록 체인과의 연결입니다.
PRIVATE_KEY
환경 변수를 설정하십시오. 이것은 지갑, 즉 메타 마스크의 개인 키입니다. 이는 계약을 공개 네트워크에 배포하는 데 필요합니다. hardhat.config.js
를 일부 변경하여 MNEMONIC
환경 변수를 선택적으로 설정할 수 있습니다.
경고
개발할 때는 실제 돈과 관련이없는 메타 마스크를 사용하는 것이 가장 좋습니다. 이를 수행하는 좋은 방법은 새로운 브라우저 프로파일 (Chrome, Brave, Firefox 등)을 만들고 해당 브라우저에 메타 마스크를 설치 하고이 지갑 돈을 보내지 않는 것입니다.
개인 키와 같은 민감한 정보가 포함될 수있는 .env 파일로 변경하고 푸시하지 마십시오! 이 정보가 공개 GitHub 저장소에 도달하면 누군가가 해당 지갑 주소에 메인 펀드가 있는지 확인하고 훔칠 수 있습니다!
.env
예 :
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
bash
예 :
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
hardhat.config.js
의 섹션을 무너 뜨리고PRIVATE_KEY
줄에 주석을 달아서PRIVATE_KEY
환경 변수 대신MNEMONIC
사용할 수도 있습니다. 그러나 이것은 권장되지 않습니다.
Mainnet 및 Polygon과 같은 다른 네트워크의 경우 RPC URL 및 개인 키에 대해 다른 환경 변수를 사용할 수 있습니다. 자세한 내용은 hardhat.config.js
참조하십시오.
체인 링크 수도꼭지로 가서 약간의 eth와 링크를 얻으십시오. 익숙하지 않은 경우 체인 링크 문서를 따르십시오.
VRF 구독 페이지로 이동하여 새 구독을 만듭니다. 구독 ID를 저장하고 helper-hardhat-config.js
파일에 넣어 subscriptionId
로 넣으십시오.
이제 모든 설정이되어야합니다! 당신은 명령을 실행하고 지금 --network sepolia
통과 할 수 있습니다!
계약 배포 :
npm run deploy --network sepolia
스테이징 테스트 넷 테스트를 실행합니다
npm run test-staging
포크 네트워크에서 테스트를 실행하려면 다음을 수행하십시오.
MAINNET_RPC_URL
Mainnet에 연결되는 환경 변수를 설정하십시오.FORKING_BLOCK_NUMBER
환경 변수로 설정하십시오. 무시되면 매번 최신 블록을 사용하여 테스트 불일치로 이어질 수 있습니다.enabled
플래그를 true
/ false
로 설정 forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
테스트는 테스트 디렉토리에 있으며 단위 테스트와 스테이징/테스트 넷 테스트로 나뉩니다. 단위 테스트는 로컬 환경에서만 실행해야하며 준비 테스트는 실시간 환경에서만 실행해야합니다.
단위 테스트를 실행하려면 :
npx hardhat test
또는
npm run test
또는
yarn test
Sepolia 네트워크에서 준비 테스트를 실행하려면 :
npx hardhat test --network sepolia
또는
npm run test-staging
모든 테스트는 서로 독립적 인 방식으로 작성되므로 병렬로 실행하여 시간을 절약 할 수 있습니다. AUTO_FUND=false
내부 .env
파일을 확인하십시오. 병렬 테스트에는 몇 가지 제한 사항이 있습니다. 여기에서 자세히 알아보십시오.
병렬로 테스트를 실행하려면 :
npx hardhat test --parallel
또는
npm run test --parallel
계약을 배치 한 후 배포 출력은 계약 주소가 배치 될 때 제공됩니다. 그런 다음 하드 하트 작업과 함께이 계약 주소를 사용하여 각 계약에서 운영을 수행 할 수 있습니다.
가격 사료 소비자 계약에는 특정 가격 사료 계약의 최신 가격을 읽기 위해 하나의 작업이 있습니다.
npx hardhat read-price-feed --contract insert-contract-address-here --network network
VRFConsumer 계약에는 두 가지 작업이 있습니다. 하나는 임의 번호를 요청하고 하나는 임의 번호 요청 결과를 읽습니다. 개발자 문서에 설명 된 바와 같이 두 가지 방법이 있습니다.
먼저 문서를 읽으십시오. 사용 사례에 가장 적합한 방법을 이해하십시오.
시작하려면 VRF 구독 페이지로 이동하여 새 구독을 만듭니다. 가입 ID를 subscriptionId
하고 helper-hardhat-config.js
파일에 넣습니다.
5 : {
// rest of the config
subscriptionId : "777"
}
그런 다음 구독 ID를 생성자 인수로 사용하여 VRF V2 계약 소비자를 최근 구독 네트워크에 배포하십시오.
npm run deploy --network network
마지막으로, 구독 페이지로 한 번 더 가서 배포 된 계약의 주소를 새로운 소비자로 추가해야합니다. 완료되면 요청-랜덤 덤프 작업으로 VRF 요청을 수행 할 수 있습니다.
npx hardhat request-random-number --contract insert-contract-address-here --network network
무작위 숫자를 성공적으로 요청한 후에는 Random-Number 작업을 통해 결과를 볼 수 있습니다.
npx hardhat read-random-number --contract insert-contract-address-here --network network
VRF V2 계약 소비자를 네트워크에 배포하십시오.
npm run deploy --network network
또는 (원사를 사용하는 경우)
yarn deploy --network network
이제 링크 토큰으로 소비자 계약에 자금을 지원해야합니다.
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
완료되면 요청-랜덤 덤프 작업으로 VRF 요청을 수행 할 수 있습니다.
npx hardhat request-random-number-direct-funding --callbackgaslimit insert-callback-gas-limit-here --requestconfirmations insert-request-confirmations-here --numwords insert-number-words-here --contract insert-contract-address-here --network network
무작위 숫자를 성공적으로 요청한 후에는 Random-Number 작업을 통해 결과를 볼 수 있습니다.
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
AutomationCounter Contract는 간단한 체인 링크 자동화 활성화 계약으로, 체인 링크 자동화에 의해 퍼포먼스 업 작업을 수행 할 때마다 증가하는 카운터 변수를 유지하는 단순히 유지 보수를 유지합니다. 계약이 배치되면 https://automation.chain.link/으로 이동하여 유지 관리를 위해 등록해야합니다. 그러면 아래 작업을 사용하여 Chainlink Automation에서 증가하는 카운터 변수를 볼 수 있습니다.
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
ETHERSCAN_API_KEY
환경 변수가 필요합니다. Etherscan API 사이트에서 하나를 얻을 수 있습니다. 설정 한 경우 배포 스크립트가 기본적으로 확인하려고하지만 수동으로 확인하려면 수동으로 실행할 수 있습니다.
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
예:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
이것은 당신의 스마트 계약을 묶을 것입니다.
npm run lint:fix
이것은 당신의 JavaScript와 Solidity를 모두 더 멋지게 보이게합니다.
npm run format
가스를 추정하려면 REPORT_GAS
환경 변수를 true로 설정 한 다음 실행하십시오.
npx hardhat test
USD 또는 기타 통화로 가스 가격을보고 싶다면 CoinmarketCap에서 COINMARKETCAP_API_KEY
추가하십시오.
특정 테스트 스위트가 실행될 때 스마트 계약 소스 코드가 실행되는 정도의 백분율의 측정 값을 보려면
npm run coverage
우리는 echidna를 퍼즈 테스트 도구로 사용할 것입니다. 최소 8GB 가상 메모리가 할당 된 상태에서 Docker를 설치해야합니다 (이 매개 변수를 업데이트하려면 설정-> resources-> advanced-> memory 로 이동).
echidna 인스턴스 실행을 시작합니다
npm run fuzzing
처음으로 사용하는 경우 Docker가 Eth-Security-Toolbox 이미지를 다운로드 할 때까지 기다려야합니다.
퍼지 런을 시작합니다
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
Echidna 유형을 종료합니다
exit
기부금은 항상 환영합니다! PR 또는 문제를 열어!