EIP-1822: l’Estàndard de Proxy Actualitzable Universal (UUPS)

L’estàndard Proxy Actualitzable Universal (UUPS) és un patró de disseny utilitzat a Solidity. S’utilitza per mitigar el risc que una actualització d’un contracte intel·ligent provoqui conseqüències no desitjades o trenqui la funcionalitat del contracte.

El patró UUPS implica la creació d’un nou contracte que és una versió actualitzada del contracte original. El nou contracte es desplega i el contracte original s’actualitza per delegar totes les seves funcionalitats al nou contracte. D’aquesta manera, el contracte original es pot actualitzar sense afectar la funcionalitat, ja que totes les crides al contracte original es redirigeixen al nou contracte.

pragma solidity ^0.5.0;

contract UUPS {
    address public newContract;

    constructor(address _newContract) public {
        newContract = _newContract;
    }

    function delegateCall(bytes memory _data) public {
        (bool success, bytes memory returnData) = address(newContract).delegatecall(_data);
        require(success, "Delegate call failed");
        return returnData;
    }
}

Aquest contracte té una adreça pública newContract que s’estableix al constructor. També té una funció delegateCall que pren algunes dades com a entrada i delega la crida a l’adreça newContract. Això permet als usuaris cridar al contracte UUPS i que es desviï al nou contracte, sense necessitat d’actualitzar els seus propis contractes o aplicacions per utilitzar directament el nou contracte.

Leave a comment