Making Upgradable Natively w/o hardhat

Hey Guys,

I am trying to deploy a upgradable contract using TransaparentUpgrdableProxy. This is what I do right now

Deploy my impl contract. Then I deploy my Proxy Admin contract and then deploy my proxy setting the addr of impl and Proxy Admin.

I am not using Hardhat right now, but in Hardhat plugin I see a feature of Manifest. Now, what exactly is this? Is this something that helps me keep track of my ProxyAdmin Address?

Plus how safe is it to deploy Proxies without really using Hardhat as I need to build it in another hardhat-like library which does not have hardhat supports.

Manifests are the network files that keep track of your deployments. The OpenZeppelin Upgrades Plugins use network files to track addresses (including proxy admin, proxies, and implementations), and also storage layouts of the implementation contracts. The storage layouts in particular are important for comparing storage layouts between old and new versions of your implementation contracts.

Upgrades Plugins:
We recommend using the Upgrades Plugins because they validate that your implementation contracts are upgrade safe. This includes storage layout comparisons when upgrading.

  • The Hardhat/Truffle upgrades plugins can be used for deployments where the validations are performed automatically, or you can run the validations separately (such as in tests).

  • There is also a standalone API in @openzeppelin/upgrades-core to perform validations outside of Hardhat/Truffle. This API works with Solidity input/output JSONs. You can see these testcases for examples of how the standalone API can be used.

Hi @ericglau. Thanks for the reply

In the standalone.test.js can you tell me how I get t.context.solcInput or what exactly it means. I am trying to do it in another library and IDK how to fetch it in that library

solcInput and solcOutput are the JSON formatted inputs and outputs for the Solidity compiler.

Different tools have different ways of getting these inputs/outputs.

For example, in Hardhat, they can be obtained from the Build Info file, which itself can be retrieved with hre.artifacts.getBuildInfo or from the artifacts/build-info folder.