Verify Contracts

Verifying your smart contract makes its source code publicly visible and auditable on the block explorer, creating transparency and trust. Here are the recommended methods to verify contracts on the Sonic mainnet explorer and the Sonic testnet explorer.

Method 1: Hardhat VerificationMethod 2: Programmatic Verification Method 3: Manual VerificationMethod 4: Flattened SourceTroubleshooting

The most streamlined way to verify contracts is using Hardhat with hardhat-toolbox:

  1. Install Hardhat toolbox:

npm install --save-dev @nomicfoundation/hardhat-toolbox
  1. Configure hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: "0.8.26",
  networks: {
    sonic: {
      url: "https://rpc.soniclabs.com",
      chainId: 146,
      accounts: [SONIC_PRIVATE_KEY]
    },
    sonicTestnet: {
      url: "https://rpc.testnet.soniclabs.com",
      chainId: 57054,
      accounts: [SONIC_PRIVATE_KEY]
    }
  },
  etherscan: {
    apiKey: {
      sonic: "YOUR_SONICSCAN_API_KEY",
      sonicTestnet: "YOUR_SONICSCAN_TESTNET_API_KEY" 
    },
    customChains: [
      {
        network: "sonic",
        chainId: 146,
        urls: {
          apiURL: "https://api.sonicscan.org/api",
          browserURL: "https://sonicscan.org"
        }
      },
      {
        network: "sonicTestnet",
        chainId: 57054,
        urls: {
          apiURL: "https://api-testnet.sonicscan.org/api",
          browserURL: "https://testnet.sonicscan.org"
        }
      }
    ]
  }
};
  1. Store your SonicScan API key in a .env file:

  1. Verify your contract:

Method 2: Programmatic Verification

For automated deployments, you can verify contracts programmatically in your deployment scripts:

Method 3: Manual Verification

If automated methods fail, you can verify manually through the explorer interface:

  1. Go to the Sonic explorer (or the testnet explorer)

  2. Navigate to your contract address

  3. Click the Contract tab and Verify & Publish

  4. Fill in the verification details:

    • Contract address

    • Compiler type (single file recommended)

    • Compiler version (must match deployment)

    • Open-source license

    • Optimization settings (if used during deployment)

  5. If your contract has constructor arguments:

    • Generate ABI-encoded arguments at e.g. HashEx

    • Paste them in the Constructor Arguments field

  6. Complete the captcha and submit

Method 4: Flattened Source

For contracts with complex dependencies that fail standard verification:

  1. Install Hardhat flattener:

  1. Flatten your contract:

  1. Clean up the flattened file:

    • Keep only one SPDX license identifier

    • Keep only one pragma statement

    • Use this file for manual verification

Troubleshooting

Common verification issues to check:

  • Compiler version must match deployment exactly

  • Optimization settings must match deployment

  • Constructor arguments must be correctly ABI-encoded

  • Library addresses must be provided if used

  • Source code must match deployed bytecode exactly

  • Flattened files should not have duplicate SPDX/pragma statements

Last updated