Non-custodial

Astrolabe never holds user keys. assemble returns a VersionedTransaction the client signs and submits. A compromise of the API cannot move user funds — the worst case is a mispriced quote, which the on-chain program’s own invariants reject (see below).

On-chain invariants (PropAMM)

The quote the API returns is bounded by what the program will settle:
  • Reciprocal round-trip guard. Every tier satisfies bid_price × ask_price ≤ PRICE_SCALE², so a base → quote → base round trip can never mint value out of the vault.
  • Staleness gate. A quote older than the market’s max_staleness_slots is rejected on-chain, so the API can’t get a stale fill to land.
  • Size cap by tier. An input above the top tier is rejected, not clamped.

Quote farming & liquidity exhaustion

Informed by Augusto et al., Liquidity Exhaustion Attacks in Intent-Based Cross-Chain Bridges (arXiv:2602.17805), the same-chain RFQ desk applies:

Reporting

Found a vulnerability? Email security@astrolabe.markets. Good-faith disclosure is appreciated. The same contact is embedded in the on-chain program’s security.txt.