Guía de puenteo para wstETH en rollups
Esta guía proporciona recomendaciones proporcionadas por el grupo de trabajo NEW. NEW no representa a la DAO de Lido y al proporcionar la retroalimentación, no ofrece garantías expresas o implícitas, y renuncia a todas las garantías implícitas, incluida cualquier garantía sobre la probabilidad de reconocimiento o rechazo por parte de la DAO de Lido y representación.
Introducción
Este documento está dirigido a desarrolladores que representan fundaciones de redes/rollups y DAOs que buscan llevar el token wstETH de Lido a redes Ethereum L2 (rollup).
Esta guía no cubre aún el puenteo del token stETH rebaseable ni el puenteo hacia redes que no sean L2-rollup. Sin embargo, es importante tener en cuenta que el puenteo de un token stETH rebaseable de manera convencional puede resultar en la pérdida de activos de los usuarios debido a que las recompensas acumuladas quedan atrapadas en un puente L1.
Aunque técnicamente es factible puentear el token wstETH en una red L2 como cualquier otro token ERC-20 estándar y compatible, podría no estar alineado con la visión a largo plazo de la DAO de Lido para la adopción futura de stETH y el sentimiento general de la comunidad.
Esta guía cubre las recomendaciones y proporciona directrices generales, además de explicar la lógica detrás del proceso para facilitar el proceso. Es fundamental entender que cumplir o divergir de estas directrices no asegura el reconocimiento o rechazo de una propuesta específica por parte de la DAO de Lido. No obstante, adherirse a estas directrices aumenta sustancialmente la probabilidad de obtener apoyo del Grupo de Trabajo de Expansión de Red (NEW) y la comunidad. Finalmente, la decisión final se determina mediante el proceso de votación.
Por favor, envía cualquier retroalimentación sobre la guía al grupo NEW; el documento se actualiza de manera iterativa.
¿Por qué se necesita esta guía?
Como se mencionó anteriormente, la forma estándar de puentear un token ERC-20 es desplegar un token no actualizable en L2 y utilizar el contrato de puente general. Sin embargo, esta guía propone implementar una solución más compleja.
La solución implica desplegar contratos de punto final de puente dedicados detrás de un proxy en L1 y L2, y un token actualizable en L2, todos gobernados por la DAO de Lido en L1 en el contract (Aragon Agent) a través de un contrato de governance executor dedicado en L2. Esta arquitectura se propone para proporcionar las siguientes capacidades:
- Pasar datos arbitrarios. Esto permite sentar las bases para el puenteo futuro del token stETH rebaseable (necesidad de pasar la tasa wstETH/stETH).
- Reestructurar la lógica del token, ya que stETH no es un token de propósito general sino un activo construido sobre un middleware de staking líquido.
- Asegurar el token para el futuro, por ejemplo, evitando la migración costosa de liquidez a medida que Ethereum continúa evolucionando y se adoptan nuevos estándares como ERC-2612/ERC-1271.
- Pausar y reanudar el puenteo en caso de emergencia o durante actualizaciones.
Reconocimiento de los endpoints de puenteo de wstETH de la DAO de Lido
La DAO de Lido puede reconocer los puntos de puenteo de wstETH mediante una instantánea de señalización. Por ejemplo, esto ha ocurrido con:
Si la DAO de Lido reconoce los endpoints de puenteo de wstETH, generalmente significa:
- La integración se destaca en las páginas frontend: página de inicio, widget y páginas del ecosistema.
- Cuando/se implementa la interfaz de usuario de puenteo dedicada de Lido, se incluirá la red.
- Se publica un anuncio de integración recién aparecido en el blog y Twitter de Lido.
- Los contratos de punto final están bajo el programa de recompensas por errores de seguridad de Lido bug bounty program.
- Los contratos de punto final son monitoreados mediante el sistema de alertas de Lido Lido alerting system.
- Se abre la oportunidad para obtener soporte adicional, potencialmente de LEGO o Liquidity observation Labs. Para más detalles, se debe contactar a ProRel.
Por lo general, la DAO de Lido reconoce los puntos de puenteo de wstETH si se siguen un conjunto específico de recomendaciones de seguridad y diseño. Estas recomendaciones se detallan en la sección Recomendaciones en los párrafos R-1..R-8. El cumplimiento de las recomendaciones R-9... también es importante y fomenta la probabilidad de reconocimiento.
Si se siguen las recomendaciones R-1...R-4, el token puede tener la posibilidad de ser reconocido por NEW como cumpliendo con las bases de seguridad y futurización.
Si no se sigue alguna de las recomendaciones R-1...R-4, puede haber menos probabilidad de reconocimiento por parte de la DAO de Lido o de reconocimiento por NEW.
Escenario general hacia el reconocimiento de la DAO de Lido
Esta sección describe un camino aproximado para puenteo de wstETH a una red L2. El orden de los pasos no es estricto pero sigue el flujo general.
🐾 Estudiar la guía de puenteo y completar el cuestionario sobre tu solución y enviarlo a NEW.
🐾 Coordinar sobre la prioridad, tiempos y revisiones con NEW.
🐾 Verificar la arquitectura y la configuración de despliegue por NEW.
🐾 Desplegar los contratos en testnet. Obtener la verificación del despliegue en testnet coordinando con NEW.
🐾 Expresar la intención de puentear wstETH en el foro, detallando los detalles y plan técnico. Considerar:
- Apuntar a una red por propuesta para enfocar la discusión.
- El post debe ser publicado con anticipación, idealmente al menos dos semanas antes de cualquier voto de instantánea potencial, para permitir tiempo para la discusión y verificación de la propuesta.
- Las direcciones de despliegue no son necesarias de inmediato pero deben ser propuestas al menos una semana antes de que comience la votación de instantánea.
- Si la solución propuesta no incluye algunas de las recomendaciones (R-5...), considera incluir el roadmap y comprometerte a entregarlo.
- Ejemplos:
🐾 Desplegar los contratos en mainnet. Obtener la verificación del despliegue en mainnet por parte de un grupo de seguridad externo (contactando con NEW).
🐾 Pasar la votación de snapshot en https://snapshot.org/#/lido-snapshot.eth/. Debe contener las direcciones finales de mainnet y auditorías según R-1. De lo contrario, se requeriría una votación adicional de snapshot con las direcciones.
Aquí también hay un árbol de decisiones aproximado para guiar este escenario.
Asegúrate de que la interfaz de puenteo oficial utilice el contrato de punto final de puente personalizado. El uso del contrato de puente predeterminado en el pasado causó problemas, haciendo que los fondos depositados quedaran bloqueados dentro del contrato.
Si necesitas más detalles o ayuda con algún punto específico, estaré aquí para ayudarte.
Recomendaciones
Esta sección enumera recomendaciones de diseño y seguridad para una solución de puente de wstETH.
Baseline de seguridad y preparación para el futuro
Se recomienda encarecidamente seguir las siguientes recomendaciones para aumentar las posibilidades de reconocimiento por parte de Lido DAO o la aprobación por NEW.
R-1: Código auditado y despliegue verificable
Todo el código en cadena (rollup, puente, token) debe ser auditado por un tercero. Por favor, contacte a NEW para verificar si el proveedor de auditoría no está familiarizado con el código base del protocolo Lido (ver proveedores aquí: https://github.com/lidofinance/audits/).
El despliegue debe ser verificable:
- todo el código accesible y el commit final de los contratos inteligentes desplegados corresponde estrictamente al informe de auditoría;
- código fuente verificado en el explorador;
- bytecode verificable (por ejemplo, a través del explorador o llamadas RPC);
- configuración correcta de los mecanismos.
Para enviar fuentes para su verificación en el explorador, por favor use la entrada JSON estándar, no aplanada.
Para acelerar el proceso y hacerlo más robusto, por favor proporcione los artefactos (es decir, Pull Requests abiertos) para las herramientas automatizadas:
-
verificar las fuentes a través de diffyscan, ejemplos:
-
verificar la configuración y estado de almacenamiento a través de state-mate, ejemplos:
R-2: Mecánica de puente "Lock and mint"
Utilizar el mecanismo de puente "lock-and-mint".
El enfoque de seguridad general aquí es aislar los riesgos de L2/cross-chain, asegurando que no se impongan riesgos adicionales al protocolo Lido en Ethereum ni a otros L2 y L1 alternativos con wstETH ya puenteados. Esto es casi imposible con una arquitectura de "burn-and-mint".
R-3: Uso de puente canónico
Se recomienda encarecidamente el uso del puente canónico para la red L2. Si el puente nativo no existe, no es un bien público o es de código cerrado, pueden ser adecuadas las opciones "canónicas similares".
R-4: Token wstETH en L2 debe ser actualizable
El contrato de token puenteador debe ser desplegado detrás de un proxy con la capacidad de establecer el administrador del proxy caso por caso (o incluso eventualmente osificarse). Esto permite que el token sea resistente al futuro (soporte de nuevos estándares, paso de datos adicionales, etc.) y proporciona una base para el puenteador potencial de stETH sin incurrir en fragmentación de liquidez.
Si no se despliega un contrato de puenteador dedicado detrás de un proxy (R-5), debe proporcionar la capacidad de establecer/cambiar la instancia del contrato de puente usado.
Recomendaciones para el reconocimiento por Lido DAO por NEW
Las recomendaciones R-5...R-8 son muy recomendadas para seguir para el reconocimiento de los endpoints de wstETH puenteados por Lido DAO.
Las recomendaciones a partir de R-9 también son recomendadas y pueden contribuir significativamente a la probabilidad de reconocimiento por parte de Lido DAO.
R-5: Decisiones de la Lido DAO sobre el puenteado L1
Se debe establecer un contrato de ejecutor de gobernanza dedicado como administrador de los contratos de endpoint de L2.
Ejemplos:
OptimismBridgeExecutor
;- Ejecutor de puente en Base - reutilización del contrato
OptimismBridgeExecutor
; ZkSyncBridgeExecutor
LineaBridgeExecutor
ScrollBridgeExecutor
Para más ejemplos, consulte los Ejecutores de Puente de Gobernanza en https://docs.lido.fi/deployed-contracts/#lido-on-l2. Los contratos provienen de Puentes Cruzados de Gobernanza de Aave y se pueden encontrar en https://github.com/lidofinance/governance-crosschain-bridges y PRs.
R-6: Instancias dedicadas de puente actualizables
Despliega instancias dedicadas de contratos de puente en L1 y L2. Las instancias del contrato deben ser desplegadas detrás de un proxy con la capacidad de establecer el administrador del proxy caso por caso (o incluso eventualmente osificarse). Esto permite establecer las bases para las capacidades de emergencia (R-7) y para el posible puenteado de stETH rebaseable. Para más detalles sobre por qué, ver la sección ¿Por qué se necesita esta guía?. Para el esquema de referencia y configuración de permisos, ver la sección Arquitectura de referencia y configuración de permisos.
R-7: Depósitos y retiros pausables
Para proporcionar la capacidad de reaccionar rápidamente y reducir pérdidas en caso de una contingencia de seguridad, los depósitos y retiros deben poder pausarse. Específicamente:
- El punto final del puente en L1 debe permitir depósitos pausables y reanudables;
- El punto final del puente en L2 debe permitir retiros pausables y reanudables.
Los contratos de punto final del puente deben tener la capacidad de establecer roles de resumen y pausa caso por caso. Para el rol de pausa, debe haber al menos dos titulares posibles para poder asignar el Multisig de Emergencia dedicado, ratificado por Lido DAO, como segundo titular del rol.
Para limitar el poder del Multisig, se propone utilizar el mecanismo "Gate Seals". Este mecanismo limita la duración de la pausa y restringe la capacidad de pausar a un solo uso. Para otorgar la capacidad repetidamente, se requiere un voto de Lido DAO. El mecanismo ha sido implementado, por ejemplo, para retiros en el protocolo Lido en Ethereum en dos partes:
- pausador desechable de un solo uso Gate Seals;
- contrato PausableUntil (heredado por WithdrawalQueue).
R-8: Soporte para permiso ERC-2612 mejorado con EIP-1271
El wstETH puenteador debe soportar la extensión de token ERC-20 con permiso EIP-2612 con el método estándar EIP-1271 para la validación de firmas de contratos. Esto allana el camino para la adopción de Abstracción de Cuentas, ver https://eip1271.io/.
Por favor, ten en cuenta que la implementación de OpenZeppelin ERC20 con permiso (EIP-2612) no soporta la validación de firmas de contratos inteligentes EIP-1271 y por lo tanto no debe ser utilizada tal cual. Considera extender ERC20Permit utilizando utilidad SignatureChecker de OpenZeppelin o el contrato StETHPermit como implementación de referencia. Es importante destacar que el token wstETH en Ethereum en sí no soporta esto debido a su no-upgradabilidad.
R-9: Estado del token/puente wstETH antes de la votación de snapshot
Antes de iniciar la votación de snapshot, los depósitos y retiros deben estar despausados a menos que haya consideraciones específicas para hacer lo contrario. Mantener los estados despausados proporciona lo siguiente:
- El puente está en el estado final durante la votación de snapshot, sin permisos temporales concedidos al resumidor u otros actores;
- Menor carga operativa para los contribuyentes y titulares de tokens (para revotar cambios adicionales).
Sin embargo, considera los riesgos de fragmentación de liquidez en caso de que la configuración actualmente desplegada no sea compatible con la votación de snapshot pero algunos wstETH ya hayan sido depositados.
R-10: Mecánicas de upgradabilidad
- El patrón de proxy regular (
ERC1967Proxy
) es suficientemente bueno; el patrón de proxy transparente puede ser una complicación innecesaria. - Utiliza proxies osificables cuando sea posible. Por ejemplo, considera OssifiableProxy, que se utiliza en el protocolo Lido en Ethereum.
Por favor, petrifica las implementaciones con valores ficticios. Esto ayuda a reducir la confusión, como tomar la dirección de implementación en lugar de la dirección del proxy. Por ejemplo, consulta la implementación zkSync Era ERC20BridgedUpgradeable (bridge, vistas de decimales, nombre, símbolo).
R-11: Usa AccessControlEnumerable para ACL
Para el control de acceso, prefiera el contrato estándar de OpenZeppelin ACL y su versión enumerable sobre las versiones no enumerables. Permite la verificación completa de permisos en cadena, sin necesidad de analizar eventos o transacciones como en las implementaciones no enumerables. Por ejemplo, consulta el contrato Lido ValidatorsExitBusOracle.