Releases: ETCDEVTeam/sputnikvm
v0.10.0
Added
- Support for EIP140, EIP161, EIP170, EIP 196, EIP197, EIP198, EIP211 and EIP214.
- Support for Ethereum, Ellaism, Ubiq, Musicoin and Expanse networks.
- You can pass
UntrustedTransaction
toTransactionVM::new_untrusted
. In this case, the VM will throw an error instead of panic if the transaction is invalid.
Changed
DecreaseBalance
inAccountChange
is removed. This is a state change that never happens.- Initialized the hook structures. When using
ContextVM
, you can calladd_context_history_hook
for custom handlers to deal with context history.
Fixed
- Compiler warnings and missing documentations.
Published Crates
sputnikvm = "0.10.0"
sputnikvm-stateful = "0.10.0"
sputnikvm-precompiled-bn128 = "0.10.0"
sputnikvm-precompiled-modexp = "0.10.0"
sputnikvm-network-classic = "0.10.0"
sputnikvm-network-ellaism = "0.10.0"
sputnikvm-network-expanse = "0.10.0"
sputnikvm-network-foundation = "0.10.0"
sputnikvm-network-musicoin = "0.10.0"
sputnikvm-network-ubiq = "0.10.0"
v0.9.0
This version adds support of libsecp256k1, a pure Rust secp256k1 implementation. To use it, use the rust-secp256k1
feature to replace the default c-secp256k1
feature.
sputnikvm = { version = "0.9", default-features = false, features = ["std", "rust-secp256k1"] }
TransactionVM
's real_used_gas
function is renamed to used_gas
and is added to the VM
trait.
Published crates:
sputnikvm = "0.9.0"
sputnikvm-stateful = "v0.9.1"
v0.7.8
This revision adds no_std support for SputnikVM. To use it, insert the dependency as:
sputnikvm = { version = "0.7.8", default-features = false }
In this mode, it uses alloc
library for heap allocation, which is a nightly feature so it requires nightly Rust to build. The no_std
version of SputnikVM has all the functionalities of the std version except the four pre-compiled contracts. You will need to implement it yourself if pre-compiled contracts is something you need. The main patch name in no_std
is changed to MainnetEmbeddedPatch
.
For a more detailed tutorial on how to use the no_std
version of SputnikVM, have a look at the Classic in Orbit blog post SputnikVM, the Rux Microkernel and Embedded Devices, where it shows how to run SputnikVM on the Rux microkernel.
v0.7.5
v0.7.1
Published crates:
sputnikvm = "0.7.1"
sputnikvm-stateful = "v0.7.0"
Namespace Changes
The old sputnikvm::vm
namespace is now moved to top level sputnikvm
. If you are upgrading from a previous version, you will need to change your imports and uses accordingly. The top level re-exports are now removed. Please use the original crates etcommon-bigint
and etcommon-hexutil
for its functionality.
New Patch Design
Patch
is changed from a struct to a trait. So there is no need to pass around a patch object when invoking the VM. Instead, you can specify the patch directly in the VM type like this SeqTransactionVM<EIP160Patch>
.
Right now you can also define your own precompiled contracts. To do this, implement your own Precompiled
. Given a data
, it should determine the return value as well as the gas used. Then you can add this in a customized Patch::precompileds()
function. This function returns a static slice, where for each item, the first value is the address of the precompiled contract, the second value is the required code in the account, and the third value is the Precompiled
.
This interface also adds basic support for Adding Precompiled Contracts without Hard Forks.
Note that the precompiled contract interface might go through changes in release range 0.7
. So please pin the patch version if needed.
v0.6.1
What's new in this release:
- A new
sputnikvm-stateful
crate that helps you to deal withRequireError
by usingetcommon-trie
. - Ability to execute SYSTEM transaction, so now you can use SputnikVM for all Ethereum account state transitions.
Published crates:
sputnikvm = "^0.6.1"
sputnikvm-stateful = "^0.6.8"
v0.5.1
v0.5.0
v0.4.0
Changes in this release:
- Production-ready support for Frontier, Homestead and EIP150 block ranges. In Ethereum Classic, that is from block 1 to block 3000000.
- Experimental support for EIP160.
Run sputnikvm --help
for help message on how to use the CLI tool. Note that you need to use the current master branch of go-ethereum-classic if you wish to use the RPC feature.
The library can be used as usual:
[dependencies]
sputnikvm = "0.4"