No custom contracts. Server signed.
SPOUT deploys no contracts of its own. Every pour runs on contracts already live on Elysium: the concentrated liquidity DEX's factory, pool and position manager (Uniswap V3 on this deployment), WHYPE, and standard ERC20 transfers.
Each pour gets its own wallet, derived from one sealed seed with a fresh index. The seed is encrypted at rest with AES 256 GCM and never reaches the client. The vault receives deposits and owns every position NFT for the term.
Every on chain action has an idempotency key. The signed transaction is stored before broadcast, so a retry re sends the very same bytes and nonce. A crash can never execute an action twice.
A worker ticks every live pour every few seconds: deposits, fill clearing, shutoff checks, spring detection, re centering, term end and payouts. A database lease keeps two workers from running at once.
Rent accrual, tap balances, reserve tank accounting, risk scores and receipts live in Postgres. Every row that moved value links to its transaction hash.
Plain transfers to the vault, and a free sign in message (EIP 4361) to prove you own a wallet. Withdrawals and payouts are executed by the server straight to your wallet.
Pools, ticks, TWAPs and position calls go through one adapter interface. Switching between Uniswap V3 and Hybra is a configuration change.
Price and depth before the precompile
The HyperCore read precompile reaches Elysium a few weeks after mainnet. Until then SPOUT reads price from the pool's own TWAP and depth straight from on chain ticks: the tick bitmap, each initialized tick's net liquidity and the active liquidity, walked across the depth band. HyperCore price checks and Mains detection switch on once the precompile is live.