Harap perhatikan bahwa ChainLink API apa pun dihapus dari kit starter ini karena ChainLink API apa pun saat ini digantikan oleh fungsi rantai. Silakan temukan starter kit untuk fungsi chainlink di sini
Implementasi 3 fitur rantai berikut menggunakan lingkungan pengembangan hardhat:
Untuk fungsi chainlink, silakan pergi ke kit tarter ini: hardhat | Pengecoran (segera hadir)
Untuk ChainLink CCIP (prototokol interoperabilitas lintas rantai) silakan pergi ke kit starter ini: Hardhat | Pengecoran
Disarankan agar Anda melewati dokumentasi yang memulai hardhat sebelum melanjutkan di sini.
git --version
dan melihat respons seperti git version xxx
node --version
dan dapatkan output seperti: vx.xx
npm
yarn --version
dan dapatkan output seperti: xxx
Jika Anda terbiasa dengan
npx
dannpm
alih -alihyarn
, Anda dapat menggunakannpx
untuk eksekusi dannpm
untuk memasang dependensi.
Setelah memasang semua persyaratan, jalankan yang berikut:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
Kemudian:
npm install
Rekomendasi adalah menggunakan NPM 7 atau lebih baru. Jika Anda menggunakan NPM versi yang lebih lama, Anda juga harus menginstal semua paket yang digunakan oleh Toolbox.
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
Itu juga masalahnya jika Anda menggunakan benang.
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
atau
npm run test
atau
yarn test
Untuk menggunakan naskah, jalankan:
git checkout typescript
npm install
Jika Anda menjalankan npx hardhat --help
Anda akan mendapatkan output dari semua tugas yang dapat Anda jalankan.
npm run deploy
Ini akan menggunakan kontrak Anda ke jaringan lokal. Selain itu, jika pada jaringan lokal, itu akan menggunakan kontrak mock rantai untuk Anda berinteraksi. Jika Anda ingin berinteraksi dengan kontrak yang Anda gunakan, lewati ke bawah untuk berinteraksi dengan kontrak yang digunakan.
Salah satu cara terbaik untuk menguji dan berinteraksi dengan kontrak pintar adalah dengan menggunakan jaringan lokal. Untuk menjalankan jaringan lokal dengan semua kontrak Anda di dalamnya, jalankan perintah berikut:
npx hardhat node
Anda akan mendapatkan blockchain lokal, kunci pribadi, kontrak yang digunakan (dari skrip folder deployment
), dan titik akhir yang berpotensi menambah dompet EVM.
Di hardhat.config.js
Anda, Anda akan melihat bagian seperti:
module.exports = {
defaultNetwork: "hardhat",
networks: {
Bagian file ini adalah tempat Anda mendefinisikan jaringan mana yang ingin Anda berinteraksi. Anda dapat membaca lebih lanjut tentang seluruh file itu dalam dokumentasi Hardhat.
Untuk berinteraksi dengan jaringan langsung atau uji, Anda akan membutuhkan:
Mari kita lihat contoh pengaturan ini menggunakan Sepolia TestNet.
Pertama, kita perlu mengatur variabel lingkungan. Kita dapat melakukannya dengan mengaturnya di file .env
kita (buat jika tidak ada di sana). Anda juga dapat membaca lebih lanjut tentang variabel lingkungan dari blog Twilio tertaut. Anda akan menemukan sampel seperti apa file ini di .env.example
Penting: Pastikan Anda tidak akan mengekspos kunci yang Anda masukkan ke dalam file
.env
ini. Maksud saya, maksud saya jangan mendorong mereka ke repo publik, dan silakan cobalah untuk menyimpan kunci yang Anda gunakan dalam pengembangan yang tidak terkait dengan dana nyata.
SEPOLIA_RPC_URL
environment variable.Anda bisa mendapatkannya secara gratis dari alkimia, infura, atau moralis. Ini adalah koneksi Anda ke blockchain.
PRIVATE_KEY
Anda. Ini adalah kunci pribadi Anda dari dompet Anda, yaitu Metamask. Ini diperlukan untuk menggunakan kontrak ke jaringan publik. Anda secara opsional dapat mengatur variabel lingkungan MNEMONIC
Anda sebagai gantinya dengan beberapa perubahan pada hardhat.config.js
.
PERINGATAN
Saat berkembang, praktik terbaik untuk menggunakan metamask yang tidak terkait dengan uang sungguhan. Cara yang baik untuk melakukan ini adalah dengan membuat profil browser baru (di Chrome, Brave, Firefox, dll) dan memasang Metamask di browser itu, dan tidak pernah mengirim uang dompet ini.
Jangan berkomitmen dan dorong perubahan apa pun pada file .env yang mungkin berisi informasi sensitif, seperti kunci pribadi! Jika informasi ini mencapai repositori gitub publik, seseorang dapat menggunakannya untuk memeriksa apakah Anda memiliki dana Mainnet di alamat dompet itu, dan mencuri mereka!
Contoh .env
:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
Contoh bash
:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
Anda juga dapat menggunakan
MNEMONIC
alih -alih variabel lingkunganPRIVATE_KEY
dengan membuka komentar bagian dihardhat.config.js
, dan mengomentari jalurPRIVATE_KEY
. Namun ini tidak disarankan.
Untuk jaringan lain seperti Mainnet dan Polygon, Anda dapat menggunakan variabel lingkungan yang berbeda untuk URL RPC Anda dan kunci pribadi Anda. Lihat hardhat.config.js
untuk mempelajari lebih lanjut.
Pergilah ke keran rantai dan dapatkan ETH dan tautan. Harap ikuti dokumentasi ChainLink jika tidak dikenal.
Buka halaman berlangganan VRF dan buat langganan baru. Simpan ID Langganan Anda dan Letakkan di helper-hardhat-config.js
File sebagai subscriptionId
Anda sekarang harus siap! Anda dapat menjalankan perintah apa pun dan lulus saja --network sepolia
sekarang!
Untuk menggunakan kontrak:
npm run deploy --network sepolia
Untuk menjalankan tes testnet pementasan
npm run test-staging
Jika Anda ingin menjalankan tes pada jaringan bercabang, ikuti langkah -langkah ini:
MAINNET_RPC_URL
yang terhubung ke Mainnet.FORKING_BLOCK_NUMBER
. Jika diabaikan, itu akan menggunakan blok terbaru setiap kali yang dapat menyebabkan pengujian ketidakkonsistenan.enabled
ke true
/ false
untuk mengaktifkan / menonaktifkan fitur forking forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
Tes terletak di direktori pengujian, dan dibagi antara tes unit dan tes pementasan/testNet. Tes unit hanya boleh dijalankan di lingkungan lokal, dan tes pementasan hanya boleh berjalan di lingkungan langsung.
Untuk menjalankan tes unit:
npx hardhat test
atau
npm run test
atau
yarn test
Untuk menjalankan tes pementasan di Jaringan Sepolia:
npx hardhat test --network sepolia
atau
npm run test-staging
Karena semua tes ditulis dengan cara untuk menjadi mandiri satu sama lain, Anda dapat menghemat waktu dengan menjalankannya secara paralel. Pastikan bahwa AUTO_FUND=false
di dalam file .env
. Ada beberapa batasan dengan pengujian paralel, baca lebih lanjut tentang mereka di sini
Untuk menjalankan tes secara paralel:
npx hardhat test --parallel
atau
npm run test --parallel
Setelah menggunakan kontrak Anda, output penyebaran akan memberi Anda alamat kontrak karena dikerahkan. Anda kemudian dapat menggunakan alamat kontrak ini bersama dengan tugas hardhat untuk melakukan operasi pada setiap kontrak.
Harga memberi makan kontrak konsumen memiliki satu tugas, untuk membaca harga terbaru dari kontrak umpan harga tertentu
npx hardhat read-price-feed --contract insert-contract-address-here --network network
Kontrak VRFConsumer memiliki dua tugas, satu untuk meminta nomor acak, dan satu untuk membaca hasil dari permintaan nomor acak. Seperti yang dijelaskan dalam dokumentasi pengembang, ada dua metode:
Baca dokumen terlebih dahulu untuk memahami metode mana yang paling cocok untuk kasus penggunaan Anda.
Untuk memulai, buka halaman berlangganan VRF dan buat langganan baru. Simpan ID langganan Anda dan masukkan ke dalam file helper-hardhat-config.js
sebagai subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
Kemudian, sebarkan konsumen kontrak VRF V2 Anda ke jaringan langganan terbaru Anda menggunakan ID berlangganan sebagai argumen konstruktor.
npm run deploy --network network
Akhirnya, Anda harus pergi ke halaman berlangganan sekali lagi dan menambahkan alamat kontrak yang digunakan sebagai konsumen baru. Setelah selesai, Anda dapat melakukan permintaan VRF dengan tugas permintaan-number:
npx hardhat request-random-number --contract insert-contract-address-here --network network
Setelah Anda berhasil membuat permintaan untuk nomor acak, Anda dapat melihat hasilnya melalui tugas read-random-number:
npx hardhat read-random-number --contract insert-contract-address-here --network network
Menyebarkan konsumen kontrak VRF V2 Anda ke jaringan.
npm run deploy --network network
atau (jika Anda menggunakan benang)
yarn deploy --network network
Sekarang Anda harus mendanai kontrak konsumen Anda dengan Token Tautan:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
Setelah selesai, Anda dapat melakukan permintaan VRF dengan tugas permintaan-number:
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
Setelah Anda berhasil membuat permintaan untuk nomor acak, Anda dapat melihat hasilnya melalui tugas read-random-number:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
Kontrak AutomationCounter adalah kontrak yang diaktifkan rantai rantai yang sederhana yang hanya mempertahankan variabel penghitung yang bertambah setiap kali tugas pengurangan dilakukan oleh otomatisasi chainlink. Setelah kontrak dikerahkan, Anda harus menuju ke https://automation.chain.link/ untuk mendaftarkannya untuk pemeliharaan, maka Anda dapat menggunakan tugas di bawah ini untuk melihat variabel penghitung yang bertambah dengan otomatisasi chainlink rantai
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
Anda membutuhkan variabel lingkungan ETHERSCAN_API_KEY
. Anda bisa mendapatkannya dari situs API Etherscan .. Jika Anda memilikinya, skrip penyebaran Anda akan mencoba memverifikasi secara default, tetapi jika Anda ingin memverifikasi secara manual, Anda dapat menjalankan:
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
contoh:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
Ini akan meletakkan kontrak pintar Anda.
npm run lint:fix
Ini akan memformat javascript dan soliditas Anda agar terlihat lebih bagus.
npm run format
Untuk memperkirakan gas, cukup atur variabel lingkungan REPORT_GAS
ke true, dan kemudian jalankan:
npx hardhat test
Jika Anda ingin melihat harga gas di USD atau mata uang lainnya, tambahkan COINMARKETCAP_API_KEY
dari CoinMarketCap.
Untuk melihat ukuran dalam persentase tingkat di mana kode sumber kontrak pintar dieksekusi ketika rangkaian tes tertentu dijalankan, ketik
npm run coverage
Kami akan menggunakan Echidna sebagai alat pengujian fuzz. Anda harus menginstal Docker dengan setidaknya 8GB memori virtual yang dialokasikan (untuk memperbarui parameter ini, buka Pengaturan-> Resources-> Advanced-> Memory ).
Untuk memulai echidna instance run
npm run fuzzing
Jika Anda menggunakannya untuk pertama kalinya, Anda harus menunggu Docker untuk mengunduh gambar Eth-Security-Toolbox untuk kami.
Untuk memulai fuzzing run
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
Untuk keluar dari jenis echidna
exit
Kontribusi selalu diterima! Buka PR atau masalah!