1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2017年6月13日 |
---|
#67 在 #evm
每月 24次下载
87KB
2K SLoC
SputnikVM:区块链虚拟机
名称 | 描述 | Crates.io | 文档 |
---|---|---|---|
sputnikvm | Ethereum虚拟机的核心库 | ||
sputnikvm-stateful | SputnikVM的默克尔树状态包装器 |
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 |
预编译合约
核心库嵌入初始四个预编译合约。要使用拜占庭硬分叉引入的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:从创世区块到第4000万个区块,在以太坊经典主网上进行了完整的回归测试。一些之前失败的测试也被集成到Rust的测试系统中。有关如何重现回归测试的说明,请参阅wiki。
要了解有关从源码构建SputnikVM的更多信息,请阅读构建和测试页面。
许可
Apache 2.0
依赖项
~395KB