-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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: