For the complete documentation index, see llms.txt. This page is also available as Markdown.

Querying Info from the SYMMIO Diamond

Symmio is built on the EIP-2535 Diamond Standard, so the protocol's read methods are spread across many facets behind a single address. Calling them through a generic block explorer is painful: the explorer doesn't know which facet implements which selector, and the ABI surface is large. The SYMMIO Intent Inspector is built for this. It reads the live facet and selector map per chain, gives you a typed form for every read function, and decodes the results into something legible.

The Inspector works against any SYMMIO diamond. The Symmio core, the AccountLayer, and the InstantLayer are all browsable; just pick the chain and paste the diamond address you want to inspect.

Opening the Inspector

Go to intent.symmscan.com/inspector, pick the chain you want to query (the Inspector supports every chain Symmio is deployed on), then paste the diamond address, or use one of the suggested defaults for that chain.

The URL pattern is human-readable too, so you can deep-link straight to a specific function call:

Browsing facets and selectors

Once a diamond is loaded, the Inspector shows every facet registered on it, along with every function selector that facet implements. This is the source of truth for whether a given function is live on a given chain: if a selector is missing from the list, the facet hasn't been deployed (or hasn't been cut into the diamond) on that chain.

Calling a view function

Click any read function (view or pure) and the Inspector builds a typed input form for its parameters. Fill in the inputs, hit "call", and the result comes back decoded.

Some common reads:

Function
Diamond
What you get

getUserSubAccountsAddresses(owner, offset, limit)

AccountLayer

All SubAccounts owned by an EOA

getVirtualAccountsAddressesOfSubAccount(sub, offset, limit)

AccountLayer

Currently-active VAs on a SubAccount

getVirtualAccountQuoteIds(va, offset, limit)

AccountLayer

Open quote IDs the AccountLayer is tracking on a VA

predictNextVirtualAccountAddress(sub, isolation, symbolId)

AccountLayer

Deterministic next-VA address; use when computing addMarginToNextVA calldata

getActiveVAByKey(sub, isolation, symbolId)

AccountLayer

The live VA for (sub, isolation, symbol), or 0x0 if none

getBindState(account)

Symmio core

(status, partyB, timestamp); status == 1 means bound

getQuote(quoteId)

Symmio core

The full quote struct (size, price, locked margins, state, etc.)

For the full set of read functions on each diamond, see the facet listing.

Decoding calldata

If you have a raw 0x… blob, from a failed transaction, a log, or an EIP-712 SignedOperation's callData field, the Inspector can decode it as long as the leading selector matches one in the diamond's selector map. Paste the calldata, pick the diamond, and the Inspector resolves it to a function name and pretty-prints the arguments.

This is the fastest way to check an Instant Layer SignedOperation: sign one, paste the callData into the decoder, and confirm it calls what you expect before posting to the solver.

Reading bind state for an account

When you're wiring up the Instant Layer flow, the most common reason sendQuote reverts is that the SubAccount isn't bound to a PartyB. Bind state lives on the Symmio core, not the AccountLayer, so:

  1. Open the Symmio core diamond in the Inspector.

  2. Call getBindState(<subAccount>).

  3. Expect status = 1 and partyB = <your hedger>. Anything else means bindToPartyB hasn't landed, or landed on a different SubAccount.

Reading a quote's state

Given a quoteId from the hedger's SendQuoteTransaction notification, call getQuote(quoteId) on the Symmio core to see the full quote struct: price, quantity, filled amounts, locked margins, state (PENDING, LOCKED, OPEN, CLOSE_PENDING, CLOSED, and so on), the bound PartyB, and the affiliate.

Last updated