Querying Info from our Contracts
Querying Info from the SYMMIO Diamond
Because SYMMIO is built on the Diamond Standard, the protocol's read methods are spread across many facets behind a single address. Calling them through a generic block explorer is awkward — explorers don't know which facet implements which selector, and the ABI surface area is large. The SYMMIO Intent Inspector is built for exactly this: it reads the live facet/selector map per chain, gives you a typed form for every read function, and decodes the results into something readable.
This page walks through the most common things a frontend developer reaches for the Inspector to do.
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 also human-readable:
So you can deep-link to a specific function call.
Browsing facets and selectors
Once you've loaded a diamond, the Inspector shows every facet registered on it, along with every function selector that facet implements. This is the single source of truth for "is function X live on chain Y" — if a selector is missing from this 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 / pure) and the Inspector generates a typed input form for its parameters. Fill in the inputs, hit "call", and the result comes back decoded.

Some common reads you'll do this way:
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 this 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 — anything view-tagged is callable from the Inspector.
Decoding calldata
If you've got a raw 0x… blob — from a failed transaction, a log, 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 debug an Instant Layer SignedOperation — sign one, paste the callData into the decoder, and verify it's calling what you think it's calling before posting to the solver.
Reading bind state for an account
When wiring up the Instant Layer flow, the most common "why is sendQuote reverting" answer is that the SubAccount isn't bound to a PartyB. Bind state lives on the Symmio core (not the AccountLayer), so:
Open the Symmio core diamond in the Inspector.
Call
getBindState(<subAccount>).Expect
status = 1andpartyB = <your hedger>. Anything else meansbindToPartyBhasn't landed (or landed on a different SubAccount).

Reading a quote's state
Given a quoteId returned by 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 / etc.), the bound PartyB, and the affiliate.

Last updated

