neo-devpack-solidity 0.22.0

Production-focused Solidity-to-NeoVM compilation system
Documentation
---
title: "Native Contracts: Method Token Optimization (CALLT)"
description: "Method Token Optimization (CALLT) from Native Contracts."
---

# Method Token Optimization (CALLT)

[Back to Native Contracts](/internals/native-contracts)

By default, native contract calls are emitted as `System.Contract.Call` syscalls with the target contract hash and method name pushed onto the stack. The `--callt` compiler flag enables an optimization that replaces these with `CALLT` instructions referencing a method token table embedded in the NEF binary.

```bash
neo-solc contract.sol --callt -O3 -o build/contract
```

## How It Works

Without `--callt`:

```
PUSHDATA1 <20-byte contract hash>
PUSHDATA1 <method name string>
PUSHINT8 <call flags>
SYSCALL System.Contract.Call
```

With `--callt`:

```
CALLT <2-byte token index>
```

The NEF header contains a method token table that maps each token index to a `(contractHash, method, parametersCount, hasReturnValue, callFlags)` tuple. The Neo VM resolves the token at load time.

## Benefits

- Smaller bytecode — eliminates inline contract hash and method name strings per call site
- Lower GAS cost — fewer opcodes executed per native call
- Explicit manifest permissions — each method token generates a precise permission entry

::: info
CALLT is a pure optimization. It does not change contract behavior. Contracts compiled with and without `--callt` are functionally identical. Use `--callt` in production builds for best efficiency.
:::

---