Por favor, seja atenção que o ChainLink Qualquer API seja removido deste kit de partida porque o ChainLink Qualquer API é atualmente substituído pelas funções do ChainLink. Encontre o kit inicial para funções do ChainLink aqui
Implementação dos três recursos seguintes do ChainLink usando o ambiente de desenvolvimento Hardhat:
Para funções do ChainLink, vá para estes kits Tarter: Hardhat | Fundição (em breve)
Para o ChainLink CCIP (Prototocolo de Interoperabilidade da Cadeia Cruzada), vá para estes kits iniciantes: Hardhat | Fundição
É recomendável que você tenha passado pela documentação do Hardhat antes de prosseguir aqui.
git --version
e ver uma resposta como git version xxx
node --version
e obtenha uma saída como: vx.xx
npm
yarn --version
e obtenha uma saída como: xxx
Se você estiver familiarizado com
npx
enpm
em vez deyarn
, poderá usarnpx
para execução enpm
para instalar dependências.
Depois de instalar todos os requisitos, execute o seguinte:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
Então:
npm install
A recomendação é usar o NPM 7 ou posterior. Se você estiver usando uma versão mais antiga do NPM, também precisará instalar todos os pacotes usados pela caixa de ferramentas.
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
Esse também é o caso se você estiver usando fios.
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
Para usar o TypeScript, execute:
git checkout typescript
npm install
Se você executar npx hardhat --help
obterá uma saída de todas as tarefas que poderá executar.
npm run deploy
Isso implantará seus contratos em uma rede local. Além disso, se estiver em uma rede local, ele implantará contratos de mocklink para você interagir. Se você quiser interagir com seus contratos implantados, pule para a interagição com contratos implantados.
Uma das melhores maneiras de testar e interagir com contratos inteligentes é o uso de uma rede local. Para executar uma rede local com todos os seus contratos, execute o seguinte comando:
npx hardhat node
Você receberá um blockchain local, chaves privadas, contratos implantados (dos scripts da pasta de deployment
) e um endpoint para potencialmente adicionar a uma carteira EVM.
Em seu hardhat.config.js
você verá a seção como:
module.exports = {
defaultNetwork: "hardhat",
networks: {
Esta seção do arquivo é onde você define com quais redes você deseja interagir. Você pode ler mais sobre todo esse arquivo na documentação Hardhat.
Para interagir com uma rede ao vivo ou de teste, você precisará:
Vejamos um exemplo para configurá -los usando o Sepolia testNet.
Primeiro, precisaremos definir variáveis de ambiente. Podemos fazê -lo configurando -os em nosso arquivo .env
(crie -o se não estiver lá). Você também pode ler mais sobre variáveis de ambiente do blog Twilio vinculado. Você encontrará uma amostra de como será este arquivo em .env.example
Importante: verifique se você não exporia as chaves que você coloca neste arquivo
.env
. Com isso, quero dizer, não os empurre para um repositório público e tente mantê -los as chaves que você usa em desenvolvimento não associado a fundos reais.
SEPOLIA_RPC_URL
.Você pode obter um de graça de alquimia, infura ou moralis. Esta é a sua conexão com a blockchain.
PRIVATE_KEY
. Esta é a sua chave privada da sua carteira, ou seja, Metamask. Isso é necessário para implantar contratos em redes públicas. Opcionalmente, você pode definir sua variável de ambiente MNEMONIC
com algumas alterações no hardhat.config.js
.
AVISO
Ao desenvolver, é uma prática recomendada usar uma metamask que não esteja associada a nenhum dinheiro real. Uma boa maneira de fazer isso é criar um novo perfil do navegador (no Chrome, Brave, Firefox, etc.) e instalar metamask nesse navegador, e nunca enviar esse dinheiro da carteira.
Não comprometa e envie alterações nos arquivos .env que podem conter informações confidenciais, como uma chave privada! Se essas informações atingirem um repositório público do GitHub, alguém poderá usá -las para verificar se você tem algum fundos da Nets Main nesse endereço da carteira e roubá -los!
.env
Exemplo:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
Exemplo bash
:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
Você também pode usar um
MNEMONIC
em vez de uma variável de ambientePRIVATE_KEY
, descomentando a seção nohardhat.config.js
e comentando a linhaPRIVATE_KEY
. No entanto, isso não é recomendado.
Para outras redes como MainNet e Polygon, você pode usar diferentes variáveis de ambiente para o seu URL de RPC e sua chave privada. Veja o hardhat.config.js
para saber mais.
Vá até as torneiras do ChainLink e obtenha um pouco de ETH e link. Siga a documentação do ChainLink se não estiver familiarizada.
Vá para a página de assinatura do VRF e crie a nova assinatura. Salve seu ID de assinatura e coloque-o no arquivo helper-hardhat-config.js
como subscriptionId
Agora você deve estar tudo configurado! Você pode executar qualquer comando e passar a --network sepolia
agora!
Para implantar contratos:
npm run deploy --network sepolia
Para executar testes de estadiamento
npm run test-staging
Se você deseja executar testes em uma rede bifurcada, siga estas etapas:
MAINNET_RPC_URL
que se conecta à Net Main.FORKING_BLOCK_NUMBER
. Se ignorado, ele usará o bloco mais recente cada vez que pode levar para testar a inconsistência.enabled
como true
/ false
para ativar / desativar o recurso de forca forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
Os testes estão localizados no diretório de teste e são divididos entre testes de unidade e testes de estadiamento/TestNet. Os testes de unidade devem ser executados apenas em ambientes locais, e os testes de estadiamento devem ser executados apenas em ambientes ao vivo.
Para executar testes de unidade:
npx hardhat test
ou
npm run test
ou
yarn test
Para executar testes de estadiamento na rede Sepolia:
npx hardhat test --network sepolia
ou
npm run test-staging
Como todos os testes são escritos de forma a serem independentes um do outro, você pode economizar tempo executando -os em paralelo. Certifique -se de que AUTO_FUND=false
interno .env
arquivo. Existem algumas limitações com testes paralelos, leia mais sobre eles aqui
Para executar testes em paralelo:
npx hardhat test --parallel
ou
npm run test --parallel
Depois de implantar seus contratos, a saída de implantação fornecerá os endereços do contrato à medida que são implantados. Você pode usar esses endereços de contrato em conjunto com as tarefas fortes para executar operações em cada contrato.
O contrato com o consumidor alimentado por preço tem uma tarefa, para ler o preço mais recente de um contrato de alimentação de preços especificado
npx hardhat read-price-feed --contract insert-contract-address-here --network network
O contrato VRFConsumer possui duas tarefas, uma para solicitar um número aleatório e outro para ler o resultado da solicitação de número aleatório. Conforme explicado na documentação do desenvolvedor, existem dois métodos:
Leia os documentos primeiro para entender qual método é o mais adequado para o seu caso de uso.
Para começar, vá para a página de assinatura do VRF e crie a nova assinatura. Salve seu ID de assinatura e coloque-o no arquivo helper-hardhat-config.js
como subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
Em seguida, implante seu consumidor contratado VRF V2 na rede de sua assinatura recente usando o ID da assinatura como argumento do construtor.
npm run deploy --network network
Por fim, você precisa ir à sua página de assinatura mais uma vez e adicionar o endereço do contrato implantado como um novo consumidor. Uma vez feito isso, você pode executar uma solicitação de VRF com a tarefa de número-random de solicitação:
npx hardhat request-random-number --contract insert-contract-address-here --network network
Depois de fazer com sucesso um pedido de um número aleatório, você pode ver o resultado por meio da tarefa de número-random-random:
npx hardhat read-random-number --contract insert-contract-address-here --network network
Implante seu consumidor de contrato VRF V2 na rede.
npm run deploy --network network
ou (se você estiver usando fios)
yarn deploy --network network
Agora você precisa financiar seu contrato de consumidor com tokens de link:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
Uma vez feito isso, você pode executar uma solicitação de VRF com a tarefa de número-random de solicitação:
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
Depois de fazer com sucesso um pedido de um número aleatório, você pode ver o resultado por meio da tarefa de número-random-random:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
O contrato AutomationCounter é um contrato simples de automação do ChainLink que simplesmente mantém uma variável de contador que é incrementada cada vez que a tarefa do desempenho do desempenho é executada por uma automação do ChainLink. Depois que o contrato for implantado, você deve ir para https://automation.chain.link/ para registrá -lo para manutenção, então você pode usar a tarefa abaixo para visualizar a variável contador que é incrementada pela Automação do ChainLink
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
Você precisará de uma variável de ambiente ETHERSCAN_API_KEY
. Você pode obter um do site da API EtherScan .. se você o tiver definido, seu script de implantação tentará verificá -los por padrão, mas se você deseja verificar qualquer qualquer coisa manualmente, poderá executar:
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
exemplo:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
Isso fará com que seus contratos inteligentes.
npm run lint:fix
Isso formará o seu JavaScript e a solidez para parecer mais agradáveis.
npm run format
Para estimar o gás, basta definir uma variável de ambiente REPORT_GAS
como true e depois executar:
npx hardhat test
Se você quiser ver os preços do gás em USD ou outra moeda, adicione um COINMARKETCAP_API_KEY
do Coinmarketcap.
Para ver uma medida em porcentagem do grau em que o código -fonte do contrato inteligente é executado quando um conjunto de testes específico é executado, digite
npm run coverage
Vamos usar o Echidna como uma ferramenta de teste de fuzz. Você precisa instalar o Docker com pelo menos 8 GB de memória virtual (para atualizar este parâmetro, vá para Configurações-> Recursos-> Advanced-> Memory ).
Para iniciar a instância da Echidna
npm run fuzzing
Se você o estiver usando pela primeira vez, precisará esperar o Docker para baixar a imagem ETH-Security-Toolbox para nós.
Para começar a fuzir
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
Para sair do tipo Echidna
exit
As contribuições são sempre bem -vindas! Abra um PR ou um problema!