Depósito de sBTC
Resumen
El Contrato de depósito sBTC (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 Bitcoinvout-index:uint- El índice de salida (vout) 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á los sBTC acuñados
Devuelve:
(response bool uint)
Validación y autorización
Verifica que el llamador sea el principal firmante actual.
Comprueba que la cantidad del depósito esté por encima del límite de polvo.
Valida la longitud del identificador de transacción.
Protección contra repetición
Asegura que el depósito no se haya procesado antes (previene la reproducción).
Ejecución
Acuña tokens sBTC para el destinatario mediante
.sbtc-token'sprotocol-mint.Actualiza el estado del depósito en el contrato sBTC Registry mediante
.sbtc-registry'scomplete-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)
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
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 lote.
Parámetros:
deposit:{txid: (buff 32), vout-index: uint, amount: uint, recipient: principal}- Datos de un único depósitorespuesta-ayudante:(response uint uint)- Acumulador para rastrear los depósitos procesados
Devuelve:
(response uint uint)
Llamar al wrapper 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 del índice (usando
ERR_DEPOSIT_INDEX_PREFIXo constantes de error relacionadas).
Interacciones con Otros Contratos
.sbtc-registry: Llamadasget-current-signer-data,get-completed-deposit, ycomplete-depositpara gestionar el estado de los depósitos..sbtc-token: Llamadasprotocol-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ósitos.
Prevención de reproducción: El contrato verifica depósitos previamente procesados para evitar ataques de reproducción.
Límite de polvo: Impone una cantidad mínima de depósito para prevenir spam y asegurar la viabilidad económica.
Validación del identificador de transacción: Asegura que el identificador de transacción proporcionado tenga la longitud correcta.
¿Te fue útil?