โปรดสนใจว่า chainlink ใด ๆ API ใด ๆ จะถูกลบออกจากชุดเริ่มต้นนี้เนื่องจาก chainlink API ใด ๆ จะถูกแทนที่ด้วยฟังก์ชั่น chainlink โปรดค้นหาชุดเริ่มต้นสำหรับฟังก์ชั่น chainlink ที่นี่
การใช้งานคุณสมบัติ 3 ChainLink ต่อไปนี้โดยใช้สภาพแวดล้อมการพัฒนา Hardhat:
สำหรับฟังก์ชั่น chainlink โปรดไปที่ชุด tarter เหล่านี้: hardhat | โรงหล่อ (เร็ว ๆ นี้)
สำหรับ Chainlink CCIP (Cross Chain Interoperability Prototocol) โปรดไปที่ชุดเริ่มต้นเหล่านี้: Hardhat | โรงหล่อ
ขอแนะนำให้คุณผ่านเอกสารการเริ่มต้นใช้งาน Hardhat ก่อนที่จะดำเนินการที่นี่
git --version
และดูการตอบกลับเช่น git version xxx
node --version
และรับเอาต์พุตเช่น: vx.xx
npm
yarn --version
และรับเอาต์พุตเช่น: xxx
หากคุณคุ้นเคยกับ
npx
และnpm
แทนyarn
คุณสามารถใช้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
คุณจะได้รับ blockchain ท้องถิ่นคีย์ส่วนตัวสัญญาที่ปรับใช้ (จากสคริปต์โฟลเดอร์ deployment
) และจุดสิ้นสุดเพื่อเพิ่มลงในกระเป๋าเงิน EVM
ใน hardhat.config.js
ของคุณคุณจะเห็นส่วนเช่น:
module.exports = {
defaultNetwork: "hardhat",
networks: {
ส่วนนี้ของไฟล์นี้เป็นที่ที่คุณกำหนดเครือข่ายที่คุณต้องการโต้ตอบด้วย คุณสามารถอ่านเพิ่มเติมเกี่ยวกับไฟล์ทั้งหมดนั้นในเอกสาร Hardhat
ในการโต้ตอบกับเครือข่ายสดหรือทดสอบคุณจะต้อง:
ลองดูตัวอย่างของการตั้งค่าเหล่านี้โดยใช้ Sepolia Testnet
ก่อนอื่นเราจะต้องตั้งค่าตัวแปรสภาพแวดล้อม เราสามารถทำได้โดยการตั้งค่าไว้ในไฟล์ .env
ของเรา (สร้างถ้าไม่มี) คุณยังสามารถอ่านเพิ่มเติมเกี่ยวกับตัวแปรสภาพแวดล้อมจากบล็อก Twilio ที่เชื่อมโยง คุณจะพบตัวอย่างของไฟล์นี้ที่มีลักษณะอย่างไรใน .env.example
สำคัญ: ตรวจสอบให้แน่ใจว่าคุณจะไม่เปิดเผยกุญแจที่คุณใส่ไว้ในไฟล์
.env
นี้ โดยที่ฉันหมายถึงอย่าผลักพวกเขาไปยัง repo สาธารณะและโปรดพยายามเก็บกุญแจที่คุณใช้ในการพัฒนาไม่เกี่ยวข้องกับเงินจริงใด ๆ
SEPOLIA_RPC_URL
ของคุณคุณสามารถรับฟรีจากการเล่นแร่แปรธาตุ infura หรือ moralis นี่คือการเชื่อมต่อกับ blockchain
PRIVATE_KEY
ของคุณ นี่คือคีย์ส่วนตัวของคุณจากกระเป๋าเงินของคุณคือ Metamask สิ่งนี้จำเป็นสำหรับการปรับใช้สัญญากับเครือข่ายสาธารณะ คุณสามารถเลือกตั้งค่าตัวแปรสภาพแวดล้อม MNEMONIC
ของคุณแทนการเปลี่ยนแปลงบางอย่างกับ hardhat.config.js
คำเตือน
เมื่อพัฒนามันเป็นวิธีปฏิบัติที่ดีที่สุดในการใช้ metamask ที่ไม่เกี่ยวข้องกับเงินจริงใด ๆ วิธีที่ดีในการทำเช่นนี้คือการสร้างโปรไฟล์เบราว์เซอร์ใหม่ (บน Chrome, Brave, Firefox, ฯลฯ ) และติดตั้ง Metamask บนเบราว์เซอร์นั้นและไม่ส่งเงินกระเป๋าเงินนี้
อย่ากระทำและผลักดันการเปลี่ยนแปลงใด ๆ ไปยังไฟล์. ENV ที่อาจมีข้อมูลที่ละเอียดอ่อนเช่นคีย์ส่วนตัว! หากข้อมูลนี้มาถึงพื้นที่เก็บข้อมูลสาธารณะ GitHub บางคนสามารถใช้เพื่อตรวจสอบว่าคุณมีกองทุน MainNet ใด ๆ ในที่อยู่กระเป๋าเงินนั้นและขโมยพวกเขา!
.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'
นอกจากนี้คุณยังสามารถใช้
MNEMONIC
แทนตัวแปรสภาพแวดล้อมPRIVATE_KEY
โดยการเขียนบทในส่วนในhardhat.config.js
และแสดงความคิดเห็นบรรทัดPRIVATE_KEY
อย่างไรก็ตามไม่แนะนำ
สำหรับเครือข่ายอื่น ๆ เช่น MainNet และ Polygon คุณสามารถใช้ตัวแปรสภาพแวดล้อมที่แตกต่างกันสำหรับ URL RPC และคีย์ส่วนตัวของคุณ ดู hardhat.config.js
เพื่อเรียนรู้เพิ่มเติม
ตรงไปที่ chainlink faucets และรับ ETH และลิงก์ โปรดติดตามเอกสาร chainlink หากไม่คุ้นเคย
ตรงไปที่หน้าการสมัครสมาชิก VRF และสร้างการสมัครสมาชิกใหม่ บันทึก ID การสมัครสมาชิกของคุณและวางไว้ในไฟล์ helper-hardhat-config.js
เป็น subscriptionId
ตอนนี้คุณควรติดตั้งทั้งหมด! คุณสามารถเรียกใช้คำสั่งใด ๆ และผ่าน --network sepolia
ได้ทันที!
เพื่อปรับใช้สัญญา:
npm run deploy --network sepolia
เพื่อเรียกใช้การทดสอบการแสดงละคร
npm run test-staging
หากคุณต้องการเรียกใช้การทดสอบบนเครือข่ายที่ถูกแยกให้ทำตามขั้นตอนเหล่านี้:
MAINNET_RPC_URL
ที่เชื่อมต่อกับ MainNetFORKING_BLOCK_NUMBER
หากถูกละเว้นมันจะใช้บล็อกล่าสุดทุกครั้งที่สามารถนำไปสู่การทดสอบความไม่สอดคล้องกันenabled
เป็น true
/ false
เพื่อเปิด / ปิดการใช้งานฟีเจอร์ FORKING 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
หลังจากปรับใช้สัญญาของคุณเอาท์พุทการปรับใช้จะให้ที่อยู่สัญญากับคุณเมื่อมีการปรับใช้ จากนั้นคุณสามารถใช้ที่อยู่สัญญาเหล่านี้ร่วมกับงาน Hardhat เพื่อดำเนินการในแต่ละสัญญา
ราคาฟีดสัญญาผู้บริโภคมีงานหนึ่งงานเพื่ออ่านราคาล่าสุดของสัญญาฟีดราคาที่กำหนด
npx hardhat read-price-feed --contract insert-contract-address-here --network network
สัญญา VRFConsumer มีสองงานหนึ่งงานเพื่อขอหมายเลขสุ่มและอีกหนึ่งรายการเพื่ออ่านผลลัพธ์ของคำขอหมายเลขสุ่ม ตามที่อธิบายไว้ในเอกสารนักพัฒนามีสองวิธี:
อ่านเอกสารก่อนเพื่อทำความเข้าใจว่าวิธีใดที่เหมาะสมที่สุดสำหรับกรณีการใช้งานของคุณ
ในการเริ่มต้นให้ไปที่หน้าการสมัครสมาชิก VRF และสร้างการสมัครสมาชิกใหม่ บันทึก ID การสมัครสมาชิกของคุณและวางไว้ในไฟล์ helper-hardhat-config.js
เป็น subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
จากนั้นปรับใช้ผู้บริโภคสัญญา VRF V2 ของคุณไปยังเครือข่ายการสมัครสมาชิกล่าสุดของคุณโดยใช้ ID การสมัครสมาชิกเป็นอาร์กิวเมนต์ตัวสร้าง
npm run deploy --network network
ในที่สุดคุณต้องไปที่หน้าการสมัครสมาชิกอีกครั้งและเพิ่มที่อยู่ของสัญญาที่ปรับใช้เป็นผู้บริโภคใหม่ เมื่อเสร็จแล้วคุณสามารถทำการร้องขอ VRF ด้วยงานคำขอ-หมายเลขคำขอ:
npx hardhat request-random-number --contract insert-contract-address-here --network network
เมื่อคุณทำการร้องขอหมายเลขสุ่มสำเร็จแล้วคุณสามารถดูผลลัพธ์ได้ผ่านงานการอ่าน-หมายเลขหมายเลข:
npx hardhat read-random-number --contract insert-contract-address-here --network network
ปรับใช้ผู้บริโภคสัญญา VRF V2 ของคุณไปยังเครือข่าย
npm run deploy --network network
หรือ (ถ้าคุณใช้เส้นด้าย)
yarn deploy --network network
ตอนนี้คุณต้องระดมทุนสัญญาผู้บริโภคของคุณด้วย Link Tokens:
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
เมื่อคุณทำการร้องขอหมายเลขสุ่มสำเร็จแล้วคุณสามารถดูผลลัพธ์ได้ผ่านงานการอ่าน-หมายเลขหมายเลข:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
สัญญา AutomationCounter เป็นสัญญาที่เปิดใช้งานกับ ChainLink Automation อย่างง่ายซึ่งเพียงแค่รักษาตัวแปรตัวนับที่เพิ่มขึ้นทุกครั้งที่งาน PerformUpkET ดำเนินการโดยการเชื่อมโยงอัตโนมัติ ChainLink เมื่อมีการปรับใช้สัญญาแล้วคุณควรมุ่งหน้าไปที่ 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_API_KEY
จาก Coinmarketcap
หากต้องการดูการวัดในเปอร์เซ็นต์ของระดับที่ซอร์สโค้ดสัญญาอัจฉริยะจะถูกดำเนินการเมื่อมีการเรียกใช้ชุดทดสอบเฉพาะให้พิมพ์
npm run coverage
เรากำลังจะใช้ตัวอักษรเป็นเครื่องมือทดสอบฟัซซี่ คุณต้องติดตั้ง Docker ด้วยหน่วยความจำเสมือนอย่างน้อย 8GB (เพื่ออัปเดตพารามิเตอร์นี้ไปที่ การตั้งค่า-> ทรัพยากร-> หน่วยความจำขั้นสูง-> )
ในการเริ่มต้นอินสแตนซ์ระดับสูง
npm run fuzzing
หากคุณใช้มันเป็นครั้งแรกคุณจะต้องรอให้ Docker ดาวน์โหลดภาพ Eth-Security-Toolbox สำหรับเรา
เพื่อเริ่มฟัซซิง
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
เพื่อออกจากประเภทตัวตุ่น
exit
ยินดีต้อนรับการมีส่วนร่วมเสมอ! เปิดการประชาสัมพันธ์หรือปัญหา!