Skip to content

Latest commit

 

History

History
513 lines (431 loc) · 20.8 KB

CHANGELOG.md

File metadata and controls

513 lines (431 loc) · 20.8 KB

Changelog

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

Changed

  • Added a "--jobs" option to "uarch-riscv-tests.lua" test
  • add-created-files.diff should now be applied with -p1
  • Improved send_cmio_response bounds checking

Fixed

  • Fixed --skip-root-hash-store not skipping root hash computation when using the cli

0.18.1 - 2024-08-12

Changed

  • Updated test rootfs to 0.16.1

0.18.0 - 2024-08-08

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

0.17.0 - 2024-04-23

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.

0.16.1 - 2024-03-28

Fixed

  • Fixed amd64 debian package build in release mode

Changed

  • Made uarch compilation independent of release/debug build settings

0.16.0 - 2024-02-09

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

0.15.3 - 2024-01-25

Fixed

  • 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

Changed

  • 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

  • Fixed the list of files on the strip and patch installation step

0.15.0 - 2023-08-16

Fixed

  • 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

  • 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

Changed

  • 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

  • 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

Changed

  • 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

  • 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

  • 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

Changed

  • 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

  • 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

Changed

  • 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

  • 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

  • Changed grpc lib version to v1.50

0.11.1 - 2022-09-28

Fixed

  • Fixed merkle-tree-hash linking on MacOSX
  • Changed the deadline used on GetProof and GetRootHash

0.11.0 - 2022-09-02

Added

  • 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

  • Fixed MacOSX build

Changed

  • 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

[0.10.1] - 2022-07-14

Fixed

  • 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

Changed

  • Improve server-manager concurrency violation messages

0.10.0 - 2022-07-04

Added

  • Added option to encode/decode exceptions to rollup-memory-range.lua
  • Added new tests/log-with-mtime-transition.lua

Fixed

  • 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

Changed

  • 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

  • Added rollup-exception handling to cartesi-machine.lua and tests
  • Added rollup-exception handling to server-manager

Fixed

  • 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

  • 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

  • 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

  • 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

  • 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

[Previous Versions]