yarn add hardhat --dev yarn hardhat // 选择empty hardhat.config.js
yarn add --dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers @nomiclabs/hardhat-etherscan @nomiclabs/hardhat-waffle chai ethereum-waffle hardhat hardhat-contract-sizer hardhat-deploy hardhat-gas-reporter prettier prettier-plugin-solidity solhint solidity-coverage dotenv
编写的tasks可以很方便的在终端中进行调用
const { task } = require("hardhat/config"); task("block-number", "Prints the current block number.").setAction( async (taskArgs, hre) => { const blockNumber = await hre.ethers.provider.getBlockNumber(); console.log(`Current block Number is ${blockNumber}`); } );
以上task实现了查看block-number
,第一个参数为task的名称,第二个参数为描述,setAction
用来描述真正这个task要实现的功能。
链接地址:https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-etherscan
This plugin helps you verify the source code for your Solidity contracts on Etherscan
npm install --save-dev @nomiclabs/hardhat-etherscan
require("@nomiclabs/hardhat-etherscan"); const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY etherscan: { apiKey: ETHERSCAN_API_KEY, },
{ "name": "hardhat-fund-me-fcc", "devDependencies": { "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@nomiclabs/hardhat-etherscan": "^3.0.0", "@nomiclabs/hardhat-waffle": "^2.0.2", "chai": "^4.3.4", "ethereum-waffle": "^3.4.0", "ethers": "^5.5.3", "hardhat": "^2.8.3", "hardhat-deploy": "^0.9.29", "hardhat-gas-reporter": "^1.0.7", "solidity-coverage": "^0.7.18", "@chainlink/contracts": "^0.3.1", "dotenv": "^14.2.0", "prettier-plugin-solidity": "^1.0.0-beta.19" }, "scripts": { "test": "hardhat test", "test:staging": "hardhat test --network goerli", "lint": "solhint 'contracts/*.sol'", "lint:fix": "solhint 'contracts/**/*.sol' --fix", "format": "prettier --write .", "coverage": "hardhat coverage" } }
将第三方的.sol引入进来
yarn add @chainlink/contracts
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; library PriceConverter { function getPrice(AggregatorV3Interface priceFeed) internal view returns (uint256) { (, int256 answer, , , ) = priceFeed.latestRoundData(); // ETH/USD rate in 18 digit return uint256(answer * 10000000000); } // 1000000000 // call it get fiatConversionRate, since it assumes something about decimals // It wouldn't work for every aggregator function getConversionRate(uint256 ethAmount, AggregatorV3Interface priceFeed) internal view returns (uint256) { uint256 ethPrice = getPrice(priceFeed); uint256 ethAmountInUsd = (ethPrice * ethAmount) / 1000000000000000000; // the actual ETH/USD conversation rate, after adjusting the extra 0s. return ethAmountInUsd; } }