Bitte beachten Sie, dass ChainLink eine API aus diesem Starter -Kit entfernt wird, da Chainlink jede API derzeit durch ChainLink -Funktionen ersetzt wird. Bitte finden Sie das Starter -Kit für ChainLink -Funktionen hier
Implementierung der folgenden 3 Kettenlink -Funktionen mithilfe der Hardhat -Entwicklungsumgebung:
Für Kettenlink -Funktionen gehen Sie bitte zu diesen Tarter -Kits: Hardhat | Gießerei (bald kommt)
Für ChainLink CCIP (Cross Chain Interoperability Prototocol) gehen Sie bitte zu diesen Starter -Kits: Hardhat | Gießerei
Es wird empfohlen, dass Sie die Hardhat -Erste -Dokumentation durchlaufen haben, bevor Sie hier fortfahren.
git --version
ausführen können, und eine Antwort wie git version xxx
sehen könnennode --version
und erhalten Sie eine Ausgabe wie: vx.xx
npm
yarn --version
und erhalten Sie eine Ausgabe wie: xxx
Wenn Sie mit
npx
undnpm
anstelle vonyarn
vertraut sind, können Sienpx
für die Ausführung undnpm
zur Installation von Abhängigkeiten verwenden.
Führen Sie nach der Installation aller Anforderungen Folgendes aus:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
Dann:
npm install
Die Empfehlung ist die Verwendung von NPM 7 oder höher. Wenn Sie eine ältere Version von NPM verwenden, müssen Sie auch alle von der Toolbox verwendeten Pakete installieren.
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
Dies ist auch der Fall, wenn Sie Garn verwenden.
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
oder
npm run test
oder
yarn test
Um TypeScript zu verwenden, führen Sie aus:
git checkout typescript
npm install
Wenn Sie npx hardhat --help
erhalten Sie eine Ausgabe aller Aufgaben, die Sie ausführen können.
npm run deploy
Dadurch werden Ihre Verträge in einem lokalen Netzwerk bereitgestellt. Wenn Sie in einem lokalen Netzwerk in einem lokalen Netzwerk Mock ChainLink -Verträge bereitstellen, können Sie mit der Interaktion von Mock ChainLink -Verträgen bereitgestellt werden. Wenn Sie mit Ihren bereitgestellten Verträgen interagieren möchten, gehen Sie in die Interaktion mit bereitgestellten Verträgen.
Eine der besten Möglichkeiten, um intelligente Verträge zu testen und mit einem lokalen Netzwerk zu interagieren. Führen Sie den folgenden Befehl aus, um ein lokales Netzwerk mit all Ihren Verträgen auszuführen:
npx hardhat node
Sie erhalten eine lokale Blockchain, private Schlüssel, Verträge (aus den deployment
) und einen Endpunkt, um möglicherweise einer EVM -Brieftasche hinzuzufügen.
In Ihrem hardhat.config.js
sehen Sie Abschnitt wie:
module.exports = {
defaultNetwork: "hardhat",
networks: {
In diesem Abschnitt der Datei definieren Sie, mit welchen Netzwerken Sie interagieren möchten. Sie können mehr über diese ganze Datei in der Hardhat -Dokumentation lesen.
Um mit einem Live- oder Testnetzwerk zu interagieren, benötigen Sie:
Schauen wir uns ein Beispiel für die Einrichtung dieser mit dem Sepolia TestNet an.
Zunächst müssen wir Umgebungsvariablen festlegen. Wir können dies tun, indem wir sie in unsere .env
-Datei einstellen (erstellen Sie sie, wenn sie nicht da ist). Sie können auch mehr über Umgebungsvariablen aus dem verknüpften Twilio -Blog lesen. Sie finden ein Beispiel, wie diese Datei in .env.example
aussehen wird
Wichtig: Stellen Sie sicher, dass Sie die Schlüssel, die Sie in diese
.env
-Datei einfügen, nicht aufdecken. Damit meine ich sie nicht in ein öffentliches Repo und versuche sie, sie in der Entwicklung nicht mit echten Mitteln verbunden zu halten.
SEPOLIA_RPC_URL
fest.Sie können eine kostenlos von Alchemie, Infura oder Moralis bekommen. Dies ist Ihre Verbindung zur Blockchain.
PRIVATE_KEY
-Umgebungsvariable fest. Dies ist Ihr privater Schlüssel aus Ihrer Brieftasche, dh Metamaske. Dies ist für die Bereitstellung von Verträgen für öffentliche Netzwerke erforderlich. Sie können Ihre MNEMONIC
Umgebungsvariable stattdessen mit einigen Änderungen an hardhat.config.js
festlegen.
WARNUNG
Bei der Entwicklung ist es Best Practice, eine Metamaske zu verwenden, die nicht mit echtem Geld verbunden ist. Eine gute Möglichkeit, dies zu tun, besteht darin, ein neues Browserprofil (auf Chrome, Muchel, Firefox usw.) zu erstellen und Metamask in diesem Browser zu installieren und dieses Brieftaschengeld niemals zu senden.
Verpflichten Sie und geben Sie keine Änderungen an .EnV -Dateien, die vertrauliche Informationen enthalten können, z. B. einen privaten Schlüssel! Wenn diese Informationen ein öffentliches Github -Repository erreichen, kann jemand es verwenden, um zu überprüfen, ob Sie in dieser Brieftaschenadresse ein Mainnet -Fonds haben, und sie stehlen!
.env
Beispiel:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
bash
-Beispiel:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
Sie können auch eine
MNEMONIC
anstelle einerPRIVATE_KEY
Umgebungsvariablen verwenden, indem Sie den Abschnitt in derhardhat.config.js
überzeugen und diePRIVATE_KEY
-Zeile aussprechen. Dies wird jedoch nicht empfohlen.
Für andere Netzwerke wie Mainnet und Polygon können Sie verschiedene Umgebungsvariablen für Ihre RPC -URL und Ihren privaten Schlüssel verwenden. Sehen Sie sich die hardhat.config.js
an, um mehr zu erfahren.
Gehen Sie zu den Chainlink -Wasserhähne und erhalten Sie etwas ETH und Link. Bitte folgen Sie der ChainLink -Dokumentation, wenn sie unbekannt sind.
Gehen Sie zur VRF -Abonnementseite und erstellen Sie das neue Abonnement. Speichern Sie Ihre Abonnement helper-hardhat-config.js
ID und subscriptionId
Sie sollten jetzt alle eingerichtet sein! Sie können jeden Befehl ausführen und jetzt nur die --network sepolia
übergeben!
Um Verträge einzusetzen:
npm run deploy --network sepolia
Durchführung von Staging -Tests -Tests
npm run test-staging
Wenn Sie Tests in einem gegabelten Netzwerk ausführen möchten, befolgen Sie die folgenden Schritte:
MAINNET_RPC_URL
-Umgebungsvariable fest, die eine Verbindung zum Mainnet herstellt.FORKING_BLOCK_NUMBER
einstellen. Wenn es ignoriert wird, verwendet er jedes Mal den neuesten Block, was zu Testkonsistenz führen kann.enabled
Flag auf true
/ false
, um die Feeding -Funktion zu aktivieren / zu deaktivieren forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
Die Tests befinden sich im Testverzeichnis und werden zwischen Unit -Tests und Staging/TestNet -Tests aufgeteilt. Unit -Tests sollten nur in lokalen Umgebungen durchgeführt werden, und die Inszenierungstests sollten nur in Live -Umgebungen durchgeführt werden.
Einheitstests ausführen:
npx hardhat test
oder
npm run test
oder
yarn test
Durchführen von Staging -Tests im Sepolia -Netzwerk:
npx hardhat test --network sepolia
oder
npm run test-staging
Da alle Tests so geschrieben sind, dass Sie unabhängig voneinander sind, können Sie Zeit sparen, indem Sie sie parallel ausführen. Stellen Sie sicher, dass AUTO_FUND=false
in .env
-Datei. Es gibt einige Einschränkungen bei parallelen Tests. Lesen Sie hier mehr darüber
Tests parallel ausführen:
npx hardhat test --parallel
oder
npm run test --parallel
Nach der Bereitstellung Ihrer Verträge erhalten Sie mit der Bereitstellungsausgabe die Vertragsadressen, sobald sie bereitgestellt werden. Sie können diese Vertragsadressen dann in Verbindung mit Hardhat -Aufgaben verwenden, um die Operationen für jeden Vertrag auszuführen.
Der Preisverbrauchervertrag hat eine Aufgabe, um den jüngsten Preis eines bestimmten Preis -Feed -Vertrags zu lesen
npx hardhat read-price-feed --contract insert-contract-address-here --network network
Der VRFConsumer -Vertrag verfügt über zwei Aufgaben, eine, die eine Zufallsnummer anfordert, und eine zum Lesen des Ergebniss der Zufallszahlanforderung. Wie in der Entwicklerdokumentation erläutert, gibt es zwei Methoden:
Lesen Sie zuerst die Dokumente, um zu verstehen, welche Methode am besten für Ihren Anwendungsfall geeignet ist.
Gehen Sie zunächst zur VRF -Abonnementseite und erstellen Sie das neue Abonnement. Speichern Sie Ihre Abonnement-ID und geben Sie sie in helper-hardhat-config.js
Datei als subscriptionId
ein:
5 : {
// rest of the config
subscriptionId : "777"
}
Stellen Sie dann Ihren VRF V2 Contract Consumer mithilfe der Abonnement -ID als Konstruktorargument für das Netzwerk Ihres letzten Abonnements auf.
npm run deploy --network network
Schließlich müssen Sie noch einmal auf Ihre Abonnementseite gehen und die Adresse des implementierten Vertrags als neuer Verbraucher hinzufügen. Sobald dies erledigt ist, können Sie eine VRF-Anfrage mit der Anfrage-Random-Number-Aufgabe ausführen:
npx hardhat request-random-number --contract insert-contract-address-here --network network
Sobald Sie erfolgreich eine Anfrage nach einer Zufallszahl gestellt haben, können Sie das Ergebnis über die Aufgabe von Read-Random-Number sehen:
npx hardhat read-random-number --contract insert-contract-address-here --network network
Bereiten Sie Ihren VRF V2 -Vertragsverbraucher im Netzwerk ein.
npm run deploy --network network
oder (wenn Sie Garn verwenden)
yarn deploy --network network
Jetzt müssen Sie Ihren Verbrauchervertrag mit Link -Token finanzieren:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
Sobald dies erledigt ist, können Sie eine VRF-Anfrage mit der Anfrage-Random-Number-Aufgabe ausführen:
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
Sobald Sie erfolgreich eine Anfrage nach einer Zufallszahl gestellt haben, können Sie das Ergebnis über die Aufgabe von Read-Random-Number sehen:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
Der AutomationCounter -Vertrag ist ein einfacher, von ChainLink Automation fähiger Vertrag, der lediglich eine Gegenvariable verwaltet, die jedes Mal inkrementiert wird, wenn die Performup -Keep -Aufgabe durch eine Chainlink -Automatisierung durchgeführt wird. Sobald der Vertrag bereitgestellt wurde, sollten Sie sich auf https://automation.chain.link/ befassen, um sie für Pflege zu registrieren
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
Sie benötigen eine Umgebungsvariable ETHERSCAN_API_KEY
. Sie können eine von der Etherscan -API -Site erhalten. Wenn Sie es festgelegt haben, versucht Ihr Bereitstellungsskript, sie standardmäßig zu überprüfen. Wenn Sie jedoch manuell überprüfen möchten, können Sie ausführen:
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
Beispiel:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
Dies wird Ihre intelligenten Verträge abgeben.
npm run lint:fix
Dies formatiert sowohl Ihr JavaScript als auch Ihr Solidität, um schöner auszusehen.
npm run format
Um Gas abzuschätzen, legen Sie einfach eine REPORT_GAS
-Umgebungsvariable auf true fest und führen Sie dann aus:
npx hardhat test
Wenn Sie die Gaspreise in USD oder einer anderen Währung sehen möchten, fügen Sie einen COINMARKETCAP_API_KEY
von CoinMarketCap hinzu.
Um eine Maßnahme in Prozent des Grades zu sehen, in dem der Smart Contract -Quellcode ausgeführt wird, wenn eine bestimmte Testsuite ausgeführt wird, type
npm run coverage
Wir werden Echidna als Fuzz -Testwerkzeug verwenden. Sie müssen Docker mit mindestens 8 GB virtueller Speicher installieren lassen (um diesen Parameter zu aktualisieren, wechseln Sie zu Einstellungen-> Ressourcen-> Erweiterte-> Speicher ).
Echidna -Instanz mit starten
npm run fuzzing
Wenn Sie es zum ersten Mal verwenden, müssen Sie darauf warten, dass Docker das Eth-Security-Toolbox-Bild für uns heruntergeladen hat.
Fuzzing -Lauf beginnen
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
Zum Ausgang des Echidna -Typs
exit
Beiträge sind immer willkommen! Öffnen Sie eine PR oder ein Problem!