> ## 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.

# evm/engine: V12Pot and V12Kitchen

> V12Pot and V12Kitchen: 4 exports of the evm/engine module of @eco-incorp/sauce, including v12PotAbi, v12KitchenAbi, v12Pot, v12Kitchen.

Helpers for the EVM engine contracts: viem ABIs and ready-to-use handles with calldata encoders. `cook` is owner-only and names the engine per call.

```typescript theme={null}
import { v12Pot, v12Kitchen } from "@eco-incorp/sauce/evm/engine";
```

This page covers `sdk/dist/evm/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>

### `v12PotAbi`

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

V12Pot - `cook()` is onlyOwner.

**The engine is named per cook.** A Pot holds no engine: `cook(address engine, bytes program)`
takes the interpreter as an argument, and `inFlightEngine()` reports the engine of the cook
currently executing - it is `address(0)` outside one. The SVM kitchen takes an `engine_program`
account per call for the same reason: which interpreter runs is the caller's choice at call time.

A cook runs exactly ONE program.

```typescript theme={null}
v12PotAbi: readonly [
    {
        readonly name: "cook";
        readonly type: "function";
        readonly stateMutability: "payable";
        readonly inputs: readonly [
            {
                readonly type: "address";
                readonly name: "engine";
            },
            {
                readonly type: "bytes";
                readonly name: "program";
            }
        ];
        readonly outputs: readonly [
            {
                readonly type: "bytes";
            }
        ];
    },
    {
        readonly name: "inFlightEngine";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
            }
        ];
    },
    {
        readonly name: "owner";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
            }
        ];
    },
    {
        readonly name: "kitchen";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
            }
        ];
    },
    {
        readonly name: "router";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
            }
        ];
    }
]
```

### `v12KitchenAbi`

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

V12Kitchen - CREATE2 Pot factory. `deployPot` bakes `owner` into the Pot's CREATE2 address.

```typescript theme={null}
v12KitchenAbi: readonly [
    {
        readonly name: "deployPot";
        readonly type: "function";
        readonly stateMutability: "nonpayable";
        readonly inputs: readonly [
            {
                readonly type: "address";
                readonly name: "owner";
            },
            {
                readonly type: "bytes32";
                readonly name: "salt";
            }
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
                readonly name: "pot";
            }
        ];
    },
    {
        readonly name: "predictPot";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
            {
                readonly type: "address";
                readonly name: "owner";
            },
            {
                readonly type: "bytes32";
                readonly name: "salt";
            }
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
            }
        ];
    },
    {
        readonly name: "executionFee";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
        ];
        readonly outputs: readonly [
            {
                readonly type: "uint256";
            }
        ];
    },
    {
        readonly name: "router";
        readonly type: "function";
        readonly stateMutability: "view";
        readonly inputs: readonly [
        ];
        readonly outputs: readonly [
            {
                readonly type: "address";
            }
        ];
    }
]
```

### `v12Pot`

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

Ready-to-use V12Pot handle: the viem ABI plus calldata encoders for route/batch legs.

```typescript theme={null}
v12Pot: {
    readonly abi: readonly [
        {
            readonly name: "cook";
            readonly type: "function";
            readonly stateMutability: "payable";
            readonly inputs: readonly [
                {
                    readonly type: "address";
                    readonly name: "engine";
                },
                {
                    readonly type: "bytes";
                    readonly name: "program";
                }
            ];
            readonly outputs: readonly [
                {
                    readonly type: "bytes";
                }
            ];
        },
        {
            readonly name: "inFlightEngine";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                }
            ];
        },
        {
            readonly name: "owner";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                }
            ];
        },
        {
            readonly name: "kitchen";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                }
            ];
        },
        {
            readonly name: "router";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                }
            ];
        }
    ];
    readonly encodeCook: (engine: Address, program: Hex) => Hex;
}
```

### `v12Kitchen`

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

Ready-to-use V12Kitchen handle: the viem ABI plus calldata encoders.

```typescript theme={null}
v12Kitchen: {
    readonly abi: readonly [
        {
            readonly name: "deployPot";
            readonly type: "function";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [
                {
                    readonly type: "address";
                    readonly name: "owner";
                },
                {
                    readonly type: "bytes32";
                    readonly name: "salt";
                }
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                    readonly name: "pot";
                }
            ];
        },
        {
            readonly name: "predictPot";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
                {
                    readonly type: "address";
                    readonly name: "owner";
                },
                {
                    readonly type: "bytes32";
                    readonly name: "salt";
                }
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                }
            ];
        },
        {
            readonly name: "executionFee";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
            ];
            readonly outputs: readonly [
                {
                    readonly type: "uint256";
                }
            ];
        },
        {
            readonly name: "router";
            readonly type: "function";
            readonly stateMutability: "view";
            readonly inputs: readonly [
            ];
            readonly outputs: readonly [
                {
                    readonly type: "address";
                }
            ];
        }
    ];
    readonly encodeDeployPot: (owner: Address, salt: Hex) => Hex;
    readonly encodePredictPot: (owner: Address, salt: Hex) => Hex;
}
```
