Propiedades principales
Las configuraciones de Sequence v2 contienen las siguientes 3 propiedades:threshold- La “suma de pesos” requerida para que una firma sea considerada válida.checkpoint- Utilizado como salt y mecanismo de orden para las actualizaciones del wallet.tree- Determina los firmantes y sus pesos para el wallet.
Umbral
Elthreshold es un uint16; puede tener cualquier valor entre 0 y 65535. Las firmas solo se consideran válidas o inválidas si la suma de los pesos de los firmantes que firmaron la transacción es mayor o igual al threshold.
Checkpoint
Elcheckpoint es un uint32. Durante la creación del wallet, se puede proporcionar un valor semi-aleatorio para generar wallets independientes con la misma configuración inicial. Luego, durante la operación normal, el checkpoint es utilizado por Light State Sync para asegurar que las actualizaciones del wallet se apliquen en el orden correcto.
Tree
Eltree es un árbol de Merkle binario no balanceado, donde cada hoja puede contener un firmante, una firma estática o un subárbol. El árbol puede representar cualquier combinación de firmantes y pesos, y puede usarse para crear wallets multifirma complejos.
Los posibles tipos de hoja son:
Firmante
Los firmantes se representan por una dirección de firmante (address) y un peso (uint8). El peso indica cuánto contribuye el firmante al umbral.
La dirección puede pertenecer a un contrato compatible con ERC1271 o a un wallet EOA.
El hash de la hoja se calcula de la siguiente manera:
Subdigest
Esto representa un subdigest estático para el cual cualquier firma es válida. Si se proporciona una firma para este subdigest, el peso total de la firma se establece automáticamente enInfinity.
Tenga en cuenta que los subdigests estáticos que existen dentro de árboles anidados tendrán su peso “Infinity” reducido al peso del árbol anidado.
El hash de la hoja se calcula de la siguiente manera:
Subárbol (configuración anidada)
Esto representa una configuración de wallet completamente nueva; esta “configuración anidada” tiene su propio:weightexterno (uint8)thresholdinterno (uint16)treeinterno
internal threshold dentro del subárbol, se considera válida y el external weight se suma al árbol principal. Se pueden crear cualquier cantidad de configuraciones anidadas y es posible crear múltiples niveles de anidamiento.
Este patrón puede usarse, entre otras cosas, para expresar los siguientes escenarios:
- Distribución de peso no lineal: los firmantes A y B pueden aportar 1 peso cada uno, pero juntos pueden aportar 3 de peso.
- Contribución total de peso limitada: los firmantes A, B y C pueden aportar 1 peso cada uno, pero juntos solo pueden aportar 2 de peso.
- “Configuraciones departamentales”: se requiere la firma de N departamentos y cada departamento tiene su propia configuración interna.
ImageHash
Laconfiguration nunca se almacena como un todo; en su lugar, el árbol de Merkle se hashea en un solo valor bytes32, esto se denomina internamente el imageHash de la configuración.
El imageHash se calcula de la siguiente manera:
hashTree es una función recursiva que hashea el árbol en un solo valor bytes32. El pseudocódigo para la función hashTree es el siguiente:
Configuración inicial
Todas las Sequence Wallets tienen una “configuración inicial”, implementada usando elimageHash de la configuración inicial como el SALT durante el despliegue CREATE2 del wallet.
Las wallets se despliegan llamando a la función deploy del contrato Factory, que recibe los siguientes parámetros:
mainModule: La dirección de la implementación inicial del código del wallet.salt: ElimageHashde la configuración inicial.
Siempre se debe usar el
MainModule como implementación inicial del código del wallet. El MainModule valida el imageHash (durante la validación de la firma) recomputando la dirección contrafactual del wallet, por lo que no requiere inicialización de almacenamiento.Si alguna vez se cambia el imageHash, MainModule reemplazará automáticamente la implementación del código de la wallet por MainModuleUpgradeable, gestionando la inicialización del almacenamiento.