Registro de sBTC

Resumen

El contrato del Registro sBTCarrow-up-right (sbtc-registry.clar) sirve como el registro central del sistema sBTC. Gestiona las solicitudes de retiro, los 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 multifirma.

Variables de estado

  • last-withdrawal-request-id: Registra el ID de la solicitud de retiro más reciente.

  • 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: Contiene la clave pública agregada actual.

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

Mapas de datos

withdrawal-requests

Almacena los detalles de las 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 BTC del destinatario (versión y hashbytes)

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

withdrawal-status

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

  • Valor: bool (true si se acepta, false si se rechaza, none si está pendiente)

completed-deposits

Registra las transacciones de depósito completadas para evitar ataques de repetición.

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

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

aggregate-pubkeys

Registra las claves públicas agregadas utilizadas para evitar ataques de repetición.

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

  • Valor: bool

multi-sig-address

Registra las direcciones multifirma utilizadas para evitar ataques de repetición.

  • Clave: principal (dirección multifirma)

  • Valor: bool

protocol-contracts

Almacena las direcciones de contratos de protocolo autorizados.

  • Clave: principal (dirección del contrato)

  • Valor: bool

Funciones de solo lectura

get-withdrawal-request

Recupera una solicitud de retiro por su ID.

  • Parámetros:

    • id: uint

  • Devuelve: (optional {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 e índice de salida.

  • Parámetros:

    • txid: (buff 32)

    • vout-index: uint

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

get-current-signer-data

Devuelve la información actual del conjunto de firmantes.

  • 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 firmantes.

  • Devuelve: (list 128 (buff 33))

Funciones públicas

create-withdrawal-request

Crea una nueva solicitud de retiro. Solo puede ser llamada por contratos de 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 multifirma 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 de protocolo autorizado.

  • Devuelve: (response bool uint)

validate-protocol-caller

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

  • Parámetros:

    • caller: principal

  • Devuelve: (response bool uint)

Eventos

El contrato emite eventos (mediante 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 instrucciones en el contrato para las acciones enumeradas arriba.

Consideraciones de seguridad

1

Control de acceso

Solo los contratos de protocolo autorizados pueden llamar a ciertas funciones.

2

Prevención de repetición

El contrato evita ataques de repetición en depósitos, claves públicas agregadas y direcciones multifirma.

3

Gestión del estado

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

¿Te fue útil?