Sequence Wallets se crean usando el contrato Factory; al llamarlo, crea contratos hijos MinimalUpgradeableProxies, que en esencia son el código “boot” de todos los Sequence wallets.

API de Factory

deploy

  function deploy(

    address _mainModule,

    bytes32 _salt

  ) public payable returns (address _contract)

Crea un MinimalUpgradeableProxy hijo usando CREATE2; el proxy apunta inicialmente al _mainModule proporcionado. No se ejecuta ningún código de inicialización.

Parámetros:

NombreTypeDescription
_mainModuleaddressImplementación inicial para el nuevo contrato proxy, se espera que apunte a una implementación válida de Sequence wallet con soporte para inicialización contrafactual.
_saltbytes32Valor arbitrario que se usará como create2 salt. El mainModule de Sequence utiliza el salt para obtener un hash con la configuración inicial del wallet (Ver ImageHash).

Valores de retorno:

NombreTypeDescription
_contractaddressDirección del contrato proxy creado.

Entrada no saneada
El contrato Factory no verifica si el _mainModule proporcionado es una implementación válida de Sequence wallet, o si _salt es una configuración válida de Sequence.

Usar parámetros inválidos resultará en un contrato proxy que puede no ser utilizable y podría resultar en la pérdida de fondos.

Direcciones contrafactuales

Los Sequence wallets son contrafactuales por diseño, lo que significa que la dirección del wallet puede conocerse antes de que el wallet sea desplegado; cualquier combinación de valores de mainModule y salt dará como resultado la misma dirección de wallet.

Esta propiedad, junto con el uso de NanoUniversalDeployer o UniversalDeployer, es la razón por la que los Sequence wallets pueden obtener la misma dirección en múltiples cadenas.

Creación de wallet sin gas
Los Sequence wallets son 100% contrafactuales, lo que significa que los fondos pueden transferirse de forma segura a la dirección del wallet sin la necesidad de llamar a la función deploy. El despliegue del wallet solo es requerido antes de enviar la primera transacción desde el wallet.