S'il vous plaît, attirez l'attention que ChainLink toute API est supprimée de ce kit de démarrage car ChainLink Toute API est actuellement remplacée par des fonctions de liaison chaîne. Veuillez trouver le kit de démarrage pour les fonctions ChainLink ici
Mise en œuvre des 3 fonctionnalités de liaison des chaînes suivantes à l'aide de l'environnement de développement HardHat:
Pour les fonctions ChainLink, veuillez consulter ces kits de tarter: HardHat | Fonderie (à venir bientôt)
Pour ChainLink CCIP (Prototocol d'interopérabilité de la chaîne croisée), veuillez consulter ces kits de démarrage: HardHat | Fonderie
Il est recommandé de parcourir la documentation Hardhat Bearning avant de continuer ici.
git --version
et voir une réponse comme git version xxx
node --version
et obtenir une sortie comme: vx.xx
npm
yarn --version
et obtenez une sortie comme: xxx
Si vous connaissez
npx
etnpm
au lieuyarn
, vous pouvez utilisernpx
pour l'exécution etnpm
pour l'installation de dépendances.
Après avoir installé toutes les exigences, exécutez ce qui suit:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
Alors:
npm install
La recommandation est d'utiliser le NPM 7 ou version ultérieure. Si vous utilisez une ancienne version de NPM, vous devrez également installer tous les packages utilisés par la boîte à outils.
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
C'est aussi le cas si vous utilisez du fil.
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
ou
npm run test
ou
yarn test
Pour utiliser TypeScript, exécutez:
git checkout typescript
npm install
Si vous exécutez npx hardhat --help
vous obtiendrez une sortie de toutes les tâches que vous pouvez exécuter.
npm run deploy
Cela déploiera vos contrats sur un réseau local. De plus, si sur un réseau local, il déploiera des contrats Mock ChainLink pour que vous puissiez interagir. Si vous souhaitez interagir avec vos contrats déployés, sautez pour interagir avec les contrats déployés.
L'une des meilleures façons de tester et d'interagir avec les contrats intelligents est d'utiliser un réseau local. Pour exécuter un réseau local avec tous vos contrats, exécutez la commande suivante:
npx hardhat node
Vous obtiendrez une blockchain locale, des clés privées, des contrats déployés (à partir des scripts de dossier deployment
) et un point de terminaison pour potentiellement ajouter à un portefeuille EVM.
Dans votre hardhat.config.js
vous verrez la section comme:
module.exports = {
defaultNetwork: "hardhat",
networks: {
Cette section du fichier est l'endroit où vous définissez les réseaux avec lesquels vous souhaitez interagir. Vous pouvez en savoir plus sur tout ce fichier dans la documentation HardHat.
Pour interagir avec un réseau de test ou de test, vous aurez besoin:
Examinons un exemple de la configuration à l'aide du SEPOLIA TestNet.
Tout d'abord, nous devrons définir des variables d'environnement. Nous pouvons le faire en les définissant dans notre fichier .env
(créez-le si ce n'est pas là). Vous pouvez également en savoir plus sur les variables d'environnement du blog Twilio lié. Vous trouverez un échantillon de ce à quoi ressemblera ce fichier dans .env.example
Important: assurez-vous de ne pas exposer les clés que vous mettez dans ce fichier
.env
. Par cela, je veux dire, ne les poussez pas à un dépôt public et essayez de les garder les clés que vous utilisez dans le développement non associé à des fonds réels.
SEPOLIA_RPC_URL
.Vous pouvez en obtenir un gratuitement de l'alchimie, de l'infura ou du moralis. Ceci est votre connexion à la blockchain.
PRIVATE_KEY
. Ceci est votre clé privée de votre portefeuille, c'est-à-dire Metamask. Ceci est nécessaire pour déployer des contrats aux réseaux publics. Vous pouvez éventuellement définir votre variable d'environnement MNEMONIC
avec quelques modifications apportées à hardhat.config.js
.
AVERTISSEMENT
Lors du développement, il est de la meilleure pratique d'utiliser un métamask qui n'est associé à aucun argent réel. Une bonne façon de le faire est de créer un nouveau profil de navigateur (sur Chrome, Brave, Firefox, etc.) et d'installer Metamask sur ce navigateur et d'envoyer ce portefeuille.
Ne vous engagez pas et ne poussez aucune modification aux fichiers .env qui peuvent contenir des informations sensibles, comme une clé privée! Si ces informations atteignent un référentiel GitHub public, quelqu'un peut les utiliser pour vérifier si vous avez des fonds principaux dans cette adresse de portefeuille et les voler!
.env
Exemple:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
Exemple bash
:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
Vous pouvez également utiliser un
MNEMONIC
au lieu d'une variable d'environnementPRIVATE_KEY
en décalmentant la section dans lehardhat.config.js
, et en commentant la lignePRIVATE_KEY
. Cependant, cela n'est pas recommandé.
Pour d'autres réseaux comme MainNet et Polygon, vous pouvez utiliser différentes variables d'environnement pour votre URL RPC et votre clé privée. Voir le hardhat.config.js
pour en savoir plus.
Rendez-vous sur les robinets ChainLink et obtenez un peu d'eth et un lien. Veuillez suivre la documentation ChainLink si elle n'est pas familière.
Rendez-vous sur la page d'abonnement VRF et créez le nouvel abonnement. Enregistrez votre identifiant d'abonnement et mettez-le dans le fichier helper-hardhat-config.js
en tant subscriptionId
Vous devriez maintenant être toute configuration! Vous pouvez exécuter n'importe quelle commande et passer le --network sepolia
maintenant!
Pour déployer des contrats:
npm run deploy --network sepolia
Pour exécuter des tests de test de stadification
npm run test-staging
Si vous souhaitez exécuter des tests sur un réseau fourchu, suivez ces étapes:
MAINNET_RPC_URL
qui se connecte au MainNet.FORKING_BLOCK_NUMBER
. S'il est ignoré, il utilisera le dernier bloc à chaque fois qui peut entraîner une incohérence de test.enabled
sur true
/ false
pour activer / désactiver la fonction de forking forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
Les tests sont situés dans le répertoire des tests et sont divisés entre les tests unitaires et les tests de stadification / testnet. Les tests unitaires ne doivent être exécutés que sur des environnements locaux et les tests de mise en scène ne doivent fonctionner que sur des environnements en direct.
Pour exécuter des tests unitaires:
npx hardhat test
ou
npm run test
ou
yarn test
Pour exécuter des tests de stadification sur le réseau Sepolia:
npx hardhat test --network sepolia
ou
npm run test-staging
Étant donné que tous les tests sont écrits de manière à être indépendants les uns des autres, vous pouvez gagner du temps en les exécutant en parallèle. Assurez-vous que AUTO_FUND=false
Inside Inside .env
File. Il y a quelques limites avec les tests parallèles, en savoir plus à leur sujet ici
Pour exécuter des tests en parallèle:
npx hardhat test --parallel
ou
npm run test --parallel
Après le déploiement de vos contrats, la production de déploiement vous donnera les adresses du contrat lors de leur déplacement. Vous pouvez ensuite utiliser ces adresses contractuelles en conjonction avec des tâches HardHat pour effectuer des opérations sur chaque contrat.
Le contrat de consommation Feeds Feeds a une tâche, pour lire le dernier prix d'un contrat d'alimentation de prix spécifié
npx hardhat read-price-feed --contract insert-contract-address-here --network network
Le contrat VRFConsumer a deux tâches, une pour demander un nombre aléatoire et une pour lire le résultat de la demande de nombre aléatoire. Comme expliqué dans la documentation du développeur, il existe deux méthodes:
Lisez d'abord les documents pour comprendre quelle méthode est la plus adaptée à votre cas d'utilisation.
Pour commencer, accédez à la page d'abonnement VRF et créez le nouvel abonnement. Enregistrez votre identifiant d'abonnement et placez-le dans le fichier helper-hardhat-config.js
en tant subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
Ensuite, déployez votre consommateur de contrat VRF V2 sur le réseau de votre abonnement récent à l'aide de l'ID d'abonnement comme argument constructeur.
npm run deploy --network network
Enfin, vous devez vous rendre sur votre page d'abonnement une fois de plus et ajouter l'adresse du contrat déployé en tant que nouveau consommateur. Une fois cela fait, vous pouvez effectuer une demande VRF avec la tâche de demande de random de demande:
npx hardhat request-random-number --contract insert-contract-address-here --network network
Une fois que vous avez réussi une demande de nombre aléatoire, vous pouvez voir le résultat via la tâche de lecture-random:
npx hardhat read-random-number --contract insert-contract-address-here --network network
Déployez votre consommateur de contrat VRF V2 sur le réseau.
npm run deploy --network network
ou (si vous utilisez du fil)
yarn deploy --network network
Vous devez maintenant financer votre contrat de consommation avec les jetons de liaison:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
Une fois cela fait, vous pouvez effectuer une demande VRF avec la tâche de demande de random de demande:
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
Une fois que vous avez réussi une demande de nombre aléatoire, vous pouvez voir le résultat via la tâche de lecture-random:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
Le contrat AutomationCounter est un simple contrat compatible sur l'automatisation de la chaîne qui maintient simplement une variable de contre-variable qui est incrémentée chaque fois que la tâche de maintien de la performance est effectuée par une automatisation de la chaîne. Une fois le contrat déployé, vous devez vous rendre sur https://automation.chain.link/ pour l'enregistrer pour les entretiens, vous pouvez utiliser la tâche ci-dessous pour afficher la variable de compteur qui est incrémentée par l'automatisation de ChainLink
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
Vous aurez besoin d'une variable d'environnement ETHERSCAN_API_KEY
. Vous pouvez en obtenir un à partir du site d'API Etherscan. Si vous l'avez défini, votre script de déploiement essaiera de les vérifier par défaut, mais si vous souhaitez en vérifier manuellement, vous pouvez exécuter:
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
exemple:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
Cela va pendaire à vos contrats intelligents.
npm run lint:fix
Cela formatera à la fois votre javascript et votre solidité pour être plus beaux.
npm run format
Pour estimer le gaz, définissez simplement une variable d'environnement REPORT_GAS
sur true, puis exécutez:
npx hardhat test
Si vous souhaitez voir les prix du gaz en USD ou dans une autre devise, ajoutez un COINMARKETCAP_API_KEY
de CoinmarketCap.
Pour voir une mesure en pourcentage de la mesure dans laquelle le code source du contrat intelligent est exécuté lorsqu'une suite de tests particulière est exécutée, tapez
npm run coverage
Nous allons utiliser Echidna comme outil de test de fuzz. Vous devez faire installer Docker avec au moins 8 Go de mémoire virtuelle allouée (pour mettre à jour ce paramètre, allez dans Paramètres-> Resources-> Advanced-> Memory ).
Pour démarrer l'instance Echidna Exécutez
npm run fuzzing
Si vous l'utilisez pour la première fois, vous devrez attendre que Docker télécharge pour nous l'image eth-security-toolbox.
Pour commencer la course fuzzing
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
Pour quitter le type d'échidna
exit
Les contributions sont toujours les bienvenues! Ouvrez un PR ou un problème!