Registro de sBTC
Resumen
El contrato del Registro sBTC (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 retirosender: Principal del remitenterecipient: 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:uintmax-fee:uintsender:principalrecipient:{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:uintbitcoin-txid:(buff 32)output-index:uintsigner-bitmap:uintfee:uint
Devuelve:
(response bool uint)
complete-withdrawal-reject
Marca una solicitud de retiro como rechazada.
Parámetros:
request-id:uintsigner-bitmap:uint
Devuelve:
(response bool uint)
complete-deposit
Registra una transacción de depósito completada.
Parámetros:
txid:(buff 32)vout-index:uintamount:uintrecipient: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:principalnew-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"
Los eventos se emiten mediante print sentencias en el contrato para las acciones listadas arriba.
Consideraciones de Seguridad
Control de Acceso
Solo contratos de protocolo autorizados pueden llamar a ciertas funciones.
Prevención de Repetición
El contrato previene ataques de reproducción en depósitos, claves públicas agregadas y direcciones multi-firma.
Gestión del Estado
El contrato gestiona cuidadosamente el estado de los retiros y el conjunto actual de firmantes.
¿Te fue útil?