4 个版本
0.11.0 | 2019 年 5 月 7 日 |
---|---|
0.11.0-beta.3 | 2019 年 4 月 29 日 |
0.11.0-beta.2 | 2019 年 4 月 28 日 |
0.11.0-beta.0 | 2019 年 1 月 22 日 |
在 #modexp 中排名第 4
每月下载量 51
用于 7 个包(6 个直接使用)
10KB
155 行
SputnikVM: Rust Ethereum 虚拟机实现
名称 | 描述 | Crates.io | 文档 |
---|---|---|---|
evm | 以太坊虚拟机的核心库 | ||
evm-stateful | SputnikVM 的 Merkle Trie 状态包装器 |
功能
- 独立 - 可以作为独立进程启动,或集成到其他应用中
- 通用 - 支持不同的以太坊链,如 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 | 文档 |
---|---|---|
任何网络 | ||
以太坊经典 | ||
以太坊 | ||
Ellaism | ||
Ubiq | ||
Expanse | ||
Musicoin |
预编译合约
核心库内嵌了初始的四个预编译合约。要使用拜占庭硬分叉引入的bn128和modexp预编译合约,请拉取以下crate。
名称 | 描述 | 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 测试的一部分。那些测试目前对系统操作码的覆盖不好。此外,一些测试是错误的,因此已被禁用。
- regtests:在以太坊经典主网上从创世区块到第4百万个区块进行了完整的回归测试。一些之前失败的测试也被整合到Rust的测试系统中。
要在克隆的存储库中运行所有测试,请执行以下命令
$ cargo test --all
贡献
格式化策略在GUIDE.md中描述,推荐的自定义格式化技术可以在FORMATTING.md中找到
许可证
Apache 2.0
依赖项
~3.5MB
~50K SLoC