Sea la atención de que ChainLink se elimina cualquier API de este kit de inicio porque ChainLink, cualquier API se reemplaza actualmente por funciones de ChainLink. Encuentre el kit de inicio para las funciones de ChainLink aquí
Implementación de las siguientes 3 características de ChainLink utilizando el entorno de desarrollo Hardhat:
Para las funciones de ChainLink, vaya a estos kits de Tarter: Hardhat | Foundry (próximamente)
Para ChainLink CCIP (prototocolo de interoperabilidad de cadena cruzada), vaya a estos kits de inicio: Hardhat | Fundición
Se recomienda que haya pasado por la documentación de la inicio de Hardhat antes de continuar aquí.
git --version
y ver una respuesta como git version xxx
node --version
y obtener una salida como: vx.xx
npm
yarn --version
y obtener una salida como: xxx
Si está familiarizado con
npx
ynpm
en lugar deyarn
, puede usarnpx
para la ejecución ynpm
para instalar dependencias.
Después de instalar todos los requisitos, ejecute lo siguiente:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
Entonces:
npm install
La recomendación es usar NPM 7 o posterior. Si está utilizando una versión anterior de NPM, también deberá instalar todos los paquetes utilizados por la caja de herramientas.
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
Ese es también el caso si estás usando hilo.
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
o
npm run test
o
yarn test
Para usar TypeScript, ejecute:
git checkout typescript
npm install
Si ejecuta npx hardhat --help
obtendrá una salida de todas las tareas que puede ejecutar.
npm run deploy
Esto implementará sus contratos en una red local. Además, si está en una red local, implementará contratos simulados de ChainLink para que pueda interactuar. Si desea interactuar con sus contratos implementados, salte a interactuar con contratos implementados.
Una de las mejores formas de probar e interactuar con contratos inteligentes es mediante el uso de una red local. Para ejecutar una red local con todos sus contratos, ejecute el siguiente comando:
npx hardhat node
Obtendrá una cadena de bloques local, claves privadas, contratos implementados (de los scripts de la carpeta deployment
) y un punto final para sumar potencialmente una billetera EVM.
En tu hardhat.config.js
verás una sección como:
module.exports = {
defaultNetwork: "hardhat",
networks: {
Esta sección del archivo es donde define con qué redes desea interactuar. Puede leer más sobre ese archivo completo en la documentación Hardhat.
Para interactuar con una red en vivo o de prueba, necesitará:
Veamos un ejemplo de configurarlos utilizando el Sepolia Testnet.
Primero, necesitaremos establecer variables de entorno. Podemos hacerlo configurandolos en nuestro archivo .env
(crea si no está allí). También puede leer más sobre las variables de entorno del blog de Twilio vinculado. Encontrará una muestra de cómo se verá este archivo en .env.example
IMPORTANTE: Asegúrese de no exponer las claves que coloca en este archivo
.env
. Con eso, quiero decir que no los empujen a un repositorio público, y por favor intente mantenerlas las claves que usa en el desarrollo no asociadas con ningún fondos reales.
SEPOLIA_RPC_URL
.Puede obtener uno gratis de alquimia, infura o moralis. Esta es su conexión con la cadena de bloques.
PRIVATE_KEY
. Esta es su llave privada de su billetera, es decir, Metamask. Esto es necesario para implementar contratos en redes públicas. Opcionalmente, puede establecer su variable de entorno MNEMONIC
con algunos cambios en el hardhat.config.js
.
ADVERTENCIA
Cuando se desarrolla, es una mejor práctica usar un metamasco que no esté asociado con ningún dinero real. Una buena manera de hacerlo es hacer un nuevo perfil del navegador (en Chrome, Brave, Firefox, etc.) e instalar Metamask en ese navegador, y nunca enviar este dinero de la billetera.
¡No cometa y presione ningún cambio a archivos .env que puedan contener información confidencial, como una clave privada! Si esta información llega a un repositorio público de GitHub, alguien puede usarla para verificar si tiene algún fondos de Mainnet en esa dirección de billetera, ¡y robarlos!
.env
ejemplo:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
Ejemplo bash
:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
También puede usar una
MNEMONIC
en lugar de una variable de entornoPRIVATE_KEY
desenchufando la sección enhardhat.config.js
y comentando la líneaPRIVATE_KEY
. Sin embargo, esto no se recomienda.
Para otras redes como Mainnet y Polygon, puede usar diferentes variables de entorno para su URL RPC y su clave privada. See the hardhat.config.js
to learn more.
Dirígete a los grifos de ChainLink y obtén un poco de ETH y Link. Siga la documentación de ChainLink si es desconocido.
Dirígete a la página de suscripción de VRF y crea la nueva suscripción. Guarde su ID de suscripción y póngala en el archivo helper-hardhat-config.js
como subscriptionId
¡Ahora deberías estar todo configurado! ¡Puede ejecutar cualquier comando y simplemente pasar el --network sepolia
ahora!
Para implementar contratos:
npm run deploy --network sepolia
Para ejecutar pruebas de prueba de estadificación
npm run test-staging
Si desea realizar pruebas en una red bifurcada, siga estos pasos:
MAINNET_RPC_URL
que se conecta a MainNet.FORKING_BLOCK_NUMBER
Variable de entorno. Si se ignora, usará el último bloque cada vez que puede conducir a la inconsistencia de prueba.enabled
en true
/ false
para habilitar / deshabilitar la función de bifurcación forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
Las pruebas se encuentran en el directorio de prueba y se dividen entre las pruebas unitarias y las pruebas de estadificación/prueba. Las pruebas unitarias solo deben ejecutarse en entornos locales, y las pruebas de estadificación solo deben ejecutarse en entornos en vivo.
Para ejecutar pruebas unitarias:
npx hardhat test
o
npm run test
o
yarn test
Para ejecutar pruebas de estadificación en la red Sepolia:
npx hardhat test --network sepolia
o
npm run test-staging
Dado que todas las pruebas están escritas para ser independientes entre sí, puede ahorrar tiempo ejecutándolas en paralelo. Asegúrese de que AUTO_FUND=false
Inside .env
archivo. Hay algunas limitaciones con pruebas paralelas, lea más sobre ellas aquí
Para ejecutar pruebas en paralelo:
npx hardhat test --parallel
o
npm run test --parallel
Después de implementar sus contratos, la salida de implementación le dará las direcciones del contrato a medida que se implementen. Luego puede usar estas direcciones de contrato junto con tareas de Hardhat para realizar operaciones en cada contrato.
El contrato de consumo de Price Feeds tiene una tarea, para leer el último precio de un contrato de alimentación de precio específico
npx hardhat read-price-feed --contract insert-contract-address-here --network network
El contrato VRFConsumer tiene dos tareas, una para solicitar un número aleatorio y otra para leer el resultado de la solicitud de número aleatorio. Como se explica en la documentación del desarrollador, hay dos métodos:
Lea los documentos primero para comprender qué método es el más adecuado para su caso de uso.
Para comenzar, vaya a la página de suscripción de VRF y cree la nueva suscripción. Guarde su ID de suscripción y colóquela en el archivo helper-hardhat-config.js
como subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
Luego, implemente su consumidor de contrato VRF V2 en la red de su suscripción reciente utilizando ID de suscripción como argumento de constructor.
npm run deploy --network network
Finalmente, debe ir a su página de suscripción una vez más y agregar la dirección del contrato implementado como un nuevo consumidor. Una vez hecho esto, puede realizar una solicitud de VRF con la tarea de número de random-random:
npx hardhat request-random-number --contract insert-contract-address-here --network network
Una vez que haya realizado una solicitud con éxito para un número aleatorio, puede ver el resultado a través de la tarea de número de lectura-retención:
npx hardhat read-random-number --contract insert-contract-address-here --network network
Implemente su consumidor de contrato VRF V2 a la red.
npm run deploy --network network
o (si estás usando hilo)
yarn deploy --network network
Ahora tiene que financiar su contrato de consumo con tokens de enlace:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
Una vez hecho esto, puede realizar una solicitud de VRF con la tarea de número de random-random:
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
Una vez que haya realizado una solicitud con éxito para un número aleatorio, puede ver el resultado a través de la tarea de número de lectura-retención:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
El contrato de AutomationCounter es un contrato simple habilitado para la automatización de ChainLink que simplemente mantiene una variable contraria que se incrementa cada vez que la tarea de mantenimiento de rendimiento se realiza mediante una automatización de ChainLink. Una vez que se implementa el contrato, debe dirigirse a https://automation.chain.link/ para registrarlo para mantenimientos, luego puede usar la tarea a continuación para ver la variable de contador que se incrementa con la automatización de ChainLink
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
Necesitará una variable de entorno ETHERSCAN_API_KEY
. Puede obtener uno del sitio de la API Etherscan. Si lo tiene configurado, su script de implementación intentará verificarlo de forma predeterminada, pero si desea verificar cualquier manualmente, puede ejecutar:
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
ejemplo:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
Esto pellice sus contratos inteligentes.
npm run lint:fix
Esto formateará tanto su JavaScript como su solidez para verse mejor.
npm run format
Para estimar el gas, simplemente establezca una variable de entorno REPORT_GAS
en verdadero, y luego ejecute:
npx hardhat test
Si desea ver los precios del gas en USD u otra moneda, agregue un COINMARKETCAP_API_KEY
desde CoinMarketCap.
Para ver una medida en el porcentaje del grado en que se ejecuta el código fuente del contrato inteligente cuando se ejecuta un conjunto de pruebas particular
npm run coverage
Vamos a usar Echidna como herramienta de prueba de fuzz. Debe tener Docker instalado con al menos 8 GB de memoria virtual asignada (para actualizar este parámetro, vaya a Configuración-> Recursos-> Advanced-> Memoria ).
Para iniciar la instancia de Echidna ejecutarse
npm run fuzzing
Si lo está utilizando por primera vez, deberá esperar a que Docker descargue la imagen ETH-Security-Toolbox para nosotros.
Para comenzar a ir confusado
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
Para salir del tipo Echidna
exit
¡Las contribuciones siempre son bienvenidas! ¡Abra un PR o un problema!