> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# svm: Engine

> Engine: 10 exports of the svm module of @eco-incorp/sauce, including EXECUTE_DISCRIMINATOR, EXECUTE_FROM_ACCOUNT_DISCRIMINATOR, CLOSE_ACCOUNT_DISCRIMINATOR, HEAP_FRAME_BYTES, HEAP_FRAME_CU_PER_INVOCATION, REQUEST_HEAP_FRAME_WIRE_BYTES.

`@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.

```typescript theme={null}
import { createSauceSvmClient } from "@eco-incorp/sauce/svm";
```

This page covers `sdk/dist/svm/engine.d.ts`.

<Note>
  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](/programmable-transactions/sauce/architecture-and-deployments).
</Note>

### `EXECUTE_DISCRIMINATOR`

*Variable* · `sdk/dist/svm/engine.d.ts`

The Kitchen-mediated engine instruction discriminators.

Declared here, not generated. The pre-release engine shipped an `engine-abi.json` these were
derived from; neither that artifact nor the engine it described exists any more - nothing about
the engine is source-controlled now, it is fetched from a pinned release. These are still not
hand-copies in the sense that let `BYTECODE_FORMAT_EPOCH` rot: `engine-wire-drift.test.ts` asserts
each against the release's own `engine-wire-<cluster>.json`, which the engine generates from its
Rust constants.

```typescript theme={null}
EXECUTE_DISCRIMINATOR: Uint8Array<ArrayBuffer>
```

### `EXECUTE_FROM_ACCOUNT_DISCRIMINATOR`

*Variable* · `sdk/dist/svm/engine.d.ts`

```typescript theme={null}
EXECUTE_FROM_ACCOUNT_DISCRIMINATOR: Uint8Array<ArrayBuffer>
```

### `CLOSE_ACCOUNT_DISCRIMINATOR`

*Variable* · `sdk/dist/svm/engine.d.ts`

`closeAccount` - the third instruction, previously unrepresented here.

```typescript theme={null}
CLOSE_ACCOUNT_DISCRIMINATOR: Uint8Array<ArrayBuffer>
```

### `HEAP_FRAME_BYTES`

*Variable* · `sdk/dist/svm/engine.d.ts`

The 256 KiB BPF heap frame every execute transaction MUST request:
interpreter memory (operand stack, heap, frames) lives above the default
32 KiB Rust bump arena, not in accounts. Attach RequestHeapFrame(262144)
beside SetComputeUnitLimit on every execute/simulate transaction - **add-once**: duplicate ComputeBudget instruction types fail the whole
transaction. A transaction without it aborts deterministically (SBF
AccessViolation) before any opcode runs. Buffer staging transactions do
not need it - their instructions never touch interpreter memory.

```typescript theme={null}
HEAP_FRAME_BYTES = 262144
```

### `HEAP_FRAME_CU_PER_INVOCATION`

*Variable* · `sdk/dist/svm/engine.d.ts`

CU cost of the heap-frame request, charged per program invocation in the transaction.

```typescript theme={null}
HEAP_FRAME_CU_PER_INVOCATION = 56
```

### `REQUEST_HEAP_FRAME_WIRE_BYTES`

*Variable* · `sdk/dist/svm/engine.d.ts`

Wire cost of the RequestHeapFrame instruction: 8 bytes beside an existing
ComputeBudget instruction (the program key and count byte are already paid),
9 standalone. Measured - engine tests/cu\_budget.rs.

```typescript theme={null}
REQUEST_HEAP_FRAME_WIRE_BYTES = 9
```

### `MAX_RETURN_DATA`

*Variable* · `sdk/dist/svm/engine.d.ts`

```typescript theme={null}
MAX_RETURN_DATA = 1024
```

### `MAX_CPI_ACCOUNTS`

*Variable* · `sdk/dist/svm/engine.d.ts`

```typescript theme={null}
MAX_CPI_ACCOUNTS = 64
```

### `ENGINE_GAS_LIMIT_CU`

*Variable* · `sdk/dist/svm/engine.d.ts`

```typescript theme={null}
ENGINE_GAS_LIMIT_CU = 1400000
```

### `ENGINE_CHAIN_IDS`

*Variable* · `sdk/dist/svm/engine.d.ts`

Synthetic CHAIN\_ID values reported by the engine's CHAIN\_ID opcode. The
devnet id is what a default `cargo build-sbf` build reports - localnet and
LiteSVM runs use it too; mainnet requires building with `--features mainnet`.

```typescript theme={null}
ENGINE_CHAIN_IDS: {
    readonly mainnet: 1399811149n;
    readonly devnet: 1399811150n;
}
```
