# How to verify upgradeable contract?

**URL:** <https://forum.openzeppelin.com/t/how-to-verify-upgradeable-contract/6285>\
**Category:** Upgrades\
**Created:** [March 13, 2021, 9:08pm UTC](https://forum.openzeppelin.com/t/how-to-verify-upgradeable-contract/6285 "2021-03-13T21:08:32Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![abcoathup](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/abcoathup/32/415_2.png) [@abcoathup](https://forum.openzeppelin.com/u/abcoathup)\
**Post date:** [March 16, 2021, 4:11am UTC](https://forum.openzeppelin.com/t/how-to-verify-upgradeable-contract/6285/7 "2021-03-16T04:11:19Z")

</div>

Hi @lustig,

> [@lustig](#):
>
> Since the command line interface is not working for me to verify the single, unflattened contract, do you have any other recommendations?

You should be able to use [https://github.com/rkalis/truffle-plugin-verify#debugging](https://github.com/rkalis/truffle-plugin-verify#debugging) with the implementation address. If you get stuck, please create a new topic with your Solidity, address etc.

> [@lustig](#):
>
> my “upgrades” of the implementation proxy appear to be deploying new contracts altogether.

In your migrations you are actually deploying a new contract using `deployProxy`.

[https://github.com/technoplato/nash/blob/upgrading/migrations/3\_nash\_v3.js#L7](https://github.com/technoplato/nash/blob/upgrading/migrations/3_nash_v3.js#L7)

You need to get the address of the proxy and just call `upgradeProxy`.

See the following example from the documentation:

```auto
// migrations/MM_upgrade_box_contract.js
const { upgradeProxy } = require('@openzeppelin/truffle-upgrades');

const Box = artifacts.require('Box');
const BoxV2 = artifacts.require('BoxV2');

module.exports = async function (deployer) {
  const existing = await Box.deployed();
  const instance = await upgradeProxy(existing.address, BoxV2, { deployer });
  console.log("Upgraded", instance.address);
};

```

\_From: [https://docs.openzeppelin.com/upgrades-plugins/1.x/truffle-upgrades#migrations-usage\_](https://docs.openzeppelin.com/upgrades-plugins/1.x/truffle-upgrades#migrations-usage_)

> [@lustig](#):
>
> I even have a test as advised from the documentation on unit testing the upgrade

We can unit test our implementation contracts, just like any other contract and deploy using `.new`.

We can also write higher level tests using `deployProxy` and `upgradeProxy`.

For an example please see [OpenZeppelin Upgrades: Step by Step Tutorial for Truffle](https://forum.openzeppelin.com/t/openzeppelin-upgrades-step-by-step-tutorial-for-truffle/3579)

Also the example in the documentation: [https://docs.openzeppelin.com/upgrades-plugins/1.x/truffle-upgrades#test-usage](https://docs.openzeppelin.com/upgrades-plugins/1.x/truffle-upgrades#test-usage)

* * *

As an aside, I recommend creating a new topic per major question so that anyone can answer.

---

_[View the full topic](https://forum.openzeppelin.com/t/how-to-verify-upgradeable-contract/6285)._
