Releases: cartesi/machine-emulator
Releases · cartesi/machine-emulator
v0.20.0-test
fix: replay invalidate tlb slot
v0.19.0
Added
- Added
libluacartesi.aandlibluacartesi_jsonrpc.astatic libraries when installing to allow packaging statically linked Lua programs - Added
--remote-spawncommand line option to spawn remote machines - Added
--remote-health-checkcommand line option to check availability of remote machines - Added
--store-json-configcommand line option to store machine configs to JSON files - Added
--load-json-configcommand line option to load machine configs from JSON files - Added
--server-fdcommand line option to JSON-RPC remote machine - Added
--setpgidcommand line option to JSON-RPC remote machine - Added
cartesi.tobase64,cartesi.frombase64,cartesi.tojson, andcartesi.fromjsonLua 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-stepcommand line option to log multiple machine cycles - Added the
cm_log_stepandcm_verify_stepmethods to log multiple machine cycles and verify with ZK VMs - Added the
cm_receive_cmio_requestmethod, the counterpart ofcm_send_cmio_responsemethod - 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
--networkoption in Alpine guests - Fixed issue when using
--assert-rolling-template - Fixed
--skip-root-hash-storenot 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-machineCLI - 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-forkcommand line option to accept an address - Changed
add-generated-files.diffto be applied withpatch -Np1to 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-stepcommand line option to--log-step-uarch - Renamed
--log-uarch-resetcommand line option to--log-reset-uarch - Renamed
--auto-uarch-resetcommand line option to--auto-reset-uarch - Renamed various C API functions, structs, and enumerations
- Renamed
jsonrpc-remote-cartesi-machinetocartesi-jsonrpc-machine - Renamed
merkle-tree-hashtocartesi-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
stdoutinstead ofstderr - 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_responsebounds checking - Split
iflagsCSR 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/toolchainimage - Removed automatic strip of binaries when performing
make install(stripping should now be done when packaging) - Removed
no4lvlfrom bootargs (Sv57 address translation is now disabled at interpreter level to fix NodeJS JIT issues) - Removed
rootfstype=ext2from bootargs, allowing use of root filesystems in other formats, such as Ext4 and SquashFS - Removed all
*-defines.hheaders - Removed all specific read/write of machine registers from the public API
- Removed various C API functions
- Removed
dkjsonLua 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
v0.19.0-alpha3
v0.19.0-alpha2
v0.18.1
Changed
- Updated tools rootfs to 0.16.1
v0.18.0
Added
- Makefile target
create-generated-files-patchto generateadd-generated-files.diffpatch - CI now creates and uploads
add-generated-files.diffas 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
Added
- Added
--no-rollbackand--remote-forkoptions - Added
rebind()API to JSONRPC - Added
commit()API for discarding machine snapshots - Added
send_cmio_responsefunction - Added integration tests
- Added C API to translate virtual address
- Added optimizations for
fdivandfsqrtinstructions for uarch - Added
--env,--workdir, and--hostnamecommand line options - Added new runtime option to skip storing machine root hash
- Introduced the
--usercommand 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
--volumecreate 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=noon Linux - Allowed using
--networkin read-only filesystems - Resolved compile errors with WASI toolchain
- Corrected
reset_uarchdocumentation - Removed trailing comma in
jsonrpc-discover.json - Fixed Homebrew libslirp options
- Resolved build issue on macOS with macports lua-luarocks
- Set
yield_datatypo - Fixed
EADDRNOTAVAILon 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
Fixed
- Fixed amd64 debian package build in release mode
Changed
- Made uarch compilation independent of release/debug build settings
v0.16.0
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.ain standalone - Supported compiling
libcartesi_jsonrpc.astatic library - Added file mapping and terminal support for Windows
- Added the possibility to compile
libcartesiwithoutmmap() - Supported compiling
libcartesias a static library - Added memory range introspection
- Introduced
-itoption 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
libcartesiwithout threading support - Reimplemented a portable OS time function
- Allowed compiling
libcartesiwithout GRPC or Lua installed - Didn't expose internal symbols in the public C API
- Added support for cross-compiling libcartesi
- Removed
std::filesystemuse fromlibcartesi(unsupported by WASI) - Made
termiosnon-mandatory inlibcartesi(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
md5dependency 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-stepsoption - Added support for compiling libcartesi to WebAssembly
Fixed
- Made append options work when empty
- Included missing
climitsinjson-util.cpp - Correctly counted optional arguments
- Fixed
protoccompile errors on Ubuntu - Fixed the build on MacOS with Homebrew
- Reserved memory for firmware M-mode code in FDT
- Fixed lint errors and warnings