核心执行引擎负责在 Fuel 网络中执行交易和区块。它提供了一个可升级的执行框架,可以根据区块头中指定的状态转换字节码版本在原生和 WASM 执行策略之间切换。这使得协议升级无需硬分叉即可无缝进行。
有关交易生命周期管理和池操作的信息,请参阅交易生命周期。有关区块生产编排的信息,请参阅区块生产。
该执行引擎围绕一个支持多种执行策略的可升级执行器设计构建。核心组件是Executor 结构体,它负责管理执行策略选择并与存储和中继器服务进行协调。
执行器支持两种主要执行策略,这两种策略通过比较区块的状态转换字节码版本与原生执行器版本来确定
来源:crates/services/upgradable-executor/src/executor.rs140-152 crates/services/upgradable-executor/src/executor.rs91-99
版本管理系统维护了箱体(crate)版本到状态转换字节码版本的映射,使执行器能够为任何区块选择合适的执行策略。
来源:crates/types/src/blockchain/header.rs332-333 crates/services/upgradable-executor/src/executor.rs202-246
当区块的状态转换版本与原生执行器版本匹配时,原生执行会直接使用 fuel-vm 解释器运行交易。这为当前版本的区块提供了最佳性能。
原生执行路径会创建一个ExecutionInstance,它直接与 fuel-vm 解释器交互以执行交易。
来源:crates/services/executor/src/executor.rs360-378 crates/services/upgradable-executor/src/executor.rs566-594
WASM 执行支持运行编译为 WebAssembly 的状态转换函数,从而允许执行与原生执行器具有不同状态转换版本的区块。
WASM 执行策略维护已编译模块的缓存,并使用 wasmtime 进行执行隔离和确定性结果。
来源:crates/services/upgradable-executor/src/executor.rs154-180 crates/services/upgradable-executor/src/executor.rs289-311
ExecutionInstance 作为核心执行协调器,负责管理交易处理、状态更新和结果生成。
来源:crates/services/executor/src/executor.rs360-378 crates/services/executor/src/executor.rs379-397
区块生产涉及迭代执行交易、累积状态变化,并通过铸币交易(mint transaction)来最终确定区块以收取费用。
来源:crates/services/executor/src/executor.rs379-397 crates/services/executor/src/executor.rs1006-1100
该执行引擎与一个分层存储系统集成,该系统支持历史视图、事务操作和原子提交。
来源:crates/services/upgradable-executor/src/executor.rs314-344 crates/storage/src/transactional.rs
ExecutionData 结构在整个区块处理过程中累积执行状态和结果。
来源:crates/services/executor/src/executor.rs300-333
执行引擎支持控制执行行为的各种配置选项
| 选项 | 类型 | 描述 |
|---|---|---|
forbid_fake_coins | bool | 当为 false 时,跳过签名和 UTXO 存在性检查 |
backtrace | bool | 已弃用的执行回溯字段 |
native_executor_version | Option<u32> | 原生执行器版本覆盖 |
allow_historical_execution | bool | 允许在历史区块上进行空运行 |
来源:crates/services/executor/src/executor.rs334-346 crates/services/upgradable-executor/src/config.rs
执行器会遵从环境变量来强制执行策略,这主要用于测试和开发场景。
来源:crates/services/upgradable-executor/src/executor.rs183-186 crates/services/upgradable-executor/src/executor.rs254-265
执行器定义了清晰的接口,用于与外部服务集成和管理交易流。
来源:crates/services/executor/src/ports.rs42-125 crates/fuel-core/src/service/adapters/executor.rs32-56
执行引擎通过适配器模式与更广泛的 fuel-core 服务架构集成
ExecutorAdapter:将执行器与服务层连接起来TransactionsSource:从交易池提供交易RelayerIterableKeyValueView:启用中继器事件访问NewTxWaiter:协调区块生产时机来源:crates/fuel-core/src/service/adapters/executor.rs1-143 crates/fuel-core/src/service/adapters/block_importer.rs119-126