Project Name: Zenon AMM: a custodial swap venue on NoM
Description: A swap venue for ZTS pairs on the Network of Momentum. It prices trades with Uniswap V2’s constant-product curve and settles on-chain against its own reserves. It is closer to Boltz or SideShift than to Uniswap: NoM has ten fixed embedded contracts, no way to add one, and frozen sporks, so no contract can hold a pool. A key has to.
It is custodial, and says so. What it adds is making that key as accountable as possible:
- The price is recomputable by anyone. Quotes are
x·y=kover published reserves, so anyone can check they were paid what they were owed. - Swaps above a cap settle as a pair of HTLCs, so the venue can’t take your input and pay nothing.
- LP shares are real ZTS tokens held in your own wallet.
- Solvency is arithmetic anyone can do from L1 with
amm-audit. - Terms sit in an append-only, hash-chained policy record on-chain.
Why it matters for Zenon: a ZTS has no standing, priced market on NoM today. Trading one means finding a counterparty and negotiating (a Syrius P2P swap, OTC, or off-chain). This venue:
- Gives any token a market through permissionless pool creation.
- Pays LPs the fee.
- Needs no spork, so it doesn’t wait on an upgrade path that currently has no date.
URL: Source to be published at https://github.com/sol-znn (currently private while the proof of concept is in development).
Docs: https://pdflink.to/623f5d80/
WIP Interface:
Team:
- sol: design, implementation, testing, documentation. Also built Ferry (atomic swaps) and verified FROST-Ed25519 threshold signing on NoM, both of which this venue is built on.
Phases
Phase 1: The venue, from devnet proof of concept to a deployable release
High-level overview of main tasks:
- Built and verified on the go-zenon devnet:
engine/curve: Uniswap V2’s curve over base units (swaps, single-sided zap in and out,feeTooperator fee as minted shares, the 1,000-share minimum), tested against Uniswap V2’s own vectors to the base unit- Three settlement modes:
- custodial under a published cap, paid from the operator’s own float
- atomic above the cap, as two
htlcentries with the pool holding the preimage - degen, opt-in and uncapped with no protection, which the user must arm and name, which
autonever selects, and which the policy record discloses
- A quote is an address, so any wallet or exchange withdrawal works. Deposit addresses are pre-fused with plasma so they don’t mine PoW
- A block journal that writes each block down before signing it, so a crash leaves a state the chain can settle
- LP share ZTS, permissionless pool creation, multi-hop routing through the ZNN hub, and the hash-chained policy record
- FROST t-of-n (RFC 9591, Ed25519) committee keys for pool reserves, with a FROST-signed block confirmed to be accepted by go-zenon
amm-audit(L1-only solvency audit),ammd(daemon, API, and web page on the Zenon design system), ande2e(every flow over the API)
- Remaining:
- Publish the source
- Distributed key generation and separate signer processes (today every share lives in one process)
- Signer-side price enforcement: each signer re-derives the curve and refuses a mismatched payout
- A watchtower that reclaims a user’s leg if the venue is down past the deadline
- Replace the devnet demo wallet with the Syrius browser extension
- Encrypt operator key storage
- Mainnet measurement and a public deployment with a published hot-float cap
Completion of Phase 1 will be measured by:
Every flow settled end to end on devnet (2026-09-13):
- custodial swap 30 s
- atomic swap 1 m 51 s
- degen swap of 250 ZNN in 30 s
- two-hop atomic swap 2 m 0 s
- deposit 1 m 9 s, withdrawal 27 s
- pool creation 5 m 21 s
A hard kill mid-settlement recovered without paying twice: the hot float came out at exactly 500 ZNN and 5,000 QSR
amm-auditclosed with every gap at exactly zero, and √k per share rose, showing the fee reached LPs
Source public, signers running as separate processes from a DKG, and signers refusing a payout that doesn’t match the curve
Watchtower running, and swaps driven from the Syrius extension rather than the demo wallet
Latency re-measured on mainnet, and a public deployment with its policy record live
Security audit completed, and any findings addressed
Funding
Total Requested Funding = 10,000 ZNN and 100,000 QSR
Project Duration = 2-4 weeks
How did you calculate your budget?
- Scope.
- The amm curve engine, three settlement state machines, a FROST implementation, the chain client, the auditor, the daemon and the web page.
- The remaining work is the part that turns a demo into a venue: distributed keys, signer-side enforcement, a watchtower, and a mainnet deployment.
- Split. The request is filed as two maximum-size projects, matching the two halves of the work: (1) the venue as built and verified, and (2) the path off devnet.
Project and Payment Milestones:
Phase 1, the venue as built and on mainnet
Funding Request:
- sol: 10,000 ZNN and 100,000 QSR
Duration: delivered on mainnet; paid when the source is published
Other Information
Risks, Assumptions, Known Issues, Dependencies:
- The price is a signed promise on every path, not something the chain enforces. On the atomic path the pool sets leg B after the user’s leg is funded and holds the preimage. The user can neither refuse a short leg B nor reclaim ahead of it. A short fill is provable against the signed quote and public reserves, but that is reputational recourse, not a contract.
- LP capital is custodial. Nothing on mainnet today offers pooled passive liquidity together with self-custody.
- Degen mode removes every protection. Whether it ships enabled is an operator decision to settle in this thread.
- Devnet numbers don’t carry over. The devnet runs v2 momentums with dynamic plasma, while mainnet runs v1 with a 100-block-per-momentum cap. Every latency figure is re-measured on mainnet before it’s shown to users.
- Deposit-address plasma. The plasma contract locks each stake for ten hours, so the stake budget has to be sized against the real quote rate.
- Open decisions:
- The hot-float cap (currently 1,000 ZNN, with 100 ZNN per trade)
- The signer set and threshold (who, how many, how they are paid)
- Whether the ZNN/QSR pool should be seeded by the operator before outside LPs arrive
Have you previously submitted a proposal (either in Accelerator-Z or Incubator)?
-
In progress (submitted alongside this one)
Fees and economics. 30 bps: 25 to LPs and 5 to the operator, taken as minted LP shares (Uniswap V2’s split and mechanism). Fees accrue into reserves, so a share grows in value rather than paying a stream. That keeps every claim on a pool a readable ZTS balance.
On-chain filing.
| Project name | Funds |
|---|---|
Zenon AMM (1/2) |
5,000 ZNN / 50,000 QSR |
Zenon AMM (2/2) |
5,000 ZNN / 50,000 QSR |
Documentation (published with the source):
PLAN.md: design, prior art, trust ladder, economicsdocs/PHASE0.md: spike measurementsdocs/POC.md: running-venue measurementsdocs/amm-settlement-paths.pdf: every flow drawn with its trust assumptions
