Skip to content

v0.22.0

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Oct 20:35
v0.22.0
f9e4f82

Highlights

  • Verification game documentation - The verification game is now explained around input events, with Lua recipes that play complete PRT disputes using only the emulator and its Lua library.
  • Bundle collection - All machine APIs can collect mcycle and uarch-cycle hash bundles directly, the building blocks of computation hashes.
  • Resumable epochs - The Cartesi Machine CLI can begin, end, and resume epochs explicitly when advancing states, with dedicated options for mcycle and uarch-cycle computation hashes.
  • Pristine uarch hash - The pristine uarch hash and the uarch state range constants are exposed in the C, Lua, and JSON-RPC APIs, so verifiers can take them from the emulator instead of hardcoding them.
  • Hardening - Many fixes to TLB handling, interrupt priority, proof and bundle validation, VirtIO, and JSON-RPC parsing. The interrupt and TLB fixes also run inside the uarch, so the pristine uarch hash and machine root hashes differ from v0.21.0.
  • Linux 6.18 - Tests and documentation use kernel 6.18.56-ctsi-1, now released from cartesi/linux.

Added

  • Added collect_mcycle_bundle and collect_uarch_cycle_bundle to all machine APIs
  • Added protect to cartesi.util
  • Added fixed-length tuple schemas to cartesi.tojson/cartesi.fromjson
  • Added resumable epochs to --cmio-advance-state (begin_epoch, end_epoch, resumable)
  • Added frontier forests to cartesi.hash-tree
  • Added machine:move() to the Lua API
  • Added outputs Merkle root validation to --assert-rolling-template
  • Added get_uarch_pristine_hash and the uarch state range constants to the C, Lua, and JSON-RPC APIs
  • Added mark_pages_dirty to backing store configurations, forcing page hashes to be recomputed

Fixed

  • Fixed stored machines whose page hash-tree cache could be corrupted by sync or clone
  • Fixed filesystem locks leaking into concurrently spawned processes
  • Fixed outputs Merkle root proofs being rejected on SHA-256 machines
  • Fixed progress output with VirtIO consoles
  • Fixed halt and manual yield precedence over an exhausted input budget
  • Fixed out-of-range integer arguments being silently truncated by the Lua and JSON-RPC bindings
  • Fixed pending write TLB dirty marks being lost when a machine is stored or closed
  • Fixed pages not being marked dirty when backing hash trees cannot be reused
  • Fixed stale host pointers being used after replace_memory_range
  • Fixed stale page hash-tree cache entries surviving range replacement or sharing changes
  • Fixed JSON-RPC fork accepting machines with shared hash-tree storage
  • Fixed execution depending on run boundaries when interrupts are partially delegated
  • Fixed cached shadow TLB entries bypassing PMA access permissions
  • Fixed shared writable mappings of read-only or hard-linked backing files breaking clone isolation
  • Fixed forked JSON-RPC servers continuing the parent's request batch
  • Fixed remote empty clones leaking their forked server
  • Fixed JSON floats at 2^63 and 2^64 being accepted as 64-bit integers
  • Fixed unbounded nesting depth in Lua JSON conversion and JSON-RPC parsing
  • Fixed JSON-RPC error responses carrying a one-element array instead of a null ID
  • Fixed range padding hash queries failing at page level and reading stale page cache hashes below it
  • Fixed the JSON-RPC server hanging on SIGBUS
  • Fixed command-line fallbacks missing from serialized configurations loaded from files
  • Fixed --replace-memory-range being accepted with --revert-mode=stored
  • Fixed cyclic VirtIO descriptor chains hanging the host
  • Fixed stale data TLB entries when a trap or MRET changes MPP while MPRV is set in M-mode
  • Fixed partial bundle trees being allocated before their size was validated
  • Fixed access proofs with the wrong number of sibling hashes being accepted
  • Fixed send_cmio_response accepting a null data buffer with a nonzero length

Changed

  • Changed send_cmio_response to perform no-op transitions as logged and verified ones do
  • Changed CMIO response lengths in the C API to uint32_t
  • Replaced the computation hash sub-options of --cmio-advance-state with --mcycle-computation-hash and --uarch-cycle-computation-hash
  • Renamed input_index_begin/input_index_end to input_file_index_begin/input_file_index_end
  • Renamed get_root_hash in cartesi.hash-tree to get_data_root_hash
  • Bumped MARCHID version to 22
  • Bumped machine configuration archive version from 7 to 8
  • Bumped JSON-RPC protocol version to 0.8.0
  • Bumped test Linux image to kernel 6.18.56-ctsi-1, now downloaded from cartesi/linux
  • Bumped minimum Clang version to 20