Error on ERC1967Proxy verification on https://testnet.opbnbscan.com

Hi guys. I'm having issues with contract verification on NodeReal's explorer for opBNB testnet - https://testnet.opbnbscan.com.

Error log suggests that the issue is with my configured solidity version (0.8.28) and incompatibility with proxy (presumably ERC1967Proxy). It makes sense, since I deployed the contract with deploy-proxy from @openzeppelin/hardhat-upgrades, and it uses precompiled version of ERC1967Proxy.

$ yarn hardhat verify 0x28aA1cD7114395E7a055419497135199228b8D76 --network opbnb_testnet

Verifying implementation: 0x11D09E261Dc31FcA19e08e0370797a0176Ed01d3
Implementation 0x11D09E261Dc31FcA19e08e0370797a0176Ed01d3 already verified.
Verifying proxy: 0x28aA1cD7114395E7a055419497135199228b8D76
Verifying implementation: 0x11D09E261Dc31FcA19e08e0370797a0176Ed01d3
Implementation 0x11D09E261Dc31FcA19e08e0370797a0176Ed01d3 already verified.
Verifying proxy: 0x28aA1cD7114395E7a055419497135199228b8D76
Could not find an event with any of the following topics in the logs for address 0x28aA1cD7114395E7a055419497135199228b8D76: AdminChanged(address,address), Upgraded(address)

If the proxy was recently deployed, the transaction may not be available on Etherscan yet. Try running the verify task again after waiting a few blocks.
Failed to verify directly using hardhat verify: The contract you want to verify was compiled with solidity 0.8.20, but your configured compiler versions are: 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28.

Possible causes are:
- You are not in the same commit that was used to deploy the contract.
- Wrong compiler version selected in hardhat config.
- The given address is wrong.
- The selected network (opbnb_testnet) is wrong.
Linking proxy 0x28aA1cD7114395E7a055419497135199228b8D76 with implementation
Successfully linked proxy to implementation.
Could not find an event with any of the following topics in the logs for address 0x28aA1cD7114395E7a055419497135199228b8D76: AdminChanged(address,address), Upgraded(address)

If the proxy was recently deployed, the transaction may not be available on Etherscan yet. Try running the verify task again after waiting a few blocks.
Failed to verify directly using hardhat verify:
Verification completed with the following errors.

Error 1: Could not find an event with any of the following topics in the logs for address 0x28aA1cD7114395E7a055419497135199228b8D76: AdminChanged(address,address), Upgraded(address)

If the proxy was recently deployed, the transaction may not be available on Etherscan yet. Try running the verify task again after waiting a few blocks.

Error 2: Failed to verify directly using hardhat verify: The contract you want to verify was compiled with solidity 0.8.20, but your configured compiler versions are: 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28.

Possible causes are:
- You are not in the same commit that was used to deploy the contract.
- Wrong compiler version selected in hardhat config.
- The given address is wrong.
- The selected network (opbnb_testnet) is wrong.


Linking proxy 0x28aA1cD7114395E7a055419497135199228b8D76 with implementation
Successfully linked proxy to implementation.
hardhat-verify found one or more errors during the verification process:

Etherscan:

Verification completed with the following errors.

Error 1: Could not find an event with any of the following topics in the logs for address 0x28aA1cD7114395E7a055419497135199228b8D76: AdminChanged(address,address), Upgraded(address)

If the proxy was recently deployed, the transaction may not be available on Etherscan yet. Try running the verify task again after waiting a few blocks.

Error 2: Failed to verify directly using hardhat verify:
Verification completed with the following errors.

Error 1: Could not find an event with any of the following topics in the logs for address 0x28aA1cD7114395E7a055419497135199228b8D76: AdminChanged(address,address), Upgraded(address)

If the proxy was recently deployed, the transaction may not be available on Etherscan yet. Try running the verify task again after waiting a few blocks.

Error 2: Failed to verify directly using hardhat verify: The contract you want to verify was compiled with solidity 0.8.20, but your configured compiler versions are: 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28, 0.8.28.

Possible causes are:
- You are not in the same commit that was used to deploy the contract.
- Wrong compiler version selected in hardhat config.
- The given address is wrong.
- The selected network (opbnb_testnet) is wrong.

Usually explorers like etherscan are able to automatically verify ERC1967Proxy by Similar Contracts feature, but it looks like NodeReal's explorer is missing this.

Also please note that implementation is verified without issue (as can be seen at [0x11D09E261Dc31FcA19e08e0370797a0176Ed01d3]), the issue is with proxy verification which is failing the verify script (and as expected is shown as not verified on UI - 0x28aA1cD7114395E7a055419497135199228b8D76).

One possible solution that I could try is to verify proxy myself via UI, the only thing I need is Standard Json-Input for precompiled ERC1967Proxy, unfortunately I was unable to find it in node_modules, if someone has it or know how to obtain it, please respond.

:1234: Code to reproduce

To reproduce the issue, deploy UUPS proxy with deployProxy from @openzeppelin/hardhat-upgrades and try to verify with hardhat-verify setup as described in https://docs.bnbchain.org/bnb-opbnb/advanced/verify-on-opbnbscan/#hardhat.

:laptop: Environment

I'm using hardhat with @openzeppelin/hardhat-upgrades@3.0.5. Verification is done via hardhat-verify, verify example usage is present in error log above.

here’s what’s happening:

You're trying to verify a proxy deployed using @openzeppelin/hardhat-upgrades (deployProxy), but the actual proxy contract (ERC1967Proxy) is precompiled and not part of your local source code. That’s why Hardhat can’t find any matching events or constructor logic in the verification step.

You don’t need to verify the proxy itself. Just verify the implementation contract, which it looks like you've already done:

yarn hardhat verify --network opbnb_testnet

The proxy (0x28aA1c...) is just a standard OpenZeppelin contract — no need to verify it manually unless you’ve customized it (which you probably haven’t if using default deployProxy).

Also worth noting: some explorers like NodeReal’s opBNB may not yet fully support proxy verification (like Etherscan’s upgradeable support). So trying to verify the proxy directly often fails, even when everything's fine.

hope it helps.

1 Like

@ByteoryAgency You are correct. Implementation was verified without issues, the proxy is the failing part. My original post was partially formatted to code block, where I noted this, fixed the formatting in the post, sorry about that :joy:.

I wonder what options do I have next to make the contract methods available on the explorer (since I can't point to implementation directly, it won't work). I thought about verifying proxy directly with openzeppelin's Standard-Input JSON from ERC1967Proxy build, but now I'm beginning to doubt this, since NodeReal's explorer should support proxy patterns in the first place, otherwise it won't inherit methods from implementations contract?

Is this purely on NodeReal's team to add support for proxy detection and there's nothing I can do?

Also indeed I'm using standard ERC1967Proxy w/o modifications.

You're right, the issue isn’t with your deployment but with NodeReal’s lack of full proxy support. Even if you manually verify the ERC1967Proxy, their explorer won’t display the implementation’s ABI unless it automatically links the proxy using events like Upgraded(). Etherscan handles this well, but opBNBScan may not yet support it. Best you can do now is raise a ticket with NodeReal. Your setup is correct, it's just an explorer limitation.

1 Like