Firmantes de sBTC

Resumen

El Contrato de firmantes sBTCarrow-up-right (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 firmantes

    • new-aggregate-pubkey: (buff 33) - Nueva clave pública agregada

    • new-signature-threshold: uint - Nuevo umbral de firma

  • Devuelve: (response (buff 33) uint)

Flujo de la función:

1

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).

2

Verificar llamador

Verificar que el llamador sea el principal actual de firmante.

3

Validar claves

Comprobar la longitud de cada nueva clave y de la clave pública agregada (deben ser 33 bytes).

4

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úblicas

    • m: 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úblicas

    • m: 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úblicas

    • m: 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ública

    • iterator: (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 verificar

    • respuesta-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: Llamadas get-current-signer-data y rotate-keys para gestionar datos de firmantes.

Consideraciones de Seguridad

circle-exclamation

Última actualización

¿Te fue útil?