3 个不稳定版本
使用旧的 Rust 2015
0.11.0-beta.0 | 2018 年 11 月 13 日 |
---|---|
0.10.1 | 2018 年 9 月 19 日 |
0.10.0 | 2018 年 2 月 12 日 |
#4 in #sputnik-vm
188 每月下载次数
用于 5 crates
225KB
4.5K SLoC
SputnikVM:一个区块链虚拟机
名称 | 描述 | Crates.io | 文档 |
---|---|---|---|
sputnikvm | Ethereum 虚拟机的核心库 | ||
sputnikvm-stateful | SputnikVM 的 Merkle Trie 状态包装器 |
SputnikVM 是一个 Ethereum 虚拟机的实现。它的目标是成为一个高效、可插拔的虚拟机,用于不同的基于 Ethereum 的区块链。
我们鼓励所有类似 Ethereum 的区块链采用 SputnikVM,并利用 SputnikVM 的 RFC 治理项目,该项目治理每个区块链 VM 的参数。这样我们可以从社区的经验中学习,并从其他提出的 RFC 中汲取教训。
特性
- 独立 - 可以作为一个独立进程启动,也可以集成到其他应用程序中
- 通用 - 支持不同的 Ethereum 链,如 ETC、ETH 或私有链
- 无状态 - 仅一个连接到独立状态存储的执行环境
- 快速 - 主要关注性能
- 适用于物联网 - 设计用于支持嵌入式设备中使用的硬件
- FFI、Protobuf 和 JSON 接口
- 用 Rust 编写,可以作为二进制文件、cargo crate 或共享库使用
支持的网络
网络 | Crates.io | 文档 |
---|---|---|
Ethereum Classic | ||
Ethereum | ||
Ellaism | ||
Ubiq | ||
Expanse | ||
Musicoin |
预编译合约
核心库嵌入初始四个预编译合约。要使用 Byzantium 硬分叉引入的 bn128 和 modexp 预编译合约,请拉取以下 crate。
名称 | 描述 | Crates.io | 文档 |
---|---|---|---|
sputnikvm-precompiled-bn128 | bn128 预编译合约 | ||
sputnikvm-precompiled-modexp | modexp 预编译合约 |
相关项目
- SputnikVM Dev - 用于智能合约开发的 SputnikVM 实例,提供测试环境和 JSON RPC API 模拟
- SputnikVM in Browser - SputnikVM 的实验性版本,编译为 WebAssembly,因此可以在 Node.js 浏览器中启动
- SputnikVM for embedded devices - 一个实验性项目,旨在在嵌入式设备上运行完整的 EVM
依赖项
请确保您至少有 rustc 1.26.2 (594fb253c 2018-06-01)
。Rust 1.25.0 及之前版本不受支持。
文档
从源码构建
SputnikVM 是用 Rust 编写的。如果您不熟悉 Rust,请参阅入门指南。
构建
要开始使用 SputnikVM,您需要安装 rustup,然后可以执行以下操作
$ git clone [email protected]:ETCDEVTeam/sputnikvm.git
$ cd sputnikvm
$ cargo build --release --all
测试
我们目前使用两种方式来测试 SputnikVM 并确保其执行与其他以太坊虚拟机实现相一致
- jsontests:这使用了以太坊 测试 的一部分。这些测试目前对系统操作码的覆盖性不好。此外,一些测试是错误的,因此它们被禁用了。
- regtests:在以太坊经典主网上从创世块到第 400 万个区块进行了完整的回归测试。一些之前失败的测试也被集成到 Rust 的测试系统中。有关如何重现回归测试的信息,请参阅wiki。
有关从源码构建 SputnikVM 的更多信息,请阅读构建和测试wiki 页面
许可证
Apache 2.0
依赖项
~5.5MB
~38K SLoC