Add Monero (XMR) chain support with FROST threshold signing

Summary

Adds the thornode-side Monero (XMR) integration with FROST threshold signing.

This is the Thornode / Bifrost / simulation half of the work. The Rust-side signer and Serai-side changes are now tracked in thorchain/devops/serai!4 (merged).

The default XMR_FROST_SIGNER_IMAGE compose fallback tracks the org MR branch image registry.gitlab.com/thorchain/devops/serai/xmr-frost-signer:boonew-xmr-frost-signer.

Overview

This branch:

  • wires XMR through common, bifrost, x/thorchain, APIs, regression, and simulation
  • introduces a FROST keygen/signing path and uses it for the current THOR+XMR vault family
  • hard-cuts XMR over to FROST-only routing/signing in handwritten Thornode/Bifrost logic; there is no XMR EDDSA fallback
  • keeps the existing GG20/EDDSA behavior for non-XMR chains unchanged
  • renames XMRMonovaultKeygen to FrostKeygen so the type reflects the signing algorithm rather than assuming FROST will always mean "the XMR vault"

Scope

  • XMR chain integration: address parsing/validation, inbound attribution, view key exposure, and unknown-sender/refund-safe handling for stealth-address inbounds.
  • Vault/keygen model changes: pub_key_frost, observed_monero_height, FROST keyshare backup/restore plumbing, and FROST pubkey exposure in vault/pubkey queries.
  • XMR outbound hardening: spent-output-ref propagation, consensus matching, non-signer co-attestation, deterministic outbound ordering, and wallet2-safe observation/signing behavior.
  • XMR vault-family lifecycle: FROST keygen scheduling, churn/rotation handling, chain-aware vault selection, XMR-only migration targeting, and genesis/bootstrap handling for the current THOR+XMR vault family.
  • XMR timing hardening: dedicated FROST keygen timeout plus wider XMR signing/observation windows for slow FROST plus confirmation paths.
Edited by Boone W

Merge request reports

Loading