Skip to content

Releases: ETCDEVTeam/sputnikvm

v0.10.0

Choose a tag to compare

@sorpaas sorpaas released this 13 Feb 19:36
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 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

Choose a tag to compare

@sorpaas sorpaas released this 24 Nov 12:57
v0.9.0
328033b

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

Choose a tag to compare

@sorpaas sorpaas released this 20 Oct 06:50
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

Choose a tag to compare

@sorpaas sorpaas released this 25 Sep 10:16

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

Choose a tag to compare

@sorpaas sorpaas released this 14 Sep 15:37

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

Choose a tag to compare

@sorpaas sorpaas released this 07 Sep 07:44

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

Choose a tag to compare

@sorpaas sorpaas released this 04 Aug 04:14

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

Choose a tag to compare

@sorpaas sorpaas released this 15 Jul 03:27

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

Choose a tag to compare

@sorpaas sorpaas released this 12 Jul 12:56

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

Choose a tag to compare

@sorpaas sorpaas released this 12 Jul 05:46

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