Skip to main content

EIP712StETH

EIP712StETH sirve como un contrato auxiliar dedicado para stETH, crucial para el soporte completo de las aprobaciones firmadas compatibles con ERC-2612.

Por qué se necesita este auxiliar

El contrato original Lido/StETH está implementado en Solidity 0.4.24, mientras que este auxiliar está implementado en Solidity 0.8.9. La versión más nueva del compilador permite acceder al chain id actual de la red a través de la variable globalmente disponible block.chainid. El chain id es obligatorio para incluir en la firma según EIP-155 para prevenir ataques de repetición, donde un atacante intercepta una transmisión válida de red y luego la retransmite en otro fork de la red. Por lo tanto, el cumplimiento de EIP-155 es crucial para asegurar las aprobaciones firmadas de ERC-2612.

Métodos de vista

domainSeparatorV4()

Este método devuelve el separador de dominio hash compatible con EIP712, que es válido para las firmas de permisos del token stETH. El separador de dominio es esencial para evitar que una firma destinada a una dApp funcione en otra (evitando así colisiones de firma en un sentido más amplio).

function domainSeparatorV4(address _stETH) returns (bytes32)

También considera el método eip712Domain() que puede construir un separador de dominio a partir de campos específicos de StETH en el lado del cliente, como dentro de una dApp o una cartera. Por ejemplo, Metamask utiliza eth_signTypedData_v4, que requiere que se proporcione un separador de dominio no hash.

hashTypedDataV4()

Este método devuelve el hash de un mensaje totalmente codificado compatible con EIP712 para este dominio. El método puede validar los datos de entrada contra los componentes v, r, s secp256k1 proporcionados.

function hashTypedDataV4(address _stETH, bytes32 _structHash) returns (bytes32)

Parámetros

NombreTipoDescripción
_stETHaddressDirección del token stETH desplegado
_structHashbytes32Hash de la estructura de datos

Para un caso de uso específico, consulta la implementación de StETHPermit.permit().

eip712Domain()

Este método devuelve los campos y valores necesarios para construir un separador de dominio en el lado del cliente. El método se asemeja al propuesto en ERC-5267, con la única diferencia de que no devuelve campos no utilizados.

function eip712Domain(address _stETH) returns (
string memory name,
string memory version,
uint256 chainId,
address verifyingContract
)

Parámetros

NombreTipoDescripción
_stETHaddressDirección del token stETH desplegado

Devoluciones

NombreTipoDescripción
namestringNombre del token
versionstringVersión del token
chainIduint256Identificador de la cadena
verifyingContractaddressDirección del contrato del token
note

Dada la dirección _stETH desplegada correcta, devuelve:

  • ("Liquid staked Ether 2.0", "2", 1, 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84) para Mainnet.
  • ("Liquid staked Ether 2.0", "2", 5, 0x1643E812aE58766192Cf7D2Cf9567dF2C37e9B7F) para Görli.

Este método facilita la construcción del separador de dominio en el lado del cliente, como en una cartera o widget:

function makeDomainSeparator(name, version, chainId, verifyingContract) {
return web3.utils.keccak256(
web3.eth.abi.encodeParameters(
['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'],
[
web3.utils.keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
web3.utils.keccak256(name),
web3.utils.keccak256(version),
chainId,
verifyingContract,
],
),
)
}

Enlaces Externos Útiles