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.
- Added a "--jobs" option to "uarch-riscv-tests.lua" test
- add-created-files.diff should now be applied with
-p1
- Fixed --skip-root-hash-store not skipping root hash computation when using the cli
0.18.1 - 2024-08-12
- Updated test rootfs to 0.16.1
0.18.0 - 2024-08-08
- Makefile target
create-generated-files-patch
to generateadd-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
- 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 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
0.17.0 - 2024-04-23
- 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
andfsqrt
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
- 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 gRPC features
- Removed unmaintained and broken benchmarks script
- 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
- Sped up uarch testing in CI.
- Implemented vm.mmap_rnd_bits workaround for the ubuntu-22.04 runner.
0.16.1 - 2024-03-28
- Fixed amd64 debian package build in release mode
- Made uarch compilation independent of release/debug build settings
0.16.0 - 2024-02-09
- 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
withoutmmap()
- 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
- 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 fromlibcartesi
(unsupported by WASI) - Made
termios
non-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
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
- Made append options work when empty
- Included missing
climits
injson-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
0.15.3 - 2024-01-25
- Fixed missing lua modules in docker image
- Fixed upload and download of artifacts on CI
- Fixed protoc compile errors on Ubuntu
- Fixed build on MacOS with homebrew
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
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 displayed 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 interrupt 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