# Verifying logic of upgradable contract

**URL:** <https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752>\
**Category:** Contracts\
**Tags:** etherscan-verify\
**Created:** [November 26, 2021, 10:59am UTC](https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752 "2021-11-26T10:59:20Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lankinen](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/lankinen/32/5794_2.png) [@Lankinen](https://forum.openzeppelin.com/u/Lankinen)\
**Post date:** [November 26, 2021, 10:59am UTC](https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752/1 "2021-11-26T10:59:20Z")

</div>

"The implementation contract at does not seem to be verified." When trying to verify proxy on Etherscan.

I'm trying to verify OZ upgradable contract to interact with it more easily on Etherscan. I deploy the contract using Truffle and everything seems to go well. It deployed two contracts: [0x9412f6C7C73b218438CC1B3D701170e64Dab6C0d](https://rinkeby.etherscan.io/address/0x9412f6c7c73b218438cc1b3d701170e64dab6c0d#code) and [0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517](https://rinkeby.etherscan.io/address/0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517#code).

The first contract seems to be the proxy and it was verified by default. I guess the other contract is the logic because it was in the proxy part. It's not verified and I'm not available to verify it using the normal command `truffle run verify TestUpgradeable --network rinkeby`.

I found one tutorial that said I needed to verify on Etherscan the contract as a proxy. I did it but instead of succeeding, I get an error like this:  
 ![image](https://us1.discourse-cdn.com/flex022/uploads/zeppelin/original/2X/1/1bfe563bd2de0a697b3ce512e7afc05fa9286412.png)

I couldn't find anything online

---

<div class="post-metadata">

**Author:** ![Amxx](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/amxx/32/668_2.png) [@Amxx](https://forum.openzeppelin.com/u/Amxx)\
**Post date:** [November 26, 2021, 2:49pm UTC](https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752/2 "2021-11-26T14:49:02Z")

</div>

Hello @Lankinen

The error message is self explanatory!

You are trying to verify the proxy contract at address [0x9412f6C7C73b218438CC1B3D701170e64Dab6C0d](https://rinkeby.etherscan.io/address/0x9412f6c7c73b218438cc1b3d701170e64dab6c0d). This proxy points to an implementation at address [0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517](https://rinkeby.etherscan.io/address/0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517). The implementation code is not verified.

You need to verify this code before you can verify the proxy. I'm not sure how `truffle run verify` works ... but on hardhat I would do

```auto
hardhat verify --network rinkeby 0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517 <constructor args>

```

---

<div class="post-metadata">

**Author:** ![Lankinen](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/lankinen/32/5794_2.png) [@Lankinen](https://forum.openzeppelin.com/u/Lankinen)\
**Post date:** [November 27, 2021, 10:36am UTC](https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752/3 "2021-11-27T10:36:44Z")

</div>

Thanks for the answer. It seems like Truffle verify requires to have a contract defined [https://github.com/rkalis/truffle-plugin-verify](https://github.com/rkalis/truffle-plugin-verify) like this `truffle verify ContractName`.

I tried to run this `truffle run verify TestUpgradeable@0x9412f6c7c73b218438cc1b3d701170e64dab6c0d --network rinkeby` and it says that it was successfully verified. But it's the proxy and when I try to run the same for logic contract `truffle run verify TestUpgradeable@0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517 --network rinkeby`  
It returns this error message:

```auto
Verifying TestUpgradeable@0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517
Invalid constructor arguments provided. Please verify that they are in ABI-encoded format
Failed to verify 1 contract(s): TestUpgradeable@0xC1C3A288DAEFECCA0F43B4BB8a5b075A2A244517

```

---

<div class="post-metadata">

**Author:** ![frangio](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/frangio/32/15251_2.png) [@frangio](https://forum.openzeppelin.com/u/frangio)\
**Post date:** [December 2, 2021, 2:24am UTC](https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752/4 "2021-12-02T02:24:29Z")

</div>

For future reference please refer to our megathread about Etherscan verification which includes a section about proxies/upgradeable contracts.

> [@How to verify a contract on Etherscan/BscScan/PolygonScan](https://forum.openzeppelin.com/t/how-to-verify-a-contract-on-etherscan-bscscan-polygonscan/14225#upgradeable-contracts-and-proxies-10):
>
> Make sure to read this post before asking a question about verification. If your issue is not addressed here, just leave a comment below. If you want to pay someone to do the verification for you, create a post in #Smart Contracts > Developer Wanted. This guide applies to [all Etherscan instances](https://etherscan.io/eaas), including all of the following as well as their testnet explorers: [etherscan.io](http://etherscan.io) (Ethereum) [bscscan.com](http://bscscan.com) (Binance Smart Chain) [polygonscan.com](http://polygonscan.com) (Polygon) [snowtrace.io](http://snowtrace.io) (Avalanche) Recommendations Prac…

---

<div class="post-metadata">

**Author:** ![Lankinen](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/lankinen/32/5794_2.png) [@Lankinen](https://forum.openzeppelin.com/u/Lankinen)\
**Post date:** [December 4, 2021, 10:07am UTC](https://forum.openzeppelin.com/t/verifying-logic-of-upgradable-contract/19752/5 "2021-12-04T10:07:45Z")

</div>

Just for the record I tried again deploying it from scratch and then I run `truffle run verify TestUpgradeable@0x9ce5c0E8DaFc4Fbc5B5945e1F0cd96A99Bf69669 --network rinkeby` where `0x9ce...` is the address of the logic contract.
