I'd been building with v3.4 of Zeppelin contracts for a while without issues. I just started a new project using v4.4.0 and I'm getting the following error when I try and publish my contract publish_source = True:

KeyError: 'OpenZeppelin/[email protected]/Address'

I'm using Brownie v1.16. I saw another user post that they solved a similar issue by upgrading to Brownie v1.17. However I'm even having issues doing that. For example, if I try to to update Brownie, it will say I have the latest version - 1.16. So I have tried to force update to 1.17 and I get the following error:

ERROR: Could not find a version that satisfies the requirement vyper==0.3.1 (from eth-brownie)

...So then I try and install vyper 0.3.1, and that presents another error: ERROR: No matching distribution found for vyper==0.3.1

I'm at a loss as to where to go from here, I'm hoping I can solve my original issue by upgrading to Brownie 1.17, however I cannot even manage to get that to happen.

Thanks for any help in advance.

  • Can you post your brownie-config.yaml? Commented Dec 13, 2021 at 18:48
  • 1
    I've managed to sort it out after going around in a lot of circles. Basically the solution was to force install using python 3.9. I tried using pyenv but it still defaulted to 3.10 and vyper wouldn't update. Once I was able to install vyper with 3.9, then I could install brownie v1.17.2. From there I just had to update my brownie-config.yaml file with a few missing fields and it worked. BTW love your videos Patrick, they've been the primary way I've managed to get an understanding of building smart contracts.
    – edhog
    Commented Dec 14, 2021 at 7:54

2 Answers 2


My issue seemed to come from having Python 3.10 installed. I was finally able to install Vyper v0.3.1 after I downgraded Python. From there, Brownie 1.17.2 installed without issue. Finally, in order to be able to deploy a contract with Brownie 1.17.2, I was missing some data in my brownie-config.yaml file that 1.16.0 didn't seem to mind not having. I added in the missing data as per the brownie docs and this finally let me deploy and validate my contract on Etherscan.

  • What version of Python did you downgrade to?
    – JDOaktown
    Commented Dec 28, 2021 at 20:06
  • 2
    Just down to v3.9.0
    – edhog
    Commented Dec 29, 2021 at 11:03

I had the similar issue, occurring upon publish my NFT contract: I was using brownie v1.16.4 and recently moved to OpenZeppelin [email protected] Publish/Verification of certain contract stopped working with brownie 1.16.x when using 4.6.x version of OpenZeppelin contracts (particularly certain contracts object such token/ERC721URIStorage) .

Here what I did, step by step :

  1. Uninstall brownie : pip uninstall eth-brownie or pipx uninstall eth-brownie

  2. Downgrade my python 3.10 to 3.9.12 as Brownie v1.18.1 complains about python v3.10. There are some dependencies that Brownie v1.18.1 required, and those require a python version to be between > 3.7 and < 3.10. This why pip install from latest version/git would always resulted in you getting a Brownie v16.4.1 version. I have installed python 3.9.12 via pyenv

  3. Now you have downgraded your python version, you need to update your path and make sure that you are no longer referencing python v3.10, but python 3.9.12. For me my I updated my path by editing /Users//.zprofile and .zshrc and updating those files wherever python v3.10/bin was referenced to my freshly installed directory : /Users//.pyenv/versions/3.9.12/bin

  4. make sure your python version is correct now. You might need to restart your terminal after previous step. command python3 --version or python --version should now return python 3.9.12.

  5. re-install Brownie using the command pip install eth-brownie. Brownie should now download all required libraries and packages from the latest stable version (as of today we are on v.1.18.1)

  6. Kill your terminal, and retry to deploy your smart contract using publish-source=True (web3.py) and things should flow correctly.

Good luck :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.