fix(bifrost): make ZEC transaction expiry deterministic and stabilize BondYield simulation

Fix ZEC signing inconsistencies and simulation startup failures.

Job 16296568835 exposed a BondYield-ChurnOut timeout: signers calculated ZEC transaction expiry from their local chain tips, producing different TSS digests. Retries could also change expiry while restoring the same unsigned transaction.

The MR also includes the simulation fixes from !5062 (closed), addressing overlapping mining and ambiguous funding broadcasts-the failure class seen in merge-train job 16494515113.

Changes

  • Derive expiry from the agreed ZEC height at the outbound’s fixed THORChain height, and preserve it across retries and restarts.
  • Reject unavailable or mismatched historical state without falling back to a local tip.
  • Refresh the agreed ZEC height through network-fee reports every 10 native blocks.
  • Retire expired signing attempts for THORChain rescheduling without observing them as successful outbounds.
  • Use one sequential mocknet mining loop and wait past the 400-block warm-up before funding.
  • Wait for confirmed cumulative funding balances before sending subsequent transfers.
  • Retry ambiguous ZEC broadcasts with the original signed bytes, verify acceptance against the exact transaction, and retain input reservations until acceptance is known.
Edited by ZlyDevMaya

Merge request reports

Loading
Loading