Delegatecall
EVMDefinition
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()) }
}
}
}Termes Lies
Pages Liees
Pratique ce concept sur Solingo
Maîtrise Delegatecall avec des exercices interactifs et un IDE intégré.
Commencer gratuitement