Proxy
SecuriteDefinition
Pattern de contrat permettant les mises à jour (upgradability). Le proxy contient le storage et délègue la logique à un contrat d'implémentation via `delegatecall`. Permet de corriger des bugs ou ajouter des fonctionnalités sans perdre les données. Patterns : Transparent Proxy, UUPS, Diamond.
English version
Contract pattern enabling upgradability. Proxy holds storage and delegates logic to implementation contract via `delegatecall`. Allows fixing bugs or adding features without losing data.
Exemple de Code
contract SimpleProxy {
address public implementation;
address public admin;
constructor(address _implementation) {
implementation = _implementation;
admin = msg.sender;
}
function upgrade(address newImplementation) external {
require(msg.sender == admin, "Not admin");
implementation = newImplementation;
}
fallback() external payable {
address impl = implementation;
assembly {
calldatacopy(0, 0, calldatasize())
let result := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)
returndatacopy(0, 0, returndatasize())
switch result
case 0 { revert(0, returndatasize()) }
default { return(0, returndatasize()) }
}
}
}Termes Lies
Pages Liees
Pratique ce concept sur Solingo
Maîtrise Proxy avec des exercices interactifs et un IDE intégré.
Commencer gratuitement