Documentación: Registro

Documentación

Registro

Un contrato Soroban con una entrada de registro por cuenta de fundación. Sin admin, sin función de actualización, sin manejo de tokens, sin fondos. Solo la cuenta de la propia fundación puede escribir su entrada.

Registrar una fundación

La fundación llama a register(account, name, website) firmado por su propia cuenta (account.require_auth()). Luego lista la misma cuenta en el campo ACCOUNTS del stellar.toml de su sitio. Las dos cosas juntas la dejan con dominio verificado; mira la verificación de stellar.toml. Nadie lo aprueba a mano.

Funciones

FunciónAuthResultado
register(account, name, website)accountCrea una entrada activa, o reactiva una desactivada (sobrescribe nombre y sitio).
update(account, name, website)accountReemplaza nombre y sitio de una entrada activa.
deactivate(account)accountMarca la entrada como inactiva (queda guardada).
get(account) -> Option<Foundation>ningunaFoundation { name, website, active }.
is_active(account) -> boolningunafalse si no existe o está inactiva.

La validación ocurre después de la autenticación y antes de guardar. name: de 1 a 64 bytes UTF-8. website: de 1 a 253 bytes, un dominio simple sin / (o sea, sin esquema ni ruta), sin espacios ni bytes de control. Es solo una revisión de formato; la propiedad del dominio se verifica fuera de la cadena mediante stellar.toml (SEP-1).

Errores

CódigoNombreCuándo
1AlreadyRegisteredregister y ya existe una entrada activa.
2NotFoundupdate o deactivate sin entrada.
3Inactiveupdate o deactivate sobre una entrada desactivada.
4InvalidNameNombre vacío o de más de 64 bytes.
5InvalidWebsiteSitio vacío, de más de 253 bytes, o con /, espacios o bytes de control.

Eventos

Los topics son ["spare", <kind>, account]; los datos son un vec [name, website]. Las llamadas fallidas no emiten nada.

TipoLo emiteDatos
registerregisterNombre y sitio nuevos.
updateupdateNombre y sitio nuevos.
deactivatedeactivateÚltimo nombre y sitio.

Desactivación

  • deactivate mantiene la entrada con active = false; nunca se borra, así que el indexador conserva el historial.
  • La desactivación es reversible: register sobre una cuenta desactivada la reactiva (nombre y sitio sobrescritos tras la validación de siempre, TTL extendido, evento register normal). Necesita la autenticación de la propia cuenta.
  • register sobre una entrada activa es AlreadyRegistered; update o deactivate sobre una entrada desactivada son Inactive.
  • Por cuenta, el indexador ve register -> (update | deactivate -> register)*. Un evento register de una cuenta ya conocida significa reactivación.

TTL

Las entradas viven en almacenamiento persistente. register y update extienden el TTL: el umbral es de unos 30 días (30 * 17_280 ledgers) y la extensión llega a unos 60 días. Las entradas sin tocar por unos 60 días expiran; el indexador marca las que están cerca de expirar para que la fundación llame a update y las renueve. get e is_active no extienden. Las entradas desactivadas no se extienden mientras están inactivas y pueden expirar del estado del ledger; reactivar una entrada expirada es un register nuevo.