Depósito de sBTC

Resumen

El Contrato de depósito sBTCarrow-up-right (sbtc-deposit.clar) administra el proceso de depósito para el sistema sBTC. Maneja la validación y la acuñación de tokens sBTC cuando los usuarios depositan Bitcoin, e interactúa con el contrato sBTC Registry para actualizar el estado del protocolo.

Constantes

  • longitud-txid: La longitud requerida de un identificador de transacción (32 bytes).

  • límite-de-polvo: La cantidad mínima para un depósito válido (546 satoshis).

Constantes de Error

  • ERR_TXID_LEN (u300): Indica que el identificador de transacción proporcionado no tiene la longitud correcta.

  • ERR_DEPOSIT_REPLAY (u301): Significa un intento de reproducir un depósito que ya se ha completado.

  • ERR_LOWER_THAN_DUST (u302): Indica que la cantidad del depósito está por debajo del límite de polvo.

  • ERR_DEPOSIT_INDEX_PREFIX: Usado como prefijo para errores relacionados con depósitos en el procesamiento por lotes.

  • ERR_DEPOSIT (u303): Error general de depósito.

  • ERR_CALLER_INVALIDO (u304): Indica que el llamador no está autorizado para realizar la operación.


Funciones Públicas

complete-deposit-wrapper

Procesa una única solicitud de depósito.

  • Parámetros:

    • txid: (buff 32) - El identificador de transacción de Bitcoin

    • vout-index: uint - El índice de salida (vout) de la transacción de depósito

    • amount: uint - La cantidad de sBTC a acuñar (en satoshis)

    • recipient: principal - La dirección de Stacks que recibirá los sBTC acuñados

  • Devuelve: (response bool uint)

1

Validación y autorización

  1. Verifica que el llamador sea el principal firmante actual.

  2. Comprueba que la cantidad del depósito esté por encima del límite de polvo.

  3. Valida la longitud del identificador de transacción.

2

Protección contra repetición

  1. Asegura que el depósito no se haya procesado antes (previene la reproducción).

3

Ejecución

  1. Acuña tokens sBTC para el destinatario mediante .sbtc-token's protocol-mint.

  2. Actualiza el estado del depósito en el contrato sBTC Registry mediante .sbtc-registry's complete-deposit.


complete-deposits-wrapper

Procesa múltiples solicitudes de depósito en una sola transacción.

  • Parámetros:

    • depósitos: (list 650 {txid: (buff 32), vout-index: uint, amount: uint, recipient: principal}) - Lista de datos de depósitos

  • Devuelve: (response uint uint)

1

Autorización

  1. Verifica que el llamador sea el principal firmante actual.

2

Procesamiento por lotes

  1. Itera a través de la lista de depósitos, procesando cada uno usando complete-individual-deposits-helper función.


Funciones Privadas

complete-individual-deposits-helper

Función auxiliar para procesar depósitos individuales dentro de la operación por lote.

  • Parámetros:

    • deposit: {txid: (buff 32), vout-index: uint, amount: uint, recipient: principal} - Datos de un único depósito

    • respuesta-ayudante: (response uint uint) - Acumulador para rastrear los depósitos procesados

  • Devuelve: (response uint uint)

1

Llamar al wrapper de depósito

  1. Llama a complete-deposit-wrapper para el depósito individual.

2

Manejo de éxito

  1. Si tiene éxito, incrementa el conteo de depósitos procesados.

3

Manejo de errores

  1. Si ocurre un error, se propaga con información adicional del índice (usando ERR_DEPOSIT_INDEX_PREFIX o constantes de error relacionadas).


Interacciones con Otros Contratos

  • .sbtc-registry: Llamadas get-current-signer-data, get-completed-deposit, y complete-deposit para gestionar el estado de los depósitos.

  • .sbtc-token: Llamadas protocol-mint para crear nuevos tokens sBTC.


Consideraciones de Seguridad

  1. Control de acceso: Solo el principal firmante actual puede llamar a las funciones de finalización de depósitos.

  2. Prevención de reproducción: El contrato verifica depósitos previamente procesados para evitar ataques de reproducción.

  3. Límite de polvo: Impone una cantidad mínima de depósito para prevenir spam y asegurar la viabilidad económica.

  4. Validación del identificador de transacción: Asegura que el identificador de transacción proporcionado tenga la longitud correcta.

¿Te fue útil?