# 为什么 EVM 做不到「活电路」· Why EVM can't have a living circuit

> 一页说明 · 非营销。诚实标注边界。
> One page. Not marketing. Honest about the boundaries.

## 一句话

FTO 的「活电路」是一台**随区块自走的链上时序机**：每出一个区块，它被花费、被重建、带着状态继续走一步。EVM 上的「电路」是**被动的 `view` 调用**——没人调用它就不动，而且不留状态。

FTO's living circuit is a **chain-driven state machine**: every block spends it, rebuilds it, and carries its state one step forward. An EVM "circuit" is a **passive `view` call** — it does nothing until someone calls it, and it keeps no state.

## 三个结构性差异 · Three structural differences

1. **谁在走 · who advances it**
   - FTO：**区块是时钟**。covenant 的对象在每个区块被（keeper 或任何人）花费一次，状态写进输出的承诺里。步进是**链上对象自己的生命周期**。
   - EVM：`step()` 是一次交易里的函数调用。交易结束，执行上下文消失；要让状态「继续」，必须有人**再发一笔交易**、再付一次 gas。没有「自动」。

2. **可信从哪来 · where trust comes from**
   - FTO：**没有 VM**。转移关系是一张**冻结的转移集**（Merkle 根），由矿工在 tapscript 里强制：非法的下一步**无法上链**。状态是 4 位、承诺在 caboose 里，逐字节可证。
   - EVM：可信来自**重放整条链 + 重新执行**（full node / light client 的假设）。合约可升级、逻辑可变，「当时的计算」不留在链上。

3. **能不能复算 · can a third party recompute it**
   - FTO：规范 + 金标向量 + 一个纯模块（`fto/src/live.js`）即可独立复算：状态→下一步、状态根→live 根，全部是公开 (状态, 高度) 序列的确定性函数。
   - EVM：复算需要 EVM 实现 + 完整状态；「为什么这个结果对」依赖你对执行环境的信任。

## 具体到 D2 这台机器

- **机器**：4 位 LFSR（最大长度多项式 x⁴+x³+1），感官输入 = 区块高度低字节（由上一步 caboose 承诺，逐字节可证）。
- **链上**：`f3/src/bind_live.js` 的 covenant——转移集 16×256=4096 条，叶子只存一个 Merkle 根；非法转移被矿工拒绝。
- **承诺**：每步把 4 位状态写进 caboose（**矿工强制**）；`stateRoot` / `liveRoot` 是**派生承诺**——公开序列的哈希链，`/live` 页与 `f3/tools/live_verify.mjs` 都能复算。
- **演示**：`/live`（`fto/canvas/live.html`）实时显示状态、步数、根，并在浏览器里**独立复算**当步的 stateRoot 与线上比对。

## 诚实边界 · Honest boundaries

- FTO 的资产层是**索引器真相**（不是共识），完整 BitVM 未实现。
- 实测为**测试网、未经第三方审计**；主网写入**默认 fail-closed**。
- **步频是成本选择**：链上 covenant 不强制「每块一步」，这是 keeper 的约定（测试网按每块跑）。
- Fractal tapscript **无法读区块头**；感官输入是「承诺 + 公开可复算」，不是矿工强制读头。
- 当前 **sats-only、无协议代币**；不承诺收益/价格/本金，非投资建议。
