验证命令可能会显示错误消息,但这通常是误导性的 —— 合约通常已在 Sourcify 和 MonadScan 上成功验证。请查看浏览器链接以确认验证情况。
- Hardhat 2
- Hardhat 3
Hardhat 2 验证
hardhat-monad 模板已预配置为同时在 MonadVision(Sourcify)和 Monadscan(Etherscan)上验证合约。如果您使用该模板,您的 hardhat.config.ts 应该已经包含:import type { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox-viem";
import "@nomicfoundation/hardhat-ignition-viem";
import "dotenv/config";
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || "";
const config: HardhatUserConfig = {
solidity: {
version: "0.8.30",
settings: {
evmVersion: "osaka",
metadata: {
bytecodeHash: "ipfs", // Required for Sourcify verification
},
},
},
networks: {
monadTestnet: {
url: "https://testnet-rpc.monad.xyz",
accounts: [PRIVATE_KEY],
chainId: 10143,
},
monadMainnet: {
url: "https://rpc.monad.xyz",
accounts: [PRIVATE_KEY],
chainId: 143,
},
},
sourcify: {
enabled: true,
apiUrl: "https://sourcify-api-monad.blockvision.org",
browserUrl: "https://monadvision.com",
},
etherscan: {
enabled: true,
apiKey: {
monadMainnet: ETHERSCAN_API_KEY,
monadTestnet: ETHERSCAN_API_KEY,
},
customChains: [
{
network: "monadMainnet",
chainId: 143,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=143",
browserURL: "https://monadscan.com",
},
},
{
network: "monadTestnet",
chainId: 10143,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=10143",
browserURL: "https://testnet.monadscan.com",
},
},
],
},
};
export default config;
npx hardhat verify <contract_address> --network monadMainnet
npx hardhat verify <contract_address> --network monadTestnet
Hardhat 3 验证
验证命令可能会显示错误消息,但这通常是误导性的 —— 合约通常已在 Sourcify 和 MonadScan 上成功验证。请查看浏览器链接以确认验证情况。
hardhat3-monad 模板已预配置为在 MonadVision(Sourcify)和 Monadscan(Etherscan)上都验证合约。Hardhat 3 使用不同的配置结构,采用 verify 键和 chainDescriptors。如果您使用该模板,您的 hardhat.config.ts 应该已经包含:import hardhatToolboxViemPlugin from "@nomicfoundation/hardhat-toolbox-viem";
import { configVariable, defineConfig } from "hardhat/config";
import "dotenv/config";
export default defineConfig({
plugins: [hardhatToolboxViemPlugin],
solidity: {
version: "0.8.31",
settings: {
evmVersion: "osaka",
optimizer: {
enabled: true,
runs: 200,
},
},
},
networks: {
hardhat: {
type: "edr-simulated",
},
monadTestnet: {
type: "http",
url: "https://testnet-rpc.monad.xyz",
accounts: [configVariable("PRIVATE_KEY")],
chainId: 10143,
},
monadMainnet: {
type: "http",
url: "https://rpc.monad.xyz",
accounts: [configVariable("PRIVATE_KEY")],
chainId: 143,
},
},
verify: {
blockscout: {
enabled: false,
},
etherscan: {
enabled: true,
apiKey: configVariable("ETHERSCAN_API_KEY"),
},
sourcify: {
enabled: true,
apiUrl: "https://sourcify-api-monad.blockvision.org",
},
},
chainDescriptors: {
10143: {
name: "MonadTestnet",
blockExplorers: {
etherscan: {
name: "Monadscan",
url: "https://testnet.monadscan.com",
apiUrl: "https://api.etherscan.io/v2/api",
},
},
},
143: {
name: "MonadMainnet",
blockExplorers: {
etherscan: {
name: "Monadscan",
url: "https://monadscan.com",
apiUrl: "https://api.etherscan.io/v2/api",
},
},
},
},
});
npx hardhat verify <contract_address> --network monadMainnet
npx hardhat verify <contract_address> --network monadTestnet

