Skip to content

Releases: cartesi/machine-emulator

v0.20.0-test

25 Nov 13:16

Choose a tag to compare

v0.20.0-test Pre-release
Pre-release
fix: replay invalidate tlb slot

v0.19.0

27 May 18:44
v0.19.0
ce402f9

Choose a tag to compare

Added

  • Added libluacartesi.a and libluacartesi_jsonrpc.a static libraries when installing to allow packaging statically linked Lua programs
  • Added --remote-spawn command line option to spawn remote machines
  • Added --remote-health-check command line option to check availability of remote machines
  • Added --store-json-config command line option to store machine configs to JSON files
  • Added --load-json-config command line option to load machine configs from JSON files
  • Added --server-fd command line option to JSON-RPC remote machine
  • Added --setpgid command line option to JSON-RPC remote machine
  • Added cartesi.tobase64, cartesi.frombase64, cartesi.tojson, and cartesi.fromjson Lua functions
  • Added various new methods to JSON-RPC remote machine interface to allow more precise management of remote machine processes
  • Added timeout support to JSON-RPC remote machine requests
  • Added capability to retrieve PID of spawned remote machines
  • Added support for VirtIO devices in JSON configs
  • Added the --log-step command line option to log multiple machine cycles
  • Added the cm_log_step and cm_verify_step methods to log multiple machine cycles and verify with ZK VMs
  • Added the cm_receive_cmio_request method, the counterpart of cm_send_cmio_response method
  • Added timeout support for jsonrpc requests

Fixed

  • Fixed various linting errors with the latest Clang static analyzer
  • Fixed broken link when running make bundle-boost
  • Fixed many broken links in the README and markdown files
  • Fixed issues when using --network option in Alpine guests
  • Fixed issue when using --assert-rolling-template
  • Fixed --skip-root-hash-store not skipping root hash computation
  • Fixed kernel panic bug when feeding 100k stdin inputs into VirtIO console
  • Fixed bug when trying to advance multiple inputs through the cartesi-machine CLI
  • Fixed compile errors when targeting Windows, Alpine Linux, and WebAssembly
  • Fixed conflicting symbols between libcartesi and libcartesi_jsonrpc
  • Fixed --sync-init-date and --virtio-console command line options
  • Fixed various issues when forking jsonrpc machines inside a Go environment
  • Fixed potential data races in multi-threaded environments

Changed

  • Optimized RISC-V instruction decoder to use token threading, computed goto, and big jump tables
  • Optimized RISC-V instruction fetcher to cache latest accessed pages
  • Refactored the code to use C++20 standard, which is now a minimum requirement
  • Refactored the public C API to be simpler and easier to use with other programming languages
  • Refactored the Lua API to make remote and local use the same API interface
  • Refactored and simplified many portions of the code, improving maintainability of the project
  • Changed default GCC compiler flags to better optimize the RISC-V interpreter
  • Changed flash drive start address configuration to be non-mandatory (it will be automatically chosen)
  • Changed sibling hashes ordering in JSON logs to match the expected ordering in Lua test suite
  • Changed rebind method of remote machines to support binding on port 0 and return the bound address
  • Changed to Debian RISC-V toolchain when compiling microarchitecture
  • Changed --remote-fork command line option to accept an address
  • Changed add-generated-files.diff to be applied with patch -Np1 to make packaging easier
  • Changed default machine config to include bootargs
  • Changed machine configs and access logs to be represented as JSON strings in the C API
  • Renamed --log-uarch-step command line option to --log-step-uarch
  • Renamed --log-uarch-reset command line option to --log-reset-uarch
  • Renamed --auto-uarch-reset command line option to --auto-reset-uarch
  • Renamed various C API functions, structs, and enumerations
  • Renamed jsonrpc-remote-cartesi-machine to cartesi-jsonrpc-machine
  • Renamed merkle-tree-hash to cartesi-merkle-tree-hash
  • Removed cartesi- prefix and versioning suffix from CI artifacts names
  • Revamped project README with more up-to-date explanations and simplified instructions
  • Changed help and configs to be printed to stdout instead of stderr
  • Changed the public C API to require less manual memory management
  • Improved documentation in the public C API header
  • Improved CI to use more parallel jobs when testing
  • Improved send_cmio_response bounds checking
  • Split iflags CSR into multiple CSRs
  • Bumped MARCHID version to 19
  • Updated test rootfs to guest tools 0.17.1

Removed

  • Removed publishing of Debian package artifacts in favor of official Linux package repositories
  • Removed use of cartesi/toolchain image
  • Removed automatic strip of binaries when performing make install (stripping should now be done when packaging)
  • Removed no4lvl from bootargs (Sv57 address translation is now disabled at interpreter level to fix NodeJS JIT issues)
  • Removed rootfstype=ext2 from bootargs, allowing use of root filesystems in other formats, such as Ext4 and SquashFS
  • Removed all *-defines.h headers
  • Removed all specific read/write of machine registers from the public API
  • Removed various C API functions
  • Removed dkjson Lua library (not needed since we have our own JSON encoding functions now)
  • Removed GDB documentation from the repository (moved to the wiki)
  • Removed internal development documentation from the README (moved to the wiki)
  • Removed many dead code segments after the refactoring

v0.19.0-alpha4

02 May 16:04
v0.19.0-alpha4
d2d51ba

Choose a tag to compare

v0.19.0-alpha4 Pre-release
Pre-release

v0.19.0-alpha3

26 Mar 15:56
v0.19.0-alpha3
491b14b

Choose a tag to compare

v0.19.0-alpha3 Pre-release
Pre-release

v0.19.0-alpha2

26 Mar 10:23
v0.19.0-alpha2
8dfa54a

Choose a tag to compare

v0.19.0-alpha2 Pre-release
Pre-release

v0.18.1

12 Aug 21:55
v0.18.1

Choose a tag to compare

Changed

  • Updated tools rootfs to 0.16.1

v0.18.0

09 Aug 13:53
v0.18.0

Choose a tag to compare

Added

  • Makefile target create-generated-files-patch to generate add-generated-files.diff patch
  • CI now creates and uploads add-generated-files.diff as artifact on tagged releases
  • Added unversioned symlinks to shared libraries in src directory

Changed

  • Updated test rootfs to 0.16.0
  • Updated outputs merkle height (for output unification v2)
  • Updated makefile to make it compatible with a homebrew formulae
  • Changed listening port to close immediately in JSONRPC shutdown
  • Bundled nlohmann JSON into third party directory
  • Rewritten jsonrpc-remote-machine using Boost ASIO
  • Updated test data due to input contract prev_randao field
  • Bumped MARCHID version to 18
  • Changed compile to release mode with debug info by default
  • Changed layout of uarch json logs

Fixed

  • Fixed regression saving snapshots on first machine yield
  • Fixed TIME_WAIT connections accumulation on Linux
  • Fixed Homebrew build
  • Ensured make clean target works with no submodules
  • Fixed TLB reads while computing hash with uarch
  • Fixed rollback remote machine for rejected advance state via the cli
  • Fixed prefix when brew is present in the system
  • Fixed system error when loading or saving snapshots

v0.17.0

23 Apr 17:13
v0.17.0

Choose a tag to compare

Added

  • Added --no-rollback and --remote-fork options
  • Added rebind() API to JSONRPC
  • Added commit() API for discarding machine snapshots
  • Added send_cmio_response function
  • Added integration tests
  • Added C API to translate virtual address
  • Added optimizations for fdiv and fsqrt instructions for uarch
  • Added --env, --workdir, and --hostname command line options
  • Added new runtime option to skip storing machine root hash
  • Introduced the --user command line option
  • Used Sv39 address spacing by default to support nodejs and improve performance
  • Decoded uarch ECALL and EBREAK
  • Added support for VirtIO
  • Added VirtIO command line options
  • Added support for binding different host addresses in VirtIO net device
  • Added iunrep CSR for unreproducible machines, VirtIO configs to C/Lua APIs, VirtIO net device, VirtIO 9P device, VirtIO console device, and PLIC device
  • Made --volume create guest directory before mounting

Changed

  • Simplified solidity step generation
  • Split reasons for manual and auto yields
  • Reworked rollup and renamed it to cmio
  • Optimized out state accessor initialization in uarch interpret
  • Replaced uarch mmio with ecall
  • Included uarch-reset log in catalog.json
  • Combined uarch state accessors

Removed

  • Removed gRPC features
  • Removed unmaintained and broken benchmarks script

Fixed

  • Fixed ilog2 function which was always returning 0
  • Aligned output merkle tree depth with solidity
  • Corrected compile error with slirp=no on Linux
  • Allowed using --network in read-only filesystems
  • Resolved compile errors with WASI toolchain
  • Corrected reset_uarch documentation
  • Removed trailing comma in jsonrpc-discover.json
  • Fixed Homebrew libslirp options
  • Resolved build issue on macOS with macports lua-luarocks
  • Set yield_data typo
  • Fixed EADDRNOTAVAIL on rapid successive requests

Continuous Integration

  • Sped up uarch testing in CI.
  • Implemented vm.mmap_rnd_bits workaround for the ubuntu-22.04 runner.

v0.16.1

29 Mar 04:28
v0.16.1

Choose a tag to compare

Fixed

  • Fixed amd64 debian package build in release mode

Changed

  • Made uarch compilation independent of release/debug build settings

v0.16.0

09 Feb 16:01
v0.16.0

Choose a tag to compare

Added

  • Implemented the UARCH reset feature
  • Added soft yield runtime configuration using hints of the SRAIW instruction
  • Added shadow uarch state
  • Embedded the uarch RAM binary
  • Added instructions on how to build libcartesi.a in standalone
  • Supported compiling libcartesi_jsonrpc.a static library
  • Added file mapping and terminal support for Windows
  • Added the possibility to compile libcartesi without mmap()
  • Supported compiling libcartesi as a static library
  • Added memory range introspection
  • Introduced -it option for colored and bigger interactive terminal
  • Replaced MTD drives with PMEM drives
  • Initialized random entropy from the device tree
  • Added root hashes to catalog.json
  • Replaced proof with sibling_hashes

Changed

  • Built device tree automatically into the machine's ROM, eliminating the need for a ROM image
  • Enabled rollup by default
  • Updated libboost version to 1.81
  • Changed stored machine configs from protobuf to JSON
  • Removed remote-cartesi-machine-proxy
  • Moved uarch generated files to the uarch source directory
  • Organized all tests under the tests directory
  • Added emulator major and minor versions to the device tree
  • Used new rootfs provided by the tools repository
  • Used static libraries when compiling executables
  • Made it possible to compile libcartesi without threading support
  • Reimplemented a portable OS time function
  • Allowed compiling libcartesi without GRPC or Lua installed
  • Didn't expose internal symbols in the public C API
  • Added support for cross-compiling libcartesi
  • Removed std::filesystem use from libcartesi (unsupported by WASI)
  • Made termios non-mandatory in libcartesi (unsupported by WASI)
  • Improved makefile for packaging
  • Adjusted bootargs and renamed bootargs command line option
  • Introduced machine init and entrypoint config and options
  • Removed dump_pmas method
  • Removed Lua md5 dependency by using keccak instead
  • Simplified machine hash computation in tests
  • Replaced ROM with DTB
  • Bumped kernel and rootfs versions
  • Replaced crypto++ with tiny sha3 to compute Keccak hash
  • Replaced boost filesystem with std filesystem
  • Updated mongoose to 7.12 and refactored how it's bundled
  • Bundled nlohmann-json into third-party
  • Replaced libb64 with a custom base64 implementation
  • Removed the unused --json-steps option
  • Added support for compiling libcartesi to WebAssembly

Fixed

  • Made append options work when empty
  • Included missing climits in json-util.cpp
  • Correctly counted optional arguments
  • Fixed protoc compile errors on Ubuntu
  • Fixed the build on MacOS with Homebrew
  • Reserved memory for firmware M-mode code in FDT
  • Fixed lint errors and warnings