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:
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:
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 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

