AIP-115 - Cuentas Sin Estado
AIP-115 cubre cuentas sin estado.
FAQ General
Sección titulada «FAQ General»¿Qué es una Cuenta Sin Estado?
Sección titulada «¿Qué es una Cuenta Sin Estado?»Una Cuenta Sin Estado es un nuevo comportamiento para las cuentas de Aptos que les permite
operar sin requerir un recurso 0x1::account::Account
explícitamente creado.
En su lugar, estas cuentas usan comportamientos por defecto hasta que una acción
necesita la creación del recurso. Este cambio simplifica la gestión de cuentas y reduce
la creación innecesaria de recursos, haciendo más fácil para desarrolladores y usuarios
interactuar con la blockchain de Aptos.
¿Cómo es diferente de una cuenta regular?
Sección titulada «¿Cómo es diferente de una cuenta regular?»Técnicamente, no hay un tipo de cuenta separado. Todas las cuentas son iguales bajo el capó. La diferencia es que las cuentas sin un recurso se comportan de una manera “sin estado” usando valores por defecto. El recurso de cuenta solo se crea bajo demanda cuando es necesario.
¿Cómo funciona?
Sección titulada «¿Cómo funciona?»Cuando una cuenta firma su primera transacción de número de secuencia, no
tendrá el recurso 0x1::account::Account
creado. En su lugar, creará el
recurso 0x1::account::Account
solo cuando una acción que requiera
incrementar el número de secuencia.
Para una transacción sin orden, el recurso de cuenta no es necesario en absoluto, y el recurso de cuenta no será creado.
FAQ de Detalles Técnicos
Sección titulada «FAQ de Detalles Técnicos»¿Cuál es la auth_key por defecto para las Cuentas Sin Estado?
Sección titulada «¿Cuál es la auth_key por defecto para las Cuentas Sin Estado?»Si el recurso 0x1::account::Account
no existe, la auth_key por defecto es
la dirección de la cuenta misma. Esto permite que la cuenta firme y envíe
transacciones sin necesitar un recurso.
¿Cuál es el número de secuencia de una Cuenta Sin Estado?
Sección titulada «¿Cuál es el número de secuencia de una Cuenta Sin Estado?»Por defecto es 0
si el recurso de cuenta no existe. En el futuro, con
Transacciones Sin Orden, el número de secuencia puede ser eliminado completamente.
¿Cuándo se crea automáticamente el recurso de cuenta?
Sección titulada «¿Cuándo se crea automáticamente el recurso de cuenta?»El recurso se crea cuando una acción que requiere estado en la cadena, tal como:
- Rotar la clave de autenticación
- Usar capacidades o características que dependen del recurso de cuenta como el número de secuencia
- Llamar explícitamente funciones que acceden a campos en el recurso de cuenta
¿Crear el recurso de cuenta incurre en costo extra de gas?
Sección titulada «¿Crear el recurso de cuenta incurre en costo extra de gas?»Sí. La creación del recurso se difiere, y los costos de gas y almacenamiento correspondientes solo se cobran en el momento de la creación real, no de antemano.
¿Algún cambio de comportamiento al módulo de cuenta a nivel de Move?
Sección titulada «¿Algún cambio de comportamiento al módulo de cuenta a nivel de Move?»0x1::account::exists_at
siempre retorna true, ya que todas las direcciones de cuenta en la cadena
son consideradas válidas y tratadas como existentes por defecto. No hay función move
en el módulo para verificar si el recurso de cuenta subyacente realmente
existe ya que el objetivo es hacerlo transparente para los usuarios. Como resultado, cualquier lógica
que primero verifique si una cuenta existe antes de intentar crearla es
ahora obsoleta.
¿Pueden los usuarios forzar la creación del recurso de cuenta de antemano?
Sección titulada «¿Pueden los usuarios forzar la creación del recurso de cuenta de antemano?»Sí. Los usuarios pueden llamar explícitamente funciones como
0x1::account::create_account_if_does_not_exist
para crear el recurso
manualmente, si lo desean.
¿Algún cambio de comportamiento a la API?
Sección titulada «¿Algún cambio de comportamiento a la API?»Si dependes del siguiente comportamiento de API, por favor ajusta correspondientemente.
GET /accounts/{address}
nunca retornará “404 not found” sino la clave de autenticación
por defecto y número de secuencia mencionados arriba para cuentas sin estado.
Por lo tanto, si se desea verificar si el recurso de cuenta existe o no,
intenta GET /accounts/{address}/resource/0x1::account::Account
¿Se ven afectadas las cuentas existentes?
Sección titulada «¿Se ven afectadas las cuentas existentes?»No. Las cuentas existentes con recursos ya creados continuarán funcionando exactamente como lo hacen ahora. El comportamiento de Cuenta Sin Estado solo se aplica a cuentas que aún no han creado un recurso.
¿Necesitan cambiar algo las dApps / CEX?
Sección titulada «¿Necesitan cambiar algo las dApps / CEX?»Tal vez. Anteriormente, verificar si una cuenta existía a menudo dependía de llamar APIs que retornan un error 404 si el recurso de cuenta no se encontraba. Las aplicaciones entonces usarían esto como una señal para advertir a los usuarios (ej. “Esta cuenta no existe”). Bajo el nuevo modelo, todas las direcciones son consideradas válidas, y tales verificaciones de existencia basadas en 404 ya no son confiables o significativas. Sin embargo, no estamos prohibiendo este patrón—los desarrolladores aún pueden elegir advertir a los usuarios que una cuenta puede no haber realizado ninguna actividad en la cadena y por lo tanto podría no tener un recurso creado aún.
Si aún quieres detectar si una cuenta tiene un recurso asociado, puedes referirte al método descrito en P9 o verificar si el sequence_number es 0. Pero ten en cuenta que con la introducción de transacciones sin orden, algunas cuentas pueden solo enviar transacciones que nunca crean un recurso, lo que podría resultar en falsos negativos.
Recomendamos diseñar tu aplicación para ser robusta independientemente de si el recurso de cuenta existe, y evitar asumir la presencia del recurso como un proxy para la existencia de la cuenta.
Ejemplos:
- Una wallet podría verificar una cuenta para ver si es una cuenta nueva, y proporcionar una advertencia al usuario. Con este cambio, en su lugar se necesitará una mitigación como P9.
- Una wallet custodial puede enviar fondos para inicializar una cuenta con gas. Con este cambio, necesitará verificar el balance de la cuenta en lugar de solo que la cuenta exista.
¿Es esto compatible con Transacciones Sin Orden?
Sección titulada «¿Es esto compatible con Transacciones Sin Orden?»Sí. Las Transacciones Sin Orden y las Cuentas Sin Estado son complementarias. Una vez que las Transacciones Sin Orden estén habilitadas, los números de secuencia ya no serán necesarios, permitiendo uso verdaderamente sin estado.
¿Todas las cuentas se volverán Sin Estado en el futuro?
Sección titulada «¿Todas las cuentas se volverán Sin Estado en el futuro?»No. Las Cuentas Sin Estado no son un nuevo tipo de cuenta. Simplemente permite que las cuentas se comporten con lógica por defecto hasta que se necesite el recurso de cuenta. Esta creación perezosa de recursos no transforma el estado de cuenta existente. Todas las cuentas pueden comportarse de una manera sin estado por defecto, pero aún crearán el recurso estándar si y cuando se usen características avanzadas.