import { Hex } from 'viem'; import { WotsBlockPublicKey } from '../clients/vault-provider/types'; /** * Derive deterministic WOTS block public keys from a per-vault 64-byte seed. * * The seed must come from `expandWotsSeed(root, htlcVout)` (vault-secrets * module). Per-vault uniqueness is encoded in `htlcVout`; this function * only handles the chain derivation. Per-block 20-byte seeds are derived * as `hash160(seed || blockIdx)` and fed into the standard Rust * `babe::wots` chain logic. * * The seed is zeroed in the `finally` block. * * @stability frozen — on-chain-binding. Per-block seed derivation, * chain length, checksum-digit ordering, and terminal byte layout * must match Rust `babe::wots` byte-for-byte. Any divergence rotates * `depositorWotsPkHash` and breaks resume + on-chain verification * for every existing vault. * * @param seed - 64-byte per-vault seed. * @returns Array of 2 WOTS block public keys. * @throws If `seed.length !== 64`. */ export declare function deriveWotsBlocksFromSeed(seed: Uint8Array): Promise; /** * Compute the keccak256 hash of WOTS block public keys. * * Matches Rust `btc_vault::wots_public_keys_keccak256`: for each block, * chain tips are concatenated in canonical order * `[checksum_minor, checksum_major, message_terminals...]`, then all * blocks are concatenated and hashed. * * The result is committed on-chain as `depositorWotsPkHash` so the vault * provider can verify submitted WOTS public keys. * * @stability frozen — on-chain-binding. Concatenation order of chain * tips and the keccak256 input layout MUST match Rust * `btc_vault::wots_public_keys_keccak256` byte-for-byte. Any change * rotates the on-chain commitment and breaks every existing vault. */ export declare function computeWotsBlockPublicKeysHash(publicKeys: WotsBlockPublicKey[]): Hex; //# sourceMappingURL=blockDerivation.d.ts.map