Quoting
sourceAccountis required for any non-EVM leg. The solver compiles the transaction around it. A Solana source withoutsourceAccountanswers a bareEIN0050onPOST /quote/previewandEIN0008with no reference onPOST /quote— not a field error (known issue). ChecksourceAccountbefore retrying.- Addresses are base58 or
0x+ 64 hex; base58 is converted at the boundary, and hex is the wire form.recipientis spelled in the destination chain’s family andsourceAccountin the source chain’s family. A non-EVMrecipientorsourceAccountthat does not decode isEIN0001naming the field. - Native SOL. Quote the chain row’s
nativeKey(sol) when the user means to spend the coin itself, andwsolwhen they hold wrapped SOL. On a native-coin quote the disclosure carrieswrapsNativeandwrappedAsset: label the screen with them, never branch the flow on them. The escrow holds, and a refund returns, the wrapped token. - The disclosure.
disclosure.signablePayload.kindisoif-escrow-nonevm,signatureEnvelopeised25519-97, anddisclosure.signablePayload.orderIdis the on-chain order id.
sourceAccount whenever the recipient’s family
differs from the source’s (SDK — a quote request).
Signing
The disclosedsignPayload is {…, sender, feePayer, transactionMessage, digest}. sender is
the user and feePayer is the solver — that split is the gasless promise: the user never pays gas
to open the order.
- The funding wallet signs the base64-decoded
transactionMessagebytes with Ed25519 — neverdigest, which is a checksum, not what gets signed. Sign the disclosed bytes verbatim. - The wire form is the 97-byte envelope
0x00‖ 64-byte signature ‖ 32-byte public key (the order’s user), as standard base64: 132 characters. The hub also reads hex but forwards the string unchanged, and the aggregator accepts only base64.
executeQuote does all of this, after checking the message
(Wallets — how a Solana order is signed).
The pieces are exported too:
Submitting
Send the envelope assignature on POST /order/openfor
with the quote’s quoteRequestId and quoteId, before expiresAt. Unlike the EVM escrow lane,
the hub checks the envelope itself before forwarding:
- 97 bytes;
- flag byte
0x00; - the public key equal to the order’s user;
- the signature valid over the disclosed
transactionMessage; - the message’s order id equal to the quote’s.
EIN0007: re-quote and sign again. The forward-reservation, replay
and expiry rules are the signed lanes’ and are on the route page
(Behavior).
Following
- Poll
GET /order/{orderId}/statuswith the ack’sorderIdas on any lane. Solana-origin orders reachfinalizedupstream. - A Solana Open signature does not resolve on
GET /onchain/tx/{chainDomain}/{txHash}/order, while the same order’s settle signature does (known issue). Follow a Solana-origin order byonchainOrderIdonGET /onchain/{orderId}/fillinstead. - On Solana
txHashis case-sensitive base58 and is used as given; the hub lowercases it on every chain except Solana and Sui.
Refunds
There is no escrow tuple for a non-EVM origin:GET /onchain/{orderId}/order answers EIN0009
permanently for a Solana-origin order, even once its Open, fill and settle are all observed
(known issue). The documented withdraw
steps need that tuple, so they are EVM-only
(Refunds — how do I withdraw?). A
Solana-origin order refunds through GET /onchain/{orderId}/refund instead: the hub builds the
unsigned transaction for the order’s user to sign and send. What a refund returns is unchanged: the
wrapped token the escrow holds, to the order’s user (unwrap=true turns wrapped SOL back into SOL
in the same transaction).
Wallets
The SDK’ssolanaWalletFromStandard works with any Wallet Standard wallet (Phantom, Solflare,
Backpack…). Wallets differ in what they will sign, so the SDK signs the transactionMessage bytes
either as a transaction or as a raw message, and verifies the Ed25519 signature before sending it
(Wallets — how a Solana order is signed).
Cluster domain
The chain domain issolana-<cluster> as the deployment’s catalog declares it — read the
chainDomain of the row whose family is solana rather than assuming a name. Samples in this
reference use solana-localnet.