Retiro de sBTC
Resumen
El Contrato de retiro de sBTC (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 retirarrecipient:{ version: (buff 1), hashbytes: (buff 32) }- Detalles de la dirección de Bitcoinmax-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 retirobitcoin-txid:(buff 32)- ID de la transacción de Bitcoinsigner-bitmap:uint- Mapa de bits de firmantesoutput-index:uint- Índice de salida en la transacción de Bitcoinfee: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 retirosigner-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 individualrespuesta-ayudante:(response uint uint)- Acumulador para el procesamiento
Devuelve:
(response uint uint)
Interacciones con Otros Contratos
.sbtc-token: Llamadasprotocol-lock,protocol-burn-locked,protocol-mint, yprotocol-unlockpara operaciones con tokens..sbtc-registry: Llamadascreate-withdrawal-request,get-withdrawal-request,get-current-signer-data,complete-withdrawal-accept, ycomplete-withdrawal-rejectpara gestionar solicitudes de retiro y datos de firmantes.
Consideraciones de Seguridad
Control de Acceso
Solo el principal firmante actual puede aceptar o rechazar solicitudes de retiro.
Límite de polvo
Aplica una cantidad mínima de retiro para prevenir spam y asegurar viabilidad económica.
Gestión de tarifas
Asegura que la tarifa real no exceda la tarifa máxima establecida por el usuario.
Validación de direcciones
Implementa una validación exhaustiva de los formatos de direcciones Bitcoin.
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?