Depósito de sBTC
Resumen
El Contrato de depósito de sBTC (sbtc-deposit.clar) gestiona 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 del Registro de sBTC para actualizar el estado del protocolo.
Constantes
txid-length: La longitud requerida de un ID de transacción (32 bytes).dust-limit: La cantidad mínima para un depósito válido (546 satoshis).
Constantes de error
ERR_TXID_LEN(u300): Indica que el ID de transacción proporcionado no tiene la longitud correcta.ERR_DEPOSIT_REPLAY(u301): Significa un intento de repetir un depósito que ya se ha completado.ERR_LOWER_THAN_DUST(u302): Indica que el monto del depósito está por debajo del límite de polvo.ERR_DEPOSIT_INDEX_PREFIX: Se usa como prefijo para errores relacionados con depósitos en el procesamiento por lotes.ERR_DEPOSIT(u303): Error general de depósito.ERR_INVALID_CALLER(u304): Indica que el llamador no está autorizado para realizar la operación.
Funciones públicas
complete-deposit-wrapper
Procesa una sola solicitud de depósito.
Parámetros:
txid:(buff 32)- El ID de transacción de Bitcoinvout-index:uint- El índice de salida de la transacción de depósitoamount:uint- La cantidad de sBTC a acuñar (en satoshis)recipient:principal- La dirección de Stacks que recibirá el sBTC acuñado
Devuelve:
(response bool uint)
Validación y autorización
Verifica que el llamador sea el principal firmante actual.
Comprueba que el monto del depósito esté por encima del límite de polvo.
Valida la longitud del ID de transacción.
Protección contra repetición
Se asegura de que el depósito no haya sido procesado antes (evita la repetición).
Ejecución
Acuna tokens sBTC para el destinatario mediante
.sbtc-tokendeprotocol-mint.Actualiza el estado del depósito en el contrato del Registro de sBTC mediante
.sbtc-registrydecomplete-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ósito
Devuelve:
(response uint uint)
Autorización
Verifica que el llamador sea el principal firmante actual.
Procesamiento por lotes
Itera a través de la lista de depósitos, procesando cada uno usando el
complete-individual-deposits-helperfunción.
Funciones privadas
complete-individual-deposits-helper
Función auxiliar para procesar depósitos individuales dentro de la operación por lotes.
Parámetros:
depósito:{txid: (buff 32), vout-index: uint, amount: uint, recipient: principal}- Datos de un solo depósitohelper-response:(response uint uint)- Acumulador para hacer seguimiento de los depósitos procesados
Devuelve:
(response uint uint)
Llamar al envoltorio de depósito
Llama a
complete-deposit-wrapperpara el depósito individual.
Manejo de éxito
Si tiene éxito, incrementa el conteo de depósitos procesados.
Manejo de errores
Si ocurre un error, se propaga con información adicional de índice (usando
ERR_DEPOSIT_INDEX_PREFIXo constantes de error relacionadas).
Interacciones con otros contratos
.sbtc-registry: Llama aget-current-signer-data,get-completed-deposit, ycomplete-depositpara gestionar el estado de los depósitos..sbtc-token: Llama aprotocol-mintpara crear nuevos tokens sBTC.
Consideraciones de seguridad
Control de acceso: Solo el principal firmante actual puede llamar a las funciones de finalización de depósito.
Prevención de repetición: El contrato verifica depósitos procesados anteriormente para evitar ataques de repetición.
Límite de polvo: Impone un monto mínimo de depósito para evitar spam y garantizar la viabilidad económica.
Validación del ID de transacción: Asegura que el ID de transacción proporcionado tenga la longitud correcta.
¿Te fue útil?