Registro de sBTC

Resumen

El contrato del Registro sBTCarrow-up-right (sbtc-registry.clar) sirve como el registro central para el sistema sBTC. Administra solicitudes de retiro, depósitos completados y el conjunto actual de firmantes. Este contrato es crucial para mantener el estado y coordinar las operaciones dentro del ecosistema sBTC.

Constantes de Error

  • ERR_UNAUTHORIZED (u400): Indica acceso no autorizado.

  • ERR_INVALID_REQUEST_ID (u401): Significa un ID de solicitud de retiro inválido.

  • ERR_AGG_PUBKEY_REPLAY (u402): Indica un intento de reproducir una clave pública agregada.

  • ERR_MULTI_SIG_REPLAY (u403): Significa un intento de reproducir una dirección multi-firma.

Variables de Estado

  • last-withdrawal-request-id: Rastrea el ID de la última solicitud de retiro.

  • current-signature-threshold: Almacena el umbral actual de firmas requeridas.

  • current-signer-set: Mantiene una lista de las claves públicas de los firmantes actuales.

  • current-aggregate-pubkey: Conserva la clave pública agregada actual.

  • current-signer-principal: Almacena la dirección principal del firmante actual.

Mapas de Datos

withdrawal-requests

Almacena detalles de solicitudes de retiro indexados por ID de solicitud.

  • Campos:

    • amount: Cantidad de sBTC que se retira (en sats)

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

    • sender: Principal del remitente

    • recipient: Dirección de destinatario BTC (versión y hashbytes)

    • block-height: Altura de bloque de quema donde se creó la solicitud

withdrawal-status

Rastrea el estado de las solicitudes de retiro indexadas por ID de solicitud.

  • Valor: bool (true si aceptado, false si rechazado, none si pendiente)

completed-deposits

Registra transacciones de depósitos completados para prevenir ataques de reproducción.

  • Clave: {txid: (buff 32), vout-index: uint}

  • Valor: {amount: uint, recipient: principal}

aggregate-pubkeys

Rastrea claves públicas agregadas usadas para prevenir ataques de reproducción.

  • Clave: (buff 33) (clave pública agregada)

  • Valor: bool

multi-sig-address

Rastrea direcciones multi-firma usadas para prevenir ataques de reproducción.

  • Clave: principal (dirección multi-firma)

  • Valor: bool

protocol-contracts

Almacena direcciones de contratos del protocolo autorizados.

  • Clave: principal (dirección de contrato)

  • Valor: bool

Funciones de Solo Lectura

get-withdrawal-request

Recupera una solicitud de retiro por su ID.

  • Parámetros:

    • id: uint

  • Devuelve: (opcional {amount: uint, max-fee: uint, sender: principal, recipient: {version: (buff 1), hashbytes: (buff 32)}, block-height: uint, status: (optional bool)})

get-completed-deposit

Obtiene un depósito completado por ID de transacción y índice de salida.

  • Parámetros:

    • txid: (buff 32)

    • vout-index: uint

  • Devuelve: (opcional {amount: uint, recipient: principal})

get-current-signer-data

Devuelve información del conjunto de firmantes actual.

  • Devuelve: {current-signer-set: (list 128 (buff 33)), current-aggregate-pubkey: (buff 33), current-signer-principal: principal, current-signature-threshold: uint}

get-current-aggregate-pubkey

Devuelve la clave pública agregada actual.

  • Devuelve: (buff 33)

get-current-signer-principal

Devuelve el principal del firmante actual.

  • Devuelve: principal

get-current-signer-set

Devuelve el conjunto actual de claves públicas de los firmantes.

  • Devuelve: (list 128 (buff 33))

Funciones Públicas

create-withdrawal-request

Crea una nueva solicitud de retiro. Solo llamable por contratos del protocolo.

  • Parámetros:

    • amount: uint

    • max-fee: uint

    • sender: principal

    • recipient: {version: (buff 1), hashbytes: (buff 32)}

    • height: uint

  • Devuelve: (response uint uint)

complete-withdrawal-accept

Marca una solicitud de retiro como aceptada.

  • Parámetros:

    • request-id: uint

    • bitcoin-txid: (buff 32)

    • output-index: uint

    • signer-bitmap: uint

    • fee: uint

  • Devuelve: (response bool uint)

complete-withdrawal-reject

Marca una solicitud de retiro como rechazada.

  • Parámetros:

    • request-id: uint

    • signer-bitmap: uint

  • Devuelve: (response bool uint)

complete-deposit

Registra una transacción de depósito completada.

  • Parámetros:

    • txid: (buff 32)

    • vout-index: uint

    • amount: uint

    • recipient: principal

  • Devuelve: (response bool uint)

rotate-keys

Actualiza el conjunto de firmantes, el principal multi-firma y la clave pública agregada.

  • Parámetros:

    • new-keys: (list 128 (buff 33))

    • new-address: principal

    • new-aggregate-pubkey: (buff 33)

    • new-signature-threshold: uint

  • Devuelve: (response (buff 33) uint)

Funciones Privadas

increment-last-withdrawal-request-id

Incrementa y devuelve el siguiente ID de solicitud de retiro.

  • Devuelve: uint

is-protocol-caller

Comprueba si el llamador es un contrato del protocolo autorizado.

  • Devuelve: (response bool uint)

validate-protocol-caller

Valida si un principal dado es un contrato del protocolo autorizado.

  • Parámetros:

    • caller: principal

  • Devuelve: (response bool uint)

Eventos

El contrato emite eventos (a través de print) para acciones importantes:

  • Creación de solicitud de retiro: "withdrawal-create"

  • Aceptación de retiro: "withdrawal-accept"

  • Rechazo de retiro: "withdrawal-reject"

  • Finalización de depósito: "completed-deposit"

circle-info

Los eventos se emiten mediante print sentencias en el contrato para las acciones listadas arriba.

Consideraciones de Seguridad

1

Control de Acceso

Solo contratos de protocolo autorizados pueden llamar a ciertas funciones.

2

Prevención de Repetición

El contrato previene ataques de reproducción en depósitos, claves públicas agregadas y direcciones multi-firma.

3

Gestión del Estado

El contrato gestiona cuidadosamente el estado de los retiros y el conjunto actual de firmantes.

¿Te fue útil?