Skip to content

Releases: ETCDEVTeam/sputnikvm

v0.10.0

13 Feb 19:36
v0.10.0
Compare
Choose a tag to compare

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 to TransactionVM::new_untrusted. In this case, the VM will throw an error instead of panic if the transaction is invalid.

Changed

  • DecreaseBalance in AccountChange is removed. This is a state change that never happens.
  • Initialized the hook structures. When using ContextVM, you can call add_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

24 Nov 12:57
v0.9.0
328033b
Compare
Choose a tag to compare

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

20 Oct 06:50
v0.7.8
Compare
Choose a tag to compare

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

25 Sep 10:16
Compare
Choose a tag to compare

Published crates:

sputnikvm = "0.7.5"
sputnikvm-stateful = "v0.7.4"
  • A small patch release that updates etcommon-block dependency to v0.3.

v0.7.1

14 Sep 15:37
Compare
Choose a tag to compare

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

07 Sep 07:44
Compare
Choose a tag to compare

What's new in this release:

  • A new sputnikvm-stateful crate that helps you to deal with RequireError by using etcommon-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

04 Aug 04:14
Compare
Choose a tag to compare

This is a small patch release:

  • The CLI tool is removed. We figured out that it would be more useful to expose a full JSON RPC interface for general users. Please look forward to etestrpc.
  • Version upgrade for etcommon dependencies.

You can use SputnikVM as a crate:

[dependencies]
sputnikvm = "0.5"

v0.5.0

15 Jul 03:27
Compare
Choose a tag to compare

Changes in this release:

  • Production-ready support for the Ethereum Classic blockchain (#122).

You can either use SputnikVM by its CLI tool or as a Cargo crate:

[dependencies]
sputnikvm = "0.5"

v0.4.0

12 Jul 12:56
Compare
Choose a tag to compare

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"

v0.3.1

12 Jul 05:46
Compare
Choose a tag to compare

Minor fixes for the SputnikVM Cargo crates. See the changelog of v0.3.0 for what has been changed recently.