1 个不稳定版本
0.11.0 | 2019年7月1日 |
---|
#4 在 #bn128
每月 32 次下载
在 7 个 (6 个直接) 仓库中使用
245KB
5.5K SLoC
SputnikVM:Rust Ethereum 虚拟机实现
名称 | 描述 | Crates.io | 文档 |
---|---|---|---|
evm | Ethereum 虚拟机的核心库 | ||
evm-stateful | SputnikVM 的 Merkle Trie 状态封装 |
功能
- 独立 - 可以作为独立进程启动或集成到其他应用程序中
- 通用 - 支持不同的 Ethereum 链,例如 ETC、ETH 或私有链
- 无状态 - 仅一个连接到独立状态存储的执行环境
- 快速 - 主要关注性能
- 物联网兼容 - 设计用于支持嵌入式设备中使用的硬件
- 用 Rust 编写,可以作为二进制文件、cargo 仓库或共享库使用
支持的链
- 基金会 (evm-network-foundation)
- 经典 (evm-network-classic)
- Ellaism (evm-network-ellaism)
- Expanse (evm-network-expanse)
- Musicoin (evm-network-musicoin)
- Ubiq (evm-network-ubiq)
- 以上所有链和其他链 (evm-network-dynamic)
支持的链
网络 | Crates.io | 文档 |
---|---|---|
任何网络 | ||
Ethereum Classic | ||
Ethereum | ||
Ellaism | ||
Ubiq | ||
Expanse | ||
Musicoin |
预编译合约
核心库已嵌入初始四个预编译合约。要使用拜占庭分叉引入的 bn128 和 modexp 预编译合约,请拉取以下仓库。
名称 | 描述 | Crates.io | 文档 |
---|---|---|---|
evm-precompiled-bn128 | bn128 预编译合约 | ||
evm-precompiled-modexp | 预编译的 modexp 合同 |
相关项目
- ethereum-rs - Ethereum 的通用特性和结构。
- etclient - 使用 Rust 编写的最小化 Ethereum 客户端。
- SputnikVM FFI - SputnikVM C 和 Go FFI 绑定
- SputnikVM Dev - 用于智能合约开发的 SputnikVM 实例,提供测试环境和 JSON RPC API 模拟
- SputnikVM in Browser - SputnikVM 编译成 WebAssembly 的实验版本,因此可以在 Node.js 浏览器中启动
- SputnikVM for embedded devices - 在嵌入式设备上运行完整功能 EVM 的实验项目
依赖关系
请确保您至少有 rustc 1.33.0 (2aa4c46cf 2019-02-28)
。Rust 1.32.0 及之前版本不受支持。
文档
从源代码构建
SputnikVM 使用 Rust 编写。如果您不熟悉 Rust,请参阅入门指南。
构建
要开始使用 SputnikVM,您需要安装 rustup,然后可以执行以下操作:
$ git clone [email protected]:ethereumproject/evm-rs.git
$ cd evm-rs
$ cargo build --release --all
测试
我们目前使用两种方式来测试 SputnikVM 并确保其执行与其他 Ethereum 虚拟机实现一致
- jsontests:这使用了部分 Ethereum 测试。这些测试目前对系统操作 opcodes 的覆盖范围不好。此外,一些测试是错误的,因此已被禁用。
- regtests:在以太坊经典主网上从创世块到第 400 万个区块进行了完整的回归测试。一些之前失败的测试也已集成到 Rust 的测试系统中。
要运行所有测试,请在克隆的仓库中执行以下命令
$ cargo test --all
贡献
格式化策略在 GUIDE.md 中描述,推荐的自定义格式化技术可在 FORMATTING.md 中找到
许可
Apache 2.0
依赖关系
~5.5MB
~40K SLoC