Retiro de sBTC

Resumen

El Contrato de retiro de sBTCarrow-up-right (sbtc-withdrawal.clar) administra el proceso de retiro para el sistema sBTC. Maneja la iniciación, aceptación y rechazo de solicitudes de retiro, asegurando la validación adecuada e interacción con otros contratos sBTC.

Constantes

Códigos de error

  • ERR_INVALID_ADDR_VERSION (u500): Versión de dirección inválida.

  • ERR_INVALID_ADDR_HASHBYTES (u501): hashbytes de dirección inválidos.

  • ERR_DUST_LIMIT (u502): Monto de retiro por debajo del límite de polvo.

  • ERR_INVALID_REQUEST (u503): ID de solicitud de retiro inválido.

  • ERR_CALLER_INVALIDO (u504): El llamador no es el principal firmante actual.

  • ERR_ALREADY_PROCESSED (u505): Solicitud de retiro ya procesada.

  • ERR_FEE_TOO_HIGH (u505): Tarifa pagada mayor que la solicitada.

  • ERR_WITHDRAWAL_INDEX_PREFIX: Prefijo para errores de índice de retiro.

  • ERR_WITHDRAWAL_INDEX (u506): Error general de índice de retiro.

Otras constantes

  • MAX_ADDRESS_VERSION (u6): Valor máximo de una versión de dirección.

  • MAX_ADDRESS_VERSION_BUFF_20 (u4): Versión máxima para hashbytes de 20 bytes.

  • MAX_ADDRESS_VERSION_BUFF_32 (u6): Versión máxima para hashbytes de 32 bytes.

  • DUST_LIMIT (u546): Cantidad mínima de sBTC para retiro.

Funciones Públicas

initiate-withdrawal-request

Inicia una nueva solicitud de retiro.

  • Parámetros:

    • amount: uint - Cantidad de sBTC a retirar

    • recipient: { version: (buff 1), hashbytes: (buff 32) } - Detalles de la dirección de Bitcoin

    • max-fee: uint - Tarifa máxima para el retiro

  • Devuelve: (response uint uint)

accept-withdrawal-request

Acepta una solicitud de retiro.

  • Parámetros:

    • request-id: uint - ID de solicitud de retiro

    • bitcoin-txid: (buff 32) - ID de la transacción de Bitcoin

    • signer-bitmap: uint - Mapa de bits de firmantes

    • output-index: uint - Índice de salida en la transacción de Bitcoin

    • fee: uint - Tarifa real pagada

  • Devuelve: (response bool uint)

reject-withdrawal-request

Rechaza una solicitud de retiro.

  • Parámetros:

    • request-id: uint - ID de solicitud de retiro

    • signer-bitmap: uint - Mapa de bits de firmantes

  • Devuelve: (response bool uint)

complete-withdrawals

Procesa múltiples solicitudes de retiro (aceptar o rechazar).

  • Parámetros:

    • withdrawals: (list 600 {...}) - Lista de detalles de retiros

  • Devuelve: (response uint uint)

Funciones de Solo Lectura

validate-recipient

Valida el formato de la dirección de Bitcoin del destinatario.

  • Parámetros:

    • recipient: { version: (buff 1), hashbytes: (buff 32) } - Detalles de la dirección de Bitcoin

  • Devuelve: (response bool uint)

Funciones Privadas

complete-individual-withdrawal-helper

Función auxiliar para procesar retiros individuales en la operación por lote.

  • Parámetros:

    • withdrawal: {...} - Detalles de retiro individual

    • respuesta-ayudante: (response uint uint) - Acumulador para el procesamiento

  • Devuelve: (response uint uint)

Interacciones con Otros Contratos

  • .sbtc-token: Llamadas protocol-lock, protocol-burn-locked, protocol-mint, y protocol-unlock para operaciones con tokens.

  • .sbtc-registry: Llamadas create-withdrawal-request, get-withdrawal-request, get-current-signer-data, complete-withdrawal-accept, y complete-withdrawal-reject para gestionar solicitudes de retiro y datos de firmantes.

Consideraciones de Seguridad

1

Control de Acceso

Solo el principal firmante actual puede aceptar o rechazar solicitudes de retiro.

2

Límite de polvo

Aplica una cantidad mínima de retiro para prevenir spam y asegurar viabilidad económica.

3

Gestión de tarifas

Asegura que la tarifa real no exceda la tarifa máxima establecida por el usuario.

4

Validación de direcciones

Implementa una validación exhaustiva de los formatos de direcciones Bitcoin.

5

Gestión del Estado

Evita el procesamiento doble de solicitudes de retiro.

Tipos de direcciones Bitcoin

El contrato admite varios tipos de direcciones Bitcoin, incluyendo:

  • P2PKH (Pago a hash de clave pública)

  • P2SH (Pago a hash de script)

  • P2SH-P2WPKH (P2SH anidado P2WPKH)

  • P2SH-P2WSH (P2SH anidado P2WSH)

  • P2WPKH (Pago a hash de clave pública de testigo)

  • P2WSH (Pago a hash de script de testigo)

  • P2TR (Pago a Taproot)

Cada tipo de dirección está representado por un byte de versión específico y un formato de hashbytes en la estructura del destinatario.

¿Te fue útil?