All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.15.2 - 2023-08-21
- Made emulator patch version not impact machine root hash
- Enabled line buffering for machine stdout in non-interactive mode
- Changed stored machine configs from protobuf to JSON
- Build device tree automatically into machine's ROM, eliminating the need for a ROM image
0.15.1 - 2023-08-17
- Fixed the list of files on the strip and patch installation step
0.15.0 - 2023-08-16
- Fixed compile errors with GCC 13.1
- Fixed Lua path being mixed with different Lua version path
- Fixed bug in get_proto_access_log()
- Fixed lint warnings with CLANG 15
- Introduced a workaround for high memory usage when running on QEMU ARM64
- Added deb to release process
- Fixed SIGTTOU handling on jsonrpc remote cartesi machine
- Improved signal handling on remote cartesi machines
- Added fork support on the jsonrpc remote cartesi machine
- Added log level control on the jsonrpc remote cartesi machine
- Added static analysis for Lua code
- Added code formatter for Lua code
- Added support for to-be-closed variables for machine Lua API
- Added --version and --version-json command-line options in cartesi-machine
- Added --skip-root-hash-check command line option to speed up machine loading in tests
- Added --skip-version-check command line option to allow testing old machine snapshots
- Added --htif-no-console-putchar command line option
- Added support for ARM64 docker images with depot.dev
- Added support for publishing docker images on ghcr.io
- Added tlb_get_entry_hot/cold_rel_addr
- Added titles to jsonrpc components in jsonrpc-discover.json
- Added proofs to uarch-riscv-tests json logs
- Added support for Debian packages on the release
- Added uarch-ram.bin to the release
- Updated Lua version to 5.4
- Use Lua path environment variables specific for version 5.4
- Move uarch halt from assembler to C++
- Ensure that uarch does not advance to the next micro instruction when iflags.H or iflags.Y is set
- Made flash drive length and ROM image filename optional in machine config
- Updated license/copyright notice in all source code
- Changed docker base image from Ubuntu 22.04 to Debian Bookworm
- Started using system provided protobuf and grpc libraries
- Updated gprc-interfaces
- Updated machine-emulator-defines
- Refactored continuous integration workflow
- Updated ROM, kernel, rootfs and tests versions on CI
- Removed Boost Log dependency
- Renamed concurrecy_config to concurrency_runtime_config
- Optimized the use of machine::get_proof in uarch_record_state_access
- Reverted iflags fixed point test in uarch-step
0.14.0 - 2023-05-03
- Added uarch halt flag
- Added reset_uarch_state
- Added and improved uarch tests
- Added get_uarch_x_address
- Added new jsonrpc-remote-cartesi-machine server
- Added client support for new jsonrpc-remote-cartesi-machine server
- Added command-line support for new jsonrpc-remote-cartesi-machine server in cartesi-machine
- Optimized interpreter instruction fetch
- Optimized interpreter hot loop to commit pc/mcycle only when necessary
- Renamed voucher field: address -> destination
- Removed uarch ROM
- Improved uarch support on cartesi-machine.lua
- Refactored uarch interpreter making it easier to port to Solidity
- Changed return type of run_uarch from void to break reason
- Renamed uarch related method names on machine class
- Removed Alpine image generation from CI
- Removed crypto++ library from third-party. Using system-installed library instead.
- Changed --step command-line option to --step-uarch in cartesi-machine.lua, for consistency
- Removed server-manager implementation from the emulator repository
- Changed marchid to 0xf
0.13.0 - 2023-02-16
- Added support for RISC-V compressed instructions
- Added support for debugging emulator with GDB
- Added return to machine run API informing the reason for breaking the interpreter loop
- Added many new tests to improve testing and coverage of the RISC-V interpreter and the C APIs
- Added coverage workflow with summary reports to the CI
- Added sanitize workflow to the CI, for catching leaks and undefined behavior
- Added support for running RISC-V tests in parallel to the CI
- Added support for passing NULL err_msg in all C APIs, meaning the error message won't be received
- Fixed interrupts servicing priority, to honor the same priority as in the RISC-V specification
- Fixed some leaks and undefined behaviors caught by the new sanitize workflow
- Fixed invalid SLLW, DIVW, REMW and REMUW instructions not raising illegal instruction exception
- Fixed crash from inside the machine while trying to read shadow PMAs
- Fixed off by one error in X registers when saving machine Lua configs
- Fixed F registers not being handled in Lua configs
- Fixed time advancing incorrectly while in interactive terminals
- Optimized and refactored interpreter hot loop
- Removed some dead code and simplified some portions of the code
- Removed brkflag CSR
- Changed marchid to 0xe
- Changed RTC_FREQ_DIV from 100 to 8192
- Changed RTC_CLOCK_FREQ from 100MHz to 128MHz
- Replaced minstret by icycleinstret CSR
- Reworked all int128 operations to use new portable int128 implementation
- Converted all runtime error messages to lowercase
- Improved CI to run faster using GitHub large runners
0.12.0 - 2022-11-25
- Added support for RISC-V floating-point instructions
- Added read/write virtual memory methods
- Added --quiet flag to cartesi-machine.lua
- Added --assert-rolling-template flag to cartesi-machine.lua
- Added the microarchitecture (RV64I) implementation
- Added new optimizations build options on the Makefile
- Added log messages to remote-cartesi-machine
- Added check-in deadline and retry on remote-cartesi-machine
- Added check-in deadline timeout on the server-manager
- Updated emulator implementation with respect to latest RISC-V specification
- Optimized Lua API to avoid allocating a uservalue for error messages for every API call
- Lowered PMA addressable ranges from 64-bit to 56-bit
- Changed marchid to 0xd
- Improved error messages relating to PMAs
- Removed DHD device
- Refactored the shadow
- Exposed TLB in the shadow
- Optimized TLB implementation
- Improved server-manager log messages
- Fixed many instruction inconsistencies with respect to the RISC-V specification.
- Fixed overflow in page table entries due to using large physical address ranges.
- Fixed crash when trying to use too many flash drives.
0.11.2 - 2022-10-28
- Changed grpc lib version to v1.50
0.11.1 - 2022-09-28
- Fixed merkle-tree-hash linking on MacOSX
- Changed the deadline used on GetProof and GetRootHash
0.11.0 - 2022-09-02
- Added method to get existing remote machine
- Added no-remote-create and no-remote-destroy options to cartesi-machine.lua
- Prevent linux from reserving 64Mi of memory when ram-length >= 128Mi
- Added GRPC Health Check service on the server-manager
- Added grpc-health-probe to the server-manager docker image
- Fixed MacOSX build
- Enabled emulator TLB
- Improved read_memory method to read all PMA types
- Changed marchid to 0xc
- Bumped server-manager server version
- Bumped remote-machine server version
- Fix Lua bind of static methods for remote machines
- Fix rollup-memory-range decoding of empty payloads at end of file
- Fix server-manager version string
- Improve server-manager concurrency violation messages
0.10.0 - 2022-07-04
- Added option to encode/decode exceptions to rollup-memory-range.lua
- Added new tests/log-with-mtime-transition.lua
- Fixed HTIF iconsole read from machine state
- Fixed cartesi/grpc.so so it can be loaded without cartesi.so
- Fix mcycle display when printing final hash after step in cartesi-machine.lua
- Fix cartesi.proof.word_splice_assert to check for old word value
- Remove derived mtime and msip from CLINT peek returns so they are not reflected in Merkle tree
- Fix clua_check_cm_merkle_tree_proof garbage in Lua stack after return
- Fix clua_check_cm_access_log to save log_type
- Fix dump_pmas() to write pristine pages to PMA files
- Fix verify workflow on CI
- Fixed link warning on MacOSX
- Make sure HTIF calls to console getchar is only honored when it is enabled in iconsole
- Simplified Lua bind
- Simplified StartSession logic in server manager
- Make HTIF console getchar react faster to input when enabled
- Remove busy wait in interactive mode
- Updated server-manager GRPC interface due to improvements on input exception handling
- Updated docker images based on Ubuntu to version 22.04
- Updated clang-format version to 14
- Updated clang-tidy version to 14
- Updated libboost version to 1.74
- Improved clua_dumpstack to limit size of diplayed string data and to escape unprintable chars
- Improved machine_merkle_tree::dump_merkle_tree() to indent and print base address of each node
- Removed active epoch index parameter from server-manager InspectRequest GRPC interface
- Test rollup-init error handling in server-manager tests
0.9.0 - 2022-04-20
- Added rollup-exception handling to cartesi-machine.lua and tests
- Added rollup-exception handling to server-manager
- Fixed machine store/load to include rollup memory ranges
- Fixed make env to append to Lua paths rather than replace them
- Fixed checkin behavior in remote-cartesi-machine-proxy
- Changed cartesi-machine.lua to fail with exit code 1 when rollup exception is detected
- Changed machine serialization to use protobuf instead of boost
- Changed cartesi-machine.lua to save voucher and notice hashes on revert
- Changed rollup-memory-range.lua to input/output JSON objects
- Changed to LuaRocks for Lua dependencies
- Changed grpc lib version to v1.45
- Changed dhd and rollup fields in config to optional
- Changed server-manager not to advance until first yield
- Changed server-manager so NewSession accepts only stored machine directories (rather than machine configs)
- Changed server-manager version from v0.1.0 to v0.2.0
0.8.0 - 2021-12-28
- Added control of concurrency to emulator runtime config
- Added new remote-cartesi-machine-proxy
- Added several new Merkle tree implementations with different flavors
- Added new --log2-word-size option to merkle-tree-hash
- Added new cartesi-server-manager to support input/output with rollups
- Added coverage tests with gcc and clang
- Added new --load-config and --store-config options to cartesi-machine.lua
- Added new rollup device in emulator to support Cartesi Servers
- Added rollup-memory-range.lua utility to encode/decode rollup inputs/outputs
- Added more and better tests
- Added new C API to machine class, exposed by libcartesi.so
- Added support for simulating rollups advance/inspect state to cartesi-machine.lua
- Fixed missing method to get CSR addresses in Lua bind
- Fixed missing DHD CSRs in Lua bind
- Fixed potential mcycle overflow in emulator
- Fixed machine::step by moving RTC interrup handling from machine::run to interpret
- Fixed gRPC threading by stopping/restarting server before/after fork in remote-cartesi-machine
- Fixed terminal configuration in remote-cartesi-machine
- Changed marchid to 9
- Changed machine::run to only return on yield, halt, or when max_mcycle is reached
- Changed WFI to noop to simplify code, thus eliminating flag I from iflags CSR
- Changed cartesi-machine-server to remote-cartesi-machine
- Changed Merkle tree proof structures to be more general
- Changed code with improvements suggested by clang-tidy
- Changed code with clang-format
- Changed Lua bind to use C API, cartesi.so links to libcartesi.so
- Changed from luapp to stock Lua interpreter
- Changed remote-cartesi-machine to check-in with client when starting/rollback/snapshot
- Changed machine::replace_flash_drive to machine::replace_memory_range
- Changed dependency from system provided gRPC libraries to a specific version added to third-party dependencies