Understanding the Contract Architecture

At the center of the protocol is a diamond contract (EIP-2535). This serves as a single “hub” address that exposes many different modules, called facets. Each facet handles one area of the system: opening and closing positions, funding, liquidations, force actions, viewing state, and so on. When you call the diamond, it forwards your call to the right facet behind the scenes while sharing the same storage. For you as a solver, that means you mostly interact with one main contract address, but you still get access to all the protocol’s features.

On the trader side, SYMMIO uses a MultiAccount system. Instead of trading directly from their normal wallet, a user creates one or more sub-accounts. Each sub-account is its own little trading environment with its own margin and positions. This lets traders isolate risk: a liquidation event in one sub-account doesn’t automatically liquidate everything else. As a solver, you will see intents and positions tied to these sub-account addresses (Party A), not the user’s main wallet. When traders enable instant trading or conditional orders, they delegate permission from their sub-account to you via the MultiAccount contract so that you can request closes, cancels, or instant opens on their behalf.

Your address acts as Party B inside this same architecture. Before you can trade, your solver must be whitelisted as a Party B on the diamond. Once that’s done, you can use the Party B functions: locking quotes, opening positions, closing, settling, charging funding, and so on. The protocol tracks your allocated balances, reserve vault, and open exposure in shared storage, alongside every Party A account. Whenever you call an action, the facets check both sides for solvency and valid pricing, often with the help of Muon signatures.

Finally, data like symbols, minimum position value, funding configuration, open interest caps etc. is exposed through view functions on the diamond. The solver architecture listens for events from the diamond, reads state from the Diamond, and then reacts with its own custom logic.

Last updated