Firmantes de sBTC
Resumen
El Contrato de firmantes sBTC (sbtc-bootstrap-signers.clar) gestiona el conjunto de firmantes para el sistema sBTC. Maneja la rotación de las claves de los firmantes y proporciona utilidades para generar direcciones multisig.
Constantes
tamaño-de-clave: La longitud requerida de las claves públicas (33 bytes).
Constantes de Error
ERR_TAMAÑO_CLAVE_PREFIJO: Prefijo para errores de tamaño de clave en el procesamiento por lotes.ERR_TAMAÑO_CLAVE(u200): Indica que una clave proporcionada no tiene la longitud correcta.ERR_CALLER_INVALIDO(u201): Señala que el llamador de la función no es el principal actual de firmante.ERR_UMBRAL_FIRMA(u202): Indica un umbral de firma inválido (debe ser >50% y ≤100% del total de claves de firmantes).
Funciones Públicas
envoltorio-rotar-claves
Rota las claves de los firmantes. Se llama cuando se actualiza el conjunto de firmantes.
Parámetros:
new-keys:(list 128 (buff 33))- Lista de nuevas claves públicas de firmantesnew-aggregate-pubkey:(buff 33)- Nueva clave pública agregadanew-signature-threshold:uint- Nuevo umbral de firma
Devuelve:
(response (buff 33) uint)
Flujo de la función:
Validar umbral de firma
Asegurar que el nuevo umbral de firma sea válido (debe ser >50% y ≤100% del total de claves de firmantes).
Verificar llamador
Verificar que el llamador sea el principal actual de firmante.
Validar claves
Comprobar la longitud de cada nueva clave y de la clave pública agregada (deben ser 33 bytes).
Actualizar registro
Llamar al contrato del Registro sBTC para actualizar las claves y la dirección.
Funciones de Solo Lectura
pubkeys-to-spend-script
Genera el script de redención p2sh para un multisig.
Parámetros:
pubkeys:(list 128 (buff 33))- Lista de claves públicasm:uint- Número de firmas requeridas
Devuelve:
(buff 1024)- El script de redención p2sh
pubkeys-to-hash
Calcula el hash160 del script de redención p2sh.
Parámetros:
pubkeys:(list 128 (buff 33))- Lista de claves públicasm:uint- Número de firmas requeridas
Devuelve:
(buff 20)- El hash160 del script de redención
pubkeys-to-principal
Genera un principal (dirección Stacks) a partir de un conjunto de pubkeys y un umbral m-de-n.
Parámetros:
pubkeys:(list 128 (buff 33))- Lista de claves públicasm:uint- Número de firmas requeridas
Devuelve:
principal- La dirección Stacks generada
pubkeys-to-bytes
Concatena una lista de pubkeys en un buffer con prefijos de longitud.
Parámetros:
pubkeys:(list 128 (buff 33))- Lista de claves públicas
Devuelve:
(buff 510)- Pubkeys concatenadas con prefijos de longitud
concat-pubkeys-fold
Concatena un buffer de pubkey con un prefijo de longitud.
Parámetros:
pubkey:(buff 33)- Una sola clave públicaiterator:(buff 510)- Acumulador para la concatenación
Devuelve:
(buff 510)- Buffer concatenado actualizado
bytes-len
Devuelve la longitud de un buffer de bytes como un solo byte.
Parámetros:
bytes:(buff 33)- Buffer de bytes de entrada
Devuelve:
(buff 1)- Longitud como un solo byte
uint-to-byte
Convierte un uint a un solo byte.
Parámetros:
n:uint- Número de entrada
Devuelve:
(buff 1)- Número como un solo byte
Funciones Privadas
verificacion-longitud-clave-firmante
Verifica que la longitud de cada clave sea exactamente 33 bytes.
Parámetros:
clave-actual:(buff 33)- Clave pública a verificarrespuesta-ayudante:(response uint uint)- Acumulador para el manejo de errores
Devuelve:
(response uint uint)- Acumulador actualizado o error
Constantes
BUFF_A_BYTE
Una lista constante que asigna valores uint (0-255) a sus representaciones en bytes correspondientes.
Interacciones con Otros Contratos
.sbtc-registry: Llamadasget-current-signer-datayrotate-keyspara gestionar datos de firmantes.
Consideraciones de Seguridad
Control de Acceso: Solo el principal actual de firmante puede llamar a la función de rotación de claves.
Validación de Claves: Asegura que todas las claves proporcionadas tengan la longitud correcta.
Umbral de Firma: Impone un umbral mínimo de más del 50% de los firmantes y un máximo del 100%.
Generación Multisig: Proporciona utilidades para la generación segura de direcciones multisig.
Última actualización
¿Te fue útil?