# Operaciones

### Registrar un nombre

El registro de nombres se realiza llamando a la función correspondiente del contrato BNSv2. El llamador se convierte en el propietario del nombre.

**Flujo de alto nivel:**

1. Comprobar disponibilidad
2. Enviar transacción de registro
3. Pagar la tarifa STX requerida
4. Esperar la confirmación
5. El nombre se asigna al principal que llama

**Ruta 1 — Preorder + Registro (seguro, evita el front-running):**

1. Generar un hash salado del nombre totalmente calificado: hash160(name.namespace.salt)
2. Enviar name-preorder con el hash y STX para quemar
3. Esperar al menos 1 bloque
4. Enviar name-register con el nombre real, el namespace y la salt
5. El contrato verifica que los hashes coincidan, quema STX y acuña el NFT al llamador&#x20;

**Ruta 2 — Reclamo rápido (una sola tx, vulnerable al front-running):**

1. Enviar name-claim-fast con nombre, namespace y destinatario
2. STX quemados en un paso, NFT acuñado inmediatamente
3. Riesgo: el nombre es visible en el mempool antes de la confirmación, por lo que puede ser capturado Para namespaces gestionados: usar `mng-name-preorder` + `mng-name-register` (sin quema de STX, el gestor controla los precios).

### Actualización de registros

Una vez que un nombre es propiedad de alguien, el propietario puede actualizar registros mediante llamadas al contrato. Las actualizaciones se realizan a través del `zonefile-resolver` contrato vía `update-zonefile(name, namespace, new-zonefile)`. El llamador debe ser o bien el propietario del nombre O el gestor del namespace (para namespaces gestionados). Mencionar el límite de 8KB.

Ejemplos de actualizaciones de registros podrían incluir:

* Establecer una dirección de Stacks
* Actualizar metadatos de perfil
* Agregar pares clave-valor personalizados

Sólo el propietario actual puede modificar los registros.

### Transferir un nombre

Los nombres son activos digitales transferibles. `transfer(id, sender, recipient)` en el contrato BNS-V2. Para namespaces gestionados, usar `mng-transfer(id, sender, recipient)`, pero sólo si las transferencias por parte del gestor no han sido desactivadas vía `turn-off-manager-transfers` .

El propietario puede:

* Transferir la propiedad a otro principal
* Usar un nombre dentro de otros contratos
* Integrar nombres en mercados o sistemas de identidad

Debido a que la propiedad es nativa en Clarity, las transferencias no requieren confianza.

### Resolver un nombre

La resolución implica consultar los contratos BNSv2 para el registro almacenado de un nombre.

`resolve-name(name, namespace)` en `zonefile-resolver`

Las funciones correspondientes del SDK de BNSv2: `resolveNameZonefile()`, `getNameInfo()`, `getPrimaryName()`.

Las aplicaciones pueden:

* Llamar al contrato directamente vía RPC
* Usar ayudantes del SDK
* Usar indexadores para mayor comodidad

La resolución es determinista y no depende de servidores centralizados.

### **Precios**

Los precios de los nombres se calculan en base a:

* Longitud del nombre
* Presencia de vocales
* Presencia de caracteres no alfabéticos
* Funciones de fijación de precios específicas del namespace
* **Para namespaces gestionados, el precio será gestionado directamente por el contrato del gestor del namespace**

### **Integración con NFT**

Cada nombre se acuña como un NFT, lo que permite:

* Transferencias de propiedad sencillas
* Integración con mercados de NFT y otras aplicaciones

### Renovaciones

Los nombres en namespaces no gestionados expiran después de bloques de vida. Los propietarios tienen un período de gracia de 5.000 bloques (\~34 días) después del vencimiento para renovar vía `name-renewal(namespace, name)`.&#x20;

* La renovación quema STX según el precio actual del nombre.&#x20;
* Si no se renueva dentro del período de gracia, el nombre queda disponible para que cualquiera lo registre.
* Los nombres de namespaces gestionados NO expiran (renewal-height = 0).

### Marketplace

BNSv2 tiene un marketplace nativo:

* `list-in-ustx(id, price, commission-trait)`, listar un nombre para la venta
* `unlist-in-ustx(id)`, eliminar el listado
* `buy-in-ustx(id, commission-trait)`, comprar un nombre listado La comisión se gestiona mediante el trait de comisión SIP-009.&#x20;
* Para namespaces gestionados, el contrato del gestor debe envolver estas funciones.

### Establecer un nombre primario

* `set-primary-name(id)` en BNS-V2 permite a un propietario designar uno de sus nombres como su identidad primaria.&#x20;
* Esto es lo que las billeteras y aplicaciones usan para mostrar.&#x20;
* Sólo un nombre primario por dirección.
