Proxy

Securite

Definition

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()) }
        }
    }
}

Pratique ce concept sur Solingo

Maîtrise Proxy avec des exercices interactifs et un IDE intégré.

Commencer gratuitement