请注意,链链接将从此入门套件中删除任何API,因为ChainLink目前将链接链接功能替换。请在此处找到用于链链链接功能的入门套件
使用HardHat开发环境实施以下3个链链接功能:
对于链链接功能,请转到这些TARTER套件:HardHat |铸造厂(即将推出)
对于Chainlink CCIP(跨链互操作性原则),请转到这些入门套件:HARDHAT |铸造厂
建议您在此处继续前进之前要经过Hardhat入门文档。
git --version
并查看像git version xxx
这样的响应,你会知道自己做的正确node --version
and获取输出,例如: vx.xx
npm
yarn --version
并获得一个输出,例如: xxx
如果您熟悉
npx
和npm
而不是yarn
,则可以使用npx
进行执行,而npm
可以安装依赖项。
安装所有要求后,运行以下内容:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
然后:
npm install
建议是使用NPM 7或更高版本。如果您使用的是旧版本的NPM,则还需要安装工具箱使用的所有软件包。
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
如果您使用纱线也是如此。
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
或者
npm run test
或者
yarn test
要使用打字稿,请运行:
git checkout typescript
npm install
如果您运行npx hardhat --help
您将获得所有可以运行的任务的输出。
npm run deploy
这将使您的合同部署到本地网络。此外,如果在本地网络上,它将部署模拟链链接合同供您互动。如果您想与已部署的合同进行互动,请跳过与已部署的合同互动。
测试和与智能合约互动的最佳方法之一是使用本地网络。要运行带有所有合同的本地网络,请执行以下命令:
npx hardhat node
您将获得当地的区块链,私钥,已部署的合同(来自deployment
文件夹脚本),并有可能添加到EVM钱包中的端点。
在您的hardhat.config.js
中,您会看到类似的部分:
module.exports = {
defaultNetwork: "hardhat",
networks: {
该文件的这一部分是您定义要与哪些网络进行交互的地方。您可以在HardHat文档中阅读有关整个文件的更多信息。
要与实时或测试网络互动,您需要:
让我们看一个使用Sepolia Testnet设置这些设置的示例。
首先,我们需要设置环境变量。我们可以通过在.env
文件中设置它们来做到这一点(如果不存在的话,请创建它)。您还可以从链接的Twilio博客中阅读有关环境变量的更多信息。您会在.env.example
中找到此文件的样子
重要的是:确保您不会公开此
.env
文件中放置的键。这样,我的意思是不要将它们推到公共仓库中,请尝试将它们保持在开发中,而与任何实际资金相关。
SEPOLIA_RPC_URL
环境变量。您可以从炼金术,信息或道德利斯中免费获得一个。这是您与区块链的联系。
PRIVATE_KEY
环境变量。这是您钱包中的私钥,即metamask。这是将合同部署到公共网络所需的。您可以选择将MNEMONIC
环境变量设置为hardhat.config.js
的一些更改。
警告
在开发时,最好使用与任何真实资金相关的元掩体。做到这一点的好方法是制作新的浏览器配置文件(在Chrome,Brave,Firefox等上),并在该浏览器上安装MetAmask,而从不发送此钱包。
不要提交并向可能包含敏感信息(例如私钥)的.ENV文件推动任何更改!如果此信息到达公共GitHub存储库,则可以使用它来检查您在钱包地址中是否有任何Mainnet资金,然后窃取它们!
.env
示例:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
bash
示例:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
您也可以通过在
hardhat.config.js
中删除该部分并评论PRIVATE_KEY
Line来使用MNEMONIC
而不是PRIVATE_KEY
环境变量。但是不建议这样做。
对于Mainnet和Polygon等其他网络,您可以为RPC URL和私钥使用不同的环境变量。请参阅hardhat.config.js
了解更多信息。
前往链链链接水龙头,获得一些ETH和LINK。如果不熟悉,请遵循链链链接文档。
转到VRF订阅页面并创建新订阅。保存您的订阅ID,然后将其放入subscriptionId
helper-hardhat-config.js
文件中
您现在应该全部设置!您可以运行任何命令,然后通过--network sepolia
即可!
部署合同:
npm run deploy --network sepolia
运行登台测试网测试
npm run test-staging
如果您想在分叉网络上运行测试,请按照以下步骤操作:
MAINNET_RPC_URL
环境变量。FORKING_BLOCK_NUMBER
环境变量。如果被忽略,它将每次都使用最新的块,从而导致测试不一致。enabled
标志设置为true
/ false
启用 /禁用叉子功能 forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
测试位于测试目录中,并在单位测试和分期/测试网络测试之间进行分配。单位测试只能在本地环境上进行,并且分期测试应仅在实时环境上进行。
运行单元测试:
npx hardhat test
或者
npm run test
或者
yarn test
在Sepolia网络上运行分期测试:
npx hardhat test --network sepolia
或者
npm run test-staging
由于所有测试都是以一种彼此独立的方式编写的,因此您可以通过并行运行时间来节省时间。确保AUTO_FUND=false
Inside .env
文件。并行测试有一些局限性,在此处阅读有关它们的更多信息
并行运行测试:
npx hardhat test --parallel
或者
npm run test --parallel
部署合同后,部署输出将为您提供部署的合同地址。然后,您可以将这些合同地址与HardHat任务结合使用来对每个合同执行操作。
价格提要消费者合同有一项任务,以阅读指定价格供稿合同的最新价格
npx hardhat read-price-feed --contract insert-contract-address-here --network network
VRFConsumer合同有两个任务,一个是请求随机号码,另一个用于读取随机号码请求的结果。如开发人员文档中所述,有两种方法:
首先阅读文档,以了解哪种方法最适合您的用例。
首先,转到VRF订阅页面并创建新订阅。保存您的订阅ID并将其放入helper-hardhat-config.js
文件中作为subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
然后,使用订阅ID作为构造函数参数,将VRF V2合同消费者部署到最近订阅的网络。
npm run deploy --network network
最后,您需要再去一次订阅页面,并添加已部署合同的地址作为新消费者。完成此操作后,您可以使用Request-random-number任务执行VRF请求:
npx hardhat request-random-number --contract insert-contract-address-here --network network
一旦您成功提出了一个随机号码的请求,您就可以通过读取随机数字来查看结果:
npx hardhat read-random-number --contract insert-contract-address-here --network network
将您的VRF V2合同消费者部署到网络。
npm run deploy --network network
或(如果您使用的纱线)
yarn deploy --network network
现在,您必须通过链接令牌为您的消费者合同提供资金:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
完成此操作后,您可以使用Request-random-number任务执行VRF请求:
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
一旦您成功提出了一个随机号码的请求,您就可以通过读取随机数字来查看结果:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
AutomationCounter合同是一个简单的链接自动化合同,它只是维护一个计数器变量,该变量每次通过链链接自动化执行performupeque任务时会增加。合同部署后,您应该前往https://automation.chain.link/进行维护注册,然后您可以使用以下任务查看由ChainLink Automation递增的计数器变量
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
您需要一个ETHERSCAN_API_KEY
环境变量。您可以从Etherscan API站点获得一个。
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
例子:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
这将使您的智能合约提交。
npm run lint:fix
这将格式化您的JavaScript和坚固性看起来更好。
npm run format
要估计气体,只需将REPORT_GAS
环境变量设置为true,然后运行:
npx hardhat test
如果您想查看以美元或其他货币的汽油价格,请从CoinMarketCap中添加COINMARKETCAP_API_KEY
。
要查看在运行特定测试套件时执行智能合约源代码的程度百分比的度量,请输入
npm run coverage
我们将使用echidna作为模糊测试工具。您需要将Docker安装到至少分配的8GB虚拟内存中(要更新此参数,请转到设置 - > Resources-> Advance--> Memory )。
启动echidna实例运行
npm run fuzzing
如果您是第一次使用它,则需要等待Docker为我们下载Eth-Security-Toolbox映像。
开始模糊运行
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
退出echidna类型
exit
总是欢迎捐款!打开公关或问题!