【Hardhat 验证Solidity】

使用Hardhat插件验证

yarn add --dev @nomicfoundation/hardhat-verify
  • 获取BSC API KEY,在官网注册登录获取API KEY,官网
  • hardhat.config.js配置
require("@nomicfoundation/hardhat-verify");

module.exports = {
  defaultNetwork: "hardhat",
  networks: {
    bsctest: {
      url: BSCTEST_RPC_URL,
      accounts: [PRIVATE_KEY],
      gasPrice: 1500000000,
      chainId: 97
    }
  },
  solidity: "0.8.19",
  etherscan: {
    apiKey: BSCSCAN_API_KEY
  }
};
  • 配置好后,执行yarn hardhat验证是否有出现verify命令
yarn hardhat
AVAILABLE TASKS:
...
verify                Verifies a contract on Etherscan
  • SimpleStorage.sol
// I'm a comment!
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

// pragma solidity ^0.8.0;
// pragma solidity >=0.8.0 <0.9.0;

contract SimpleStorage {
    uint256 favoriteNumber;

    struct People {
        uint256 favoriteNumber;
        string name;
    }
    // uint256[] public anArray;
    People[] public people;

    mapping(string => uint256) public nameToFavoriteNumber;

    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve() public view returns (uint256) {
        return favoriteNumber;
    }

    function addPerson(string memory _name, uint256 _favoriteNumber) public {
        people.push(People(_favoriteNumber, _name));
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}

  • deploy.js
const { ethers, run, network } = require("hardhat")
require("dotenv").config()

async function main() {
  const simpleStorageFactory = await ethers.getContractFactory("SimpleStorage")
  console.log("Deploying contract...")
  const simpleStorage = await simpleStorageFactory.deploy()
  await simpleStorage.waitForDeployment()
  console.log(`Deployed contract address: ${ simpleStorage.target }`)
  // 只在BSC Testnet 网络上才验证
  if(network.config.chainId == 97 && process.env.BSCSCAN_API_KEY) {
    console.log("Waiting for block txes...")
    await simpleStorage.waitForDeployment(6)
    await verify(simpleStorage.target, [])
  }

  const currentValue = await simpleStorage.retrieve()
  console.log(`Current Value is : ${ currentValue }`)

  const transactionResponse = await simpleStorage.store(7)
  simpleStorage.waitForDeployment(1)
  const updatedValue = await simpleStorage.retrieve()
  console.log(`Updated Value is: ${ updatedValue }`)
}

async function verify(contractAddress, args) {
  console.log("Verifying Contract...")
  try{
    await run("verify:verify", {
      address: contractAddress,
      constructorArgsParams: args
    })
  } catch(error) {
    if(error.message.toLowerCase().includes("already verified")) {
      console.log("Already Verified!")
    } else {
      console.log(error)
    }
  }
  
}

main().then(() => {
  process.exit(0)
}).catch((error) => {
console.log(error)
process.exit(1)
})
  • 执行命令
yarn hardhat run .\scripts\deploy.js --network bsctest
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值