-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Make ValidatorManager
contracts compatible with OpenZeppelin upgrades plugins
#648
Comments
Hi @Nuttymoon ,
This was a pattern that was introduced in ICTT to enable non-upgradeable versions of the upgradeable contracts through a thin shim, rather than repeating contract logic across separate contracts (such as Openzeppelin's We don't currently support the non-upgradeable case for the
External library support is imperative to reducing the contract size to stay under the EIP-170 contract size limit that's enforced by Subnet EVM chains as well as the C-Chain. We could replace external libraries with standalone contracts, but that would only complicate the deployment process for the same end result. I think skipping this check as you described is reasonable. |
Another add on to @cam-schultz 's point above, OZ in their upgradeable contracts recommend calling |
Indeed. Adding |
Context and scope
The current implementations of
ValidatorManager
(PoAValidatorManager
,ERC20TokenStakingManager
,NativeTokenStakingManger
) have multiple incompatibilities with the OpenZeppelin upgrades plugin, making the safety validation fail.This limits the reusability of the contracts outside of the
teleporter
/ Avalanche CLI context (ofc developers can still disable the safety validation, but this is far from ideal).The 2 incompatibilities are:
constructor
defined in all contractsexternal
functions present in theValidatorMessages
libraryas we can see with these errors raised when trying to deploy a
PoAValidatorManager
withUpgrades.deployTransparentProxy
:Solving those doesn't seem too complicated:
constructor
ValidatorMessages
functionsinternal
Discussion and alternatives
This might be a non-issue if you want ALL deployments of such contracts to be done through the Avalanche CLI (and not via Forge).
A workaround for the external libraries check would be to add
@custom:oz-upgrades-unsafe-allow external-library-linking
to all contracts.Another alternative is to deploy the contracts more manually (deploy the implementation, then the proxy, etc.) but this is more error-prone.
Open questions
constructor
that usesICMInitializable
?ValidatorMessages
functionsinternal
?The text was updated successfully, but these errors were encountered: