公司动态
如何快速看懂 Shardeum 核心架构:EVM v2 实现原理完全指南
如何快速看懂 Shardeum 核心架构EVM v2 实现原理完全指南【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeumShardeum 是一个基于 EVM 的自动扩缩容区块链EVM-based autoscaling blockchain其核心引擎是一套完整开源的EVM v2 虚拟机负责执行智能合约字节码、管理状态与 Gas 费用。本文面向新手用通俗的语言带你快速看懂 Shardeum 的 EVM v2 是如何分层设计的以及操作码、预编译合约、状态回滚等关键机制的工作原理。 Shardeum 是什么EVM 兼容的自动扩缩容区块链Shardeum 采用**动态状态分片Dynamic State Sharding**技术实现水平扩展随着网络流量增长分片自动增多从而在保持去中心化安全性的同时提升吞吐量、降低交易成本。对开发者来说它最重要的特性是EVM 兼容——现有以太坊 DApp 和 Solidity 合约可以无缝迁移。这种兼容性并非模拟出来的而是由项目内独立实现的 EVM v2 引擎保证的。️ EVM v2 架构总览三层协作设计理解 Shardeum 架构最关键的是把握它的三层执行体系┌─────────────────────────────────────────────┐ │ vm_v7 虚拟机组件层块构建、交易执行、Bloom 过滤 │ ├─────────────────────────────────────────────┤ │ evm_v2 执行引擎层EVM 类、解释器、操作码、 │ │ 预编译合约、EOF 容器 │ ├─────────────────────────────────────────────┤ │ state 状态管理层分片状态、事务状态、缓存 │ └─────────────────────────────────────────────┘层级目录职责虚拟机层src/vm_v7/运行整条链、区块、交易兼容 EthereumJS 接口执行引擎层src/evm_v2/逐条执行字节码处理操作码与 Gas 计费状态管理层src/state/读写账户状态、缓存与分片持久化各层入口文件执行引擎主类evm.ts字节码解释器interpreter.ts虚拟机入口vm.ts分片状态实现shardeumState.ts⚙️ 执行核心EVM 类与解释器 Interpreterevm.ts 中的EVM类是整个引擎的总指挥它的职责是完整执行一条 EVM 消息包括嵌套的 CALL 和 CREATE 调用处理结果并写回状态若发生异常则通过 Journal 机制丢弃所有变更这一点后面会讲。几个值得新手关注的细节硬分叉支持范围从 Chainstart 一直支持到 Cancun覆盖了以太坊主流分叉的语义EIP 白名单机制构造函数中维护了一份受支持的 EIP 列表如 2930 访问列表、1153 瞬态存储、4844 Blob 交易、6780 等配置了未列出的 EIP 会直接报错保证了行为的可预期性事件系统通过异步事件发射器对外广播执行事件方便外部模块如调试、追踪挂接。真正逐字节跑合约的是 interpreter.ts 中的Interpreter。它维护一份RunState运行状态可以把它想象成一台计算机的当前寄存器快照状态字段含义programCounter程序计数器指向当前要执行的字节码位置stack/returnStack操作栈与返回栈返回栈高度上限 1023遵循 EIP-2315memory可自动扩展的内存区gasLeft/gasRefund剩余 Gas 与可返还 GasvalidJumps合法跳转表用于快速校验 JUMP 目标支持 EOF 的 BEGINSUB解释器每一步都严格先扣费、后执行Gas 耗尽或遇到非法跳转立即抛异常这正是以太坊语义中交易确定性的来源。 操作码系统指令表、处理器与动态 Gas所有操作码定义集中在 codes.ts。每条操作码被定义为一个冻结的Opcode对象包含 6 个属性code操作码数值如0x01就是ADDfee固定 Gas 费用isAsync是否需要异步执行dynamicGas是否按输入动态计费如EXP、SSTORE。指令与处理逻辑分离是这套设计的一大亮点指令表codes.ts —— 从 Chainstart 基础表开始随每个硬分叉扩展新指令处理器functions.ts —— 每个操作码的具体执行函数动态 Gasgas.ts —— 处理SSTORE、CALL等复杂计费的动态 Gas 函数。三个专门文件体现了对以太坊退款与防攻击规则的精确认知EIP1283.ts状态转换退款EIP2200.ts净气体计量取代旧退款模型EIP2929.ts访问列表Access List带来的冷/热存储 Gas 区分。 十内置预编译合约把昂贵计算交给原生代码预编译合约Precompile是部署在固定地址上的系统级函数用原生代码替代字节码既快又标准。precompiles/index.ts 中按地址注册了 10 个地址文件功能启用条件0x0101-ecrecover.ts椭圆曲线签名恢复创世区块起0x0202-sha256.tsSHA-256 哈希创世区块起0x0303-ripemd160.tsRIPEMD-160 哈希创世区块起上海分叉后弃用0x0404-identity.ts数据原样复制创世区块起0x0505-modexp.ts模幂运算RSA 基础拜占庭起0x0606-ecadd.ts椭圆曲线点加拜占庭起0x0707-ecmul.ts椭圆曲线标量乘拜占庭起0x0808-ecpairing.ts椭圆曲线配对检查拜占庭起0x0909-blake2f.tsBLAKE2f 压缩函数灰冰川起0x0A0a-kzg-point-evaluation.tsKZG 承诺点评估Blob 交易核心坎昆起注册时同时记录了启用条件——按硬分叉或 EIP 判断该预编译是否可用。这个设计让 Shardeum 可以精确复现以太坊任意时期的行为是 EVM 兼容性的关键细节之一。 状态管理与回滚Journal 与 Transient Storage合约执行中会不断读写账户余额、存储槽等状态。Shardeum 用两个机制保证正确性1. Journal 回滚日志—— journal.tsJournal 像撤销栈每次修改状态前先记一笔。如果本次调用最终抛异常子调用失败不能污染父调用Journal 会按记录逐笔回滚实现以太坊的异常即原子回滚语义。2. 瞬态存储EIP-1153—— transientStorage.tsTSTORE/TLOAD使用一层只在交易内可见的临时存储交易结束即清空。它常用于 Oracle 去中心化校验等防重放场景。在更高层shardeumState.ts 与 transactionState.ts 把分片内的状态读写抽象成统一的 StateManager 接口EVM 不直接碰存储只面向接口编程——这正是分片化架构能平滑扩展的原因。 EOF智能合约的新容器格式eof.ts 实现了 **EOFEthereum Object Format**支持包括 EIP-3540基本容器格式、EIP-3541子例程调用与 EIP-3670部署限制。通俗理解传统字节码靠操作码隐式表达程序结构而 EOF 把函数边界、数据段用显式头部描述出来——就像从裸汇编升级到带文件头的可执行文件。解释器中的validJumps跳转表和containerCode容器代码字段就是为 EOF 而生的。EOF 让合约更小巧、更安全杜绝非法跳转漏洞是 EVM 演进的明确方向。 本地调试 EVM v2一条可视化排错路线要深入观察 EVM v2 的每一步执行项目提供了验证节点调试脚本 setup_shardeum_debug.sh。整个流程只需两步第一步运行调试脚本并指定目标节点第二步按 README 指引把 launch.json 的调试配置端口 9229 远程附着加入 VS Code即可对交易执行逐行断点调试配合evm:evm、evm:gas、evm:precompiles三个内置 debug 日志通道见 evm.ts 顶部的日志器你可以精确观察 Gas 扣减与预编译调用过程。 总结EVM v2 的设计精髓分层解耦vm_v7块/交易→evm_v2字节码执行→state状态存储每层面向接口编程天然适配分片扩展精确兼容硬分叉白名单 EIP 列表 预编译启用条件检查逐项对齐以太坊语义可回滚的执行Journal 机制保证异常即原子回滚Transient Storage 提供交易级临时存储面向未来内置 EOF 容器与坎昆 EIP 支持紧跟以太坊主网演进路线。顺着 vm_v7/vm.ts → evm_v2/evm.ts → interpreter.ts 这条主线读源码你就掌握了 Shardeum 执行引擎的完整脉络。【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeum创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考