Delegatecall

EVM

Definition

Opcode permettant à un contrat d'exécuter le code d'un autre contrat dans son propre contexte (storage, msg.sender, msg.value). Utilisé pour les proxies et bibliothèques. Très puissant mais dangereux : peut modifier le storage de manière inattendue si mal utilisé. Différent de `call` qui exécute dans le contexte du contrat appelé.

English version

Opcode allowing a contract to execute another contract's code in its own context (storage, msg.sender, msg.value). Used for proxies and libraries. Powerful but dangerous if misused.

Exemple de Code

contract Proxy {
    address public implementation;

    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 Delegatecall avec des exercices interactifs et un IDE intégré.

Commencer gratuitement