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

# EVM 计算模型

> 串联区块上下文、状态、事件、合约调用和派生结果。

EVM 原生计算从链与区块上下文出发，消费状态或事件数据并生成派生结果。BlockX 通过 Call Builder、运行时读取和 Writer Plugin，将这些数据语义连接到函数执行。

## 链与区块上下文

| 上下文 | 在哪里提供 | 选择什么 |
| - | - | - |
| 触发区块 | `BlockTableCallConfig` | 一个区块的源数据行 |
| 函数读取上下文 | 函数参数，再传入 `EVM(chain_id, block_id)` 或表读取 | 该操作查询的链状态或表状态 |
| 输出区块 | `BlockTableWriteHandler` | 写入所关联的目标区块 |
| 历史分区 | `BlockBundleCallConfig` | 一个 bundle 的源数据行 |

根据计算目的对齐这些上下文。一个 bundle 包含多个高度；如果每行都需要读取历史状态，应从源数据中确定读取上下文。bundle 编号不能用作区块标识。

## 状态、事件与依赖

| 数据 | 在计算中的作用 |
| - | - |
| 状态 | 某个实体在指定区块的值，例如账户余额或合约存储 |
| 事件 | 已发生事项的记录，用作派生计算输入 |
| 触发行 | Call Builder 展开为函数参数的数据行 |
| 依赖读取 | 函数处理输入时额外查询的状态或表数据 |

BlockDB 提供表数据，EVM 节点能力提供账户状态和合约查询。为函数中的每个问题选择对应的数据来源。

## 函数调用与合约调用

| 术语 | 含义 |
| - | - |
| BlockX Call | 一次 Python 用户函数调用 |
| EVM 合约调用 | 函数内部通过节点访问执行的合约查询 |
| 子函数调用 | 对另一个已注册 BlockX 函数的调用 |

一个 BlockX Call 可以读取状态并发起多次合约调用。Python Executor 运行用户函数；节点能力执行 EVM 查询，再通过 Worker IO 路径返回结果。

## 沿数据流理解计算

```mermaid theme={null}
flowchart LR
    block["链与区块上下文"] --> input["状态与事件输入"]
    input --> fn["BlockX 函数计算"]
    reads["状态读取与合约调用"] --> fn
    fn --> output["派生记录或返回值"]
    output --> ready["确认完成后消费"]
```

* 新区块处理选择一个触发区块及其输出上下文。
* 历史回填选择源 bundle 和对应输出分区。
* 调用方控制提交及后续就绪检查。

## 小结

* 在输入、读取和输出中传递预期的链与区块上下文。
* 区分 BlockX Call 与 EVM 合约调用。
* 分别确认存储完成与函数执行完成。

继续阅读：

* [编写 EVM 数据函数](/zh/guides/write-functions)
* [按区块计算](/zh/guides/block-computation)
* [回填历史 bundle](/zh/guides/bundle-backfill)
* [执行语义与结果](/zh/concepts/execution-semantics)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.