Cuenta multipropietario: mejore la colaboración en equipo en Starknet con la abstracción de cuentas
Nuestra nueva función Cuenta de propietarios múltiples reconoce la necesidad de capacitar a los equipos en Starknet para administrar actualizaciones de contratos y fondos de tesorería de manera segura y eficiente.
Yendo más allá del modelo criptográfico multifirma convencional, diseñamos nuestra cuenta multipropietario teniendo en cuenta una mayor colaboración y seguridad. Hemos creado esta función a partir de una necesidad que sentimos nosotros mismos y queremos asegurarnos de que se alinee con la comunidad Starknet en general.
Mientras nos preparamos para implementar esta función hoy (24 de julio de 2023), esta publicación explorará las complejidades de su funcionamiento. Como parte de nuestro compromiso con la transparencia, también hemos hecho que el código sea de código abierto , listo para que cualquiera pueda revisarlo y verificarlo.
¿Qué es una cuenta multipropietario?
En esencia, la cuenta de propietarios múltiples (MOA) es una característica innovadora que aprovecha el poder de la abstracción de cuentas para facilitar la gestión colaborativa de transacciones en cadena.
Diseñamos este tipo de cuenta para atender a equipos, organizaciones o cualquier grupo donde cada miembro tenga una billetera única. Esta cuenta solo ejecuta transacciones una vez que recibe un número predefinido de aprobaciones de propietarios (un umbral que establece el equipo).
Aquí, el fundador de Braavos, Motty Lavie, describe el propósito y las características clave de Hardware Signer.
¿Cuales son los beneficios?
Nuestra cuenta multipropietario proporciona a los equipos de Starknet control colectivo sobre sus contratos y tesorería, desbloqueando una serie de beneficios específicos:
Control colaborativo. Permite la gestión en equipo de la ejecución de transacciones en cadena, reforzando la toma de decisiones colectiva y eliminando los riesgos de transacciones unilaterales.
Estructura dinámica de propietarios. Proporciona la flexibilidad de agregar o eliminar propietarios fácilmente y de ajustar el número mínimo de firmantes requeridos para la aprobación de transacciones en cualquier momento.
Seguridad fortificada. La cuenta de cada propietario puede adoptar (u optar por) medidas de seguridad mejoradas, como 2FA, 3FA o incluso convertirse en otro MOA, aumentando así la seguridad de la cuenta.
Pagos Autónomos de Gas. Como cuenta independiente en Starknet, el MOA cubre sus propias tarifas de gas.
Integración perfecta de dApps. El MOA se integra sin esfuerzo con todas y cada una de las dApps, ya que se trata como cualquier otra cuenta de tu monedero.
¿Como funciona?
Configurar una cuenta de múltiples propietarios es sencillo.
He aquí cómo hacerlo:
Haga clic en el Menú y seleccione ‘Agregar una cuenta de múltiples propietarios’. Tendrá la opción de crear una cuenta nueva o unirse a una existente.
Para crear una nueva cuenta:
- Iniciar: Haga clic en ‘Crear una nueva cuenta de múltiples propietarios’.
- Agregar propietarios: incluya hasta siete direcciones de billetera únicas como propietarios de una cuenta única.
- Establecer umbral: establezca el número mínimo de propietarios (M de N) que deben firmar para que se apruebe una transacción.
- Revisar y Confirmar: Revisa todos los detalles y, una vez que todo esté en orden, confirma la creación de la cuenta.
Para unirse a una cuenta existente:
- Importar: haga clic en ‘Importar una cuenta de múltiples propietarios existente’.
- Establecer dirección MOA: agregue la dirección MOA y haga clic en «Importar».
¡Eso es todo! Su billetera ahora incluirá la cuenta en la sección MOA.
Una vez que la cuenta esté en funcionamiento, cualquier propietario puede iniciar un nuevo proceso de firma de transacciones o firmar transacciones pendientes. Los propietarios pueden agregar o eliminar a otros propietarios de forma colaborativa o ajustar el umbral de M de N firmantes, todo ello fácilmente accesible desde la configuración de la cuenta.
¿Qué hace que una cuenta multipropietario sea superior a una cuenta multifirma como Gnosis Safe?
Nuestra cuenta multipropietario está diseñada para funcionar como cualquier otra cuenta pero con funciones adicionales. Esto significa que cubre sus propias tarifas de gas y se conecta perfectamente con cualquier dApp.
Además de estas características, la cuenta también se adapta a las diversas medidas de seguridad específicas de cada propietario. Estos pueden variar desde un simple firmante inicial hasta un sofisticado firmante de hardware (2FA), un firmante múltiple (3FA) o incluso otra cuenta de múltiples propietarios.
Esta combinación de flexibilidad, control y seguridad mejorada la distingue de las cuentas multifirma tradicionales de Safe.
Los detalles técnicos
¿Cómo funciona la abstracción de cuentas?
El MOA aprovecha la abstracción de cuentas para ofrecer una funcionalidad superior de colaboración de cuentas, donde cada propietario puede ser autenticado en múltiples factores.
Aquí hay un breve resumen de cómo funciona la abstracción de cuentas en Starknet.
Hay dos puntos principales de entrada a la cuenta:
__validate__: Esta función se encarga de verificar que la transacción esté correctamente firmada por el titular de la cuenta, ya sea que la firma sea una firma estándar STARK, secp256r1 u otra.
__execute__: esta función asume que la firma de la transacción es válida y ejecuta la transacción en consecuencia.
El sistema operativo Starknet primero llama a __validate__ . Si esta función falla, la transacción se rechaza. Si __validate__ se aprueba, la transacción puede tener éxito (y ser aceptada) o fracasar (y ser rechazada).
Dos puntos críticos que vale la pena señalar son:
- Incluso si las transacciones se revierten, todavía incurren en tarifas de gas.
- A partir de Starknet v0.12.1, las transacciones revertidas no revierten el estado de __validate__ , sino solo el estado de __execute__ . Esto significa que cualquier cambio en el almacenamiento realizado en __validate__ se conserva, mientras que cualquier cambio realizado en __execute__ se revierte.
¿Cuál es el flujo al emitir una transacción?
Cuando se trata de implementar el MOA, anteriormente enfrentamos un desafío importante relacionado con las operaciones del sistema operativo Starknet.
Este desafío giraba en torno al hecho de que los contratos externos no se pueden llamar desde la función __validate__ , ya que introduce un vector de ataque de denegación de servicio (DoS). Como resultado, llamar a la cuenta del propietario is_valid_signature directamente desde __validate__ no era una opción.
Nuestra solución sigue estos pasos:
La transacción puede requerir dos firmas: inicialmente del firmante inicial y luego del firmante real de la cuenta, ya sea otro firmante inicial, un firmante de hardware (2FA) o un firmante múltiple (3FA).
En la fase __validar__ , el MOA verifica la autenticidad de la transacción con la firma del firmante inicial. La clave Seed Signer del propietario se establece en el MOA en el momento de la inicialización; Esto se puede hacer durante el proceso de creación del MOA o más tarde, cuando se agrega un nuevo propietario al MOA.
En la fase __execute__ , el MOA verifica la autenticidad de la transacción llamando al método is_valid_signature en la cuenta del propietario iniciador. Este paso nos permite confirmar la legitimidad del propietario comparando la transacción con el nivel de seguridad definido en la cuenta del propietario, que podría ser seguridad Seed, Hardware o Multi-Signer.
¿Cuáles eran los posibles vectores de ataque?
Ataque de drenaje de gas: propietario malicioso
Una posible amenaza es que un propietario malintencionado drene el saldo de la cuenta al realizar transacciones defectuosas que desperdician gas. En tal escenario, la cuenta MOA __execute__ llamará a is_valid_signature de la cuenta del propietario malicioso , que utiliza una lógica específica para desperdiciar gas intencionalmente, por ejemplo, mediante ejecuciones prolongadas o escrituras de almacenamiento excesivas.
Para evitar esto, el MOA:
- Limita el MAX_FEE permitido para la transacción 1…S de los propietarios, donde S
- Garantiza que todos los propietarios firmaron el mismo MAX_FEE, incluido el último propietario en firmar (firmante M).
- Implica una limitación de 15 transacciones diarias (en el futuro, podríamos ajustar esto para introducir un período de recuperación después de N transacciones consecutivas, ya sean fallidas o exitosas, del mismo propietario).
¿Qué pasa con la abstracción nonce?
La abstracción de Nonce proporciona la capacidad de enviar múltiples transacciones desacopladas simultáneamente, sin que el resultado de cada transacción, ya sea un éxito o un fracaso, afecte el nonce de las demás. Esto permite el manejo simultáneo de transacciones sin riesgo de conflicto.
Sin embargo, Starknet actualmente no admite la abstracción nonce: es una característica en la hoja de ruta. Como tal, si dos propietarios del MOA emiten transacciones en paralelo (es decir, la segunda transacción se emite antes de que se ejecute la primera), la última transacción será rechazada debido a un desajuste de nonce.
Consideramos que esto es una preocupación menor en este momento, ya que el caso de uso objetivo no involucra a una gran cantidad de propietarios. Este escenario sólo ocurriría si dos propietarios firmaran transacciones en el mismo minuto, un evento relativamente improbable. Además, este problema se resolverá en el futuro una vez que Starknet implemente la abstracción nonce.
Resumen
Creemos que la función Cuenta de propietarios múltiples mejorará significativamente la capacidad de los equipos de Starknet para administrar sus contratos y tesorería en la cadena. Ha sido diseñado para ser potente, flexible pero extremadamente seguro. Lo usaremos para nuestras actualizaciones de contratos y gestión de tesorería, reforzando nuestro compromiso con la mejor seguridad y experiencia de usuario.
Si tiene alguna pregunta o necesita más aclaraciones sobre la función Cuenta de múltiples propietarios, contáctenos en Twitter o Discord . Estaremos encantados de ayudar.