@eco-incorp/sauce/svm is the Solana side: staging a program through the kitchen, resolving accounts against the compiler’s account manifest, building and sending transactions, and verifying settle programs. Solana execution goes through the Kitchen client here; the SDK’s SVM route helpers emit a legacy instruction that the released engine does not accept.
sdk/dist/svm/resolve.d.ts.
Generated from the type declarations shipped in
@eco-incorp/sauce 0.99.4. Each entry shows the package authors’ JSDoc and declaration for this SDK version. For runtime compatibility and deployed addresses, see architecture and deployments.resolveAccounts
Function · sdk/dist/svm/resolve.d.ts
Resolves an AccountManifest into ordered account metas: metas[i] is
user-account index i of the execute instruction (inline: instruction account
i; staged: i + 1, after the buffer). The base role comes from the slot’s
requires; the resolution entry’s signer flag then replaces it (see
AccountResolution), and a TransactionSigner or the reserved PAYER_REF sets
it. An attached
TransactionSigner rides on the meta so the transaction builder signs with it.
Duplicate addresses across refs are fine - Solana dedupes at message compile.
A remaining entry is a POSITION, not an account: it marks where the
caller’s own variable-length tail begins, so resolution stops there and the
caller appends its tail itself. It must be the LAST entry, and one that is not
throws - stopping early would drop the slots after it from metas and shift
the index of every account the caller then appends.
MSG_SENDER/TX_ORIGIN is the first in-list signer, resolved LAZILY by the
engine (NoSigner only when the program actually reads the sender) - so no
signer is auto-appended; a MSG_SENDER-reading program whose manifest
declares no signer slot passes appendPayerSigner: true.
AccountResolution
Interface · sdk/dist/svm/resolve.d.ts
Maps each declared slot of the compiler’s AccountManifest to a concrete
address. signer REPLACES the manifest’s requirement rather than only
raising it: omit it to keep the manifest’s own value, true to make a
non-signer slot sign, and false to attach a slot the program treats as a
signer WITHOUT a transaction signature - which is what a PDA the program
signs for via invoke_signed needs. Pass the TransactionSigner itself to
also sign with it (required for any signer ref other than the reserved
fee-payer ref - the send layer has no other way to obtain that signature).
The two sides describe different things: the manifest states what the PROGRAM
requires of the slot, this states what the TRANSACTION provides.
PAYER_REF
Variable · sdk/dist/svm/resolve.d.ts
Reserved ref: resolves to the fee payer with signer:true (use it when
bytecode reads MSG_SENDER). A resolution entry under this key is a conflict
and throws - rename the plan ref if it must resolve to another address.
ResolveAccountsOptions
Interface · sdk/dist/svm/resolve.d.ts
ResolvedAccountMeta
Interface · sdk/dist/svm/resolve.d.ts
