Verify Smart Contract Programmatically

Verify Smart Contract Programmatically

The recommended way to verify a smart contract is using plugin. It is easier to read, imports are maintained, licenses are maintained.

Verified using Truffle


GitHub Project:


Truffle has an BscScan plugin: truffle-plugin-verify

You need to deploy with Truffle to verify with the Truffle verify plugin.

  • Install the plugin
npm install -D truffle-plugin-verify

What is BscScan API?

  • Configure the plugin in truffle-config.js
const HDWalletProvider = require("@truffle/hdwallet-provider");

const { mnemonic, BSCSCANAPIKEY} = require('./env.json');

module.exports = {

  plugins: [
  api_keys: {
    bscscan: BSCSCANAPIKEY
  networks: {

    testnet: {
        provider: () => new HDWalletProvider(mnemonic, ``),
        network_id: 97,
        timeoutBlocks: 200,
        confirmations: 5,
        production: true    // Treats this network as if it was a public net. (default: false)

  // Set default mocha options here, use special reporters etc.
  mocha: {
    timeout: 100000

// Configure your compilers
  compilers: {
    solc: {
       version: "0.5.16",    // Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      settings: {          // See the solidity docs for advice about optimization and evmVersion
       optimizer: {
         enabled: false,
         runs: 200
       evmVersion: "byzantium"
  • Verify
truffle run verify SomeContractName AnotherContractName --network networkName [--debug]

For example:

truffle run verify BEP20Token@{contract-address} --network testnet

You should see the following output:

Verifying BEP20Token@0x68D2E27940CA48109Fa3DaD0D2C8B27E64a0c6cfPass - Verified: