# Token sBTC

## Resumen

El [Contrato del token sBTC](https://github.com/stacks-network/sbtc/blob/main/contracts/contracts/sbtc-token.clar) (`sbtc-token.clar`) implementa la funcionalidad de token fungible para sBTC. Administra tanto los tokens sBTC desbloqueados como los bloqueados y proporciona funciones para acuñar, quemar, transferir y consultar información del token. sBTC es un token fungible estándar SIP-010.

## Constantes

* `ERR_NOT_OWNER` (u4): Error cuando el remitente intenta mover un token que no posee.
* `ERR_NOT_AUTH` (u5): Error cuando quien llama no es un llamador de protocolo autorizado.
* `token-decimals` (u8): El número de decimales del token.

## Tokens fungibles

* `sbtc-token`: El token fungible principal de sBTC.
* `sbtc-token-locked`: Representa tokens sBTC bloqueados.

## Variables de datos

* `token-name`: El nombre del token (predeterminado: "sBTC").
* `token-symbol`: El símbolo del token (predeterminado: "sBTC").
* `token-uri`: Un URI opcional para los metadatos del token.

## Funciones del protocolo

Estas funciones solo pueden ser llamadas por contratos de protocolo autorizados:

### protocol-transfer

* Parámetros: `amount: uint`, `sender: principal`, `recipient: principal`
* Devuelve: `(response bool uint)`

### protocol-lock

* Parámetros: `amount: uint`, `owner: principal`
* Devuelve: `(response bool uint)`

### protocol-unlock

* Parámetros: `amount: uint`, `owner: principal`
* Devuelve: `(response bool uint)`

### protocol-mint

* Parámetros: `amount: uint`, `recipient: principal`
* Devuelve: `(response bool uint)`

### protocol-burn

* Parámetros: `amount: uint`, `owner: principal`
* Devuelve: `(response bool uint)`

### protocol-burn-locked

* Parámetros: `amount: uint`, `owner: principal`
* Devuelve: `(response bool uint)`

### protocol-set-name

* Parámetros: `new-name: (string-ascii 32)`
* Devuelve: `(response bool uint)`

### protocol-set-symbol

* Parámetros: `new-symbol: (string-ascii 10)`
* Devuelve: `(response bool uint)`

### protocol-set-token-uri

* Parámetros: `new-uri: (optional (string-utf8 256))`
* Devuelve: `(response bool uint)`

### protocol-mint-many

* Parámetros: `recipients: (list 200 {amount: uint, recipient: principal})`
* Devuelve: `(response (list 200 (response bool uint)) uint)`

## Funciones públicas (SIP-010 Trait)

### transfer

* Parámetros: `amount: uint`, `sender: principal`, `recipient: principal`, `memo: (optional (buff 34))`
* Devuelve: `(response bool uint)`

### get-name

* Devuelve: `(response (string-ascii 32) uint)`

### get-symbol

* Devuelve: `(response (string-ascii 10) uint)`

### get-decimals

* Devuelve: `(response uint uint)`

### get-balance

Devuelve el saldo total (bloqueado + desbloqueado) de un principal.

* Parámetros: `who: principal`
* Devuelve: `(response uint uint)`

### get-balance-available

Devuelve el saldo disponible (desbloqueado) de un principal.

* Parámetros: `who: principal`
* Devuelve: `(response uint uint)`

### get-balance-locked

Devuelve el saldo bloqueado de un principal.

* Parámetros: `who: principal`
* Devuelve: `(response uint uint)`

### get-total-supply

* Devuelve: `(response uint uint)`

### get-token-uri

* Devuelve: `(response (optional (string-utf8 256)) uint)`

## Funciones privadas

### protocol-mint-many-iter

* Función auxiliar para acuñar tokens a varios destinatarios.
* Parámetros: `item: {amount: uint, recipient: principal}`
* Devuelve: `(response bool uint)`

## Consideraciones de seguridad

{% stepper %}
{% step %}
**Control de acceso**

Las funciones de protocolo solo pueden ser llamadas por contratos autorizados, aplicado mediante el `sbtc-registry` contrato.
{% endstep %}

{% step %}
**Verificación de propiedad**

El `transfer` function verifica que el remitente posee los tokens que se están transfiriendo.
{% endstep %}

{% step %}
**Seguimiento separado de tokens**

El contrato mantiene un seguimiento separado de los tokens bloqueados y desbloqueados, garantizando una contabilidad adecuada.
{% endstep %}
{% endstepper %}

## Interacciones con otros contratos

* `.sbtc-registry`: Se usa para validar los llamadores del protocolo para operaciones privilegiadas.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.stacks.co/learn/es/sbtc/clarity-contracts/sbtc-token.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
