Retiro de sBTC
Resumen
El Contrato de retiro de sBTC (sbtc-withdrawal.clar) gestiona el proceso de retiro para el sistema sBTC. Maneja la iniciación, aceptación y rechazo de solicitudes de retiro, garantizando la validación adecuada y la interacción con otros contratos de sBTC.
Constantes
Códigos de error
ERR_INVALID_ADDR_VERSION(u500): Versión de dirección no válida.ERR_INVALID_ADDR_HASHBYTES(u501): hashbytes de dirección no válidos.ERR_DUST_LIMIT(u502): El monto del retiro está por debajo del límite de dust.ERR_INVALID_REQUEST(u503): ID de solicitud de retiro no válido.ERR_INVALID_CALLER(u504): El llamador no es el principal firmante actual.ERR_ALREADY_PROCESSED(u505): La solicitud de retiro ya fue procesada.ERR_FEE_TOO_HIGH(u505): La comisión pagada es mayor que la solicitada.ERR_WITHDRAWAL_INDEX_PREFIX: Prefijo para errores del índice de retiro.ERR_WITHDRAWAL_INDEX(u506): Error general del í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 retirarrecipient:{ version: (buff 1), hashbytes: (buff 32) }- Detalles de la dirección de Bitcoinmax-fee:uint- Comisión máxima para el retiro
Devuelve:
(response uint uint)
accept-withdrawal-request
Acepta una solicitud de retiro.
Parámetros:
request-id:uint- ID de la solicitud de retirobitcoin-txid:(buff 32)- ID de la transacción de Bitcoinsigner-bitmap:uint- Mapa de bits de los firmantesoutput-index:uint- Índice de salida en la transacción de Bitcoinfee:uint- Comisión real pagada
Devuelve:
(response bool uint)
reject-withdrawal-request
Rechaza una solicitud de retiro.
Parámetros:
request-id:uint- ID de la solicitud de retirosigner-bitmap:uint- Mapa de bits de los firmantes
Devuelve:
(response bool uint)
complete-withdrawals
Procesa múltiples solicitudes de retiro (aceptar o rechazar).
Parámetros:
withdrawals:(lista 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 lotes.
Parámetros:
withdrawal:{...}- Detalles del retiro individualhelper-response:(response uint uint)- Acumulador para el procesamiento
Devuelve:
(response uint uint)
Interacciones con otros contratos
.sbtc-token: Llama aprotocol-lock,protocol-burn-locked,protocol-mint, yprotocol-unlockpara operaciones con tokens..sbtc-registry: Llama acreate-withdrawal-request,get-withdrawal-request,get-current-signer-data,complete-withdrawal-accept, ycomplete-withdrawal-rejectpara gestionar solicitudes de retiro y datos de los firmantes.
Consideraciones de seguridad
Control de acceso
Solo el principal firmante actual puede aceptar o rechazar solicitudes de retiro.
Límite de dust
Impone una cantidad mínima de retiro para evitar spam y garantizar la viabilidad económica.
Gestión de comisiones
Garantiza que la comisión real no exceda la comisión máxima establecida por el usuario.
Validación de direcciones
Implementa una validación exhaustiva de los formatos de direcciones de Bitcoin.
Gestión del estado
Evita el procesamiento doble de solicitudes de retiro.
Tipos de direcciones de Bitcoin
El contrato admite varios tipos de direcciones de Bitcoin, incluidos:
P2PKH (Pagar-a-Hash-de-Clave-Pública)
P2SH (Pagar-a-Hash-de-Script)
P2SH-P2WPKH (P2SH anidado P2WPKH)
P2SH-P2WSH (P2SH anidado P2WSH)
P2WPKH (Pagar-a-Hash-de-Clave-Pública-Testigo)
P2WSH (Pagar-a-Hash-de-Script-Testigo)
P2TR (Pagar-a-Taproot)
Cada tipo de dirección se representa mediante un byte de versión específico y un formato de hashbytes en la estructura del destinatario.
¿Te fue útil?