Skip to content

Commit 1aa6dcc

Browse files
committed
feat: implement root hashes context (WIP)
1 parent 21e7b29 commit 1aa6dcc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+890
-1571
lines changed

.dockerignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
build
1414
third-party/downloads
1515
src/cartesi-jsonrpc-machine
16-
src/cartesi-merkle-tree-hash
16+
src/cartesi-hash-tree-hash
1717

1818
doc/html
1919
doc/api.md

.github/workflows/build.yml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,6 @@ jobs:
209209
run: |
210210
docker run --rm -t -v cmio-templates:/tmp/cartesi-machine/tests/data cartesi/machine-emulator:tests /usr/share/cartesi-machine/tests/scripts/test-cmio.sh cartesi-jsonrpc-machine cartesi-machine lua
211211
212-
- name: Run Merkle tree tests
213-
run: |
214-
docker run --rm -t ${{ github.repository_owner }}/machine-emulator:tests test-merkle-tree-hash --log2-root-size=30 --log2-leaf-size=12 --input=/usr/bin/test-merkle-tree-hash --hash-function=keccak256
215-
docker run --rm -t ${{ github.repository_owner }}/machine-emulator:tests test-merkle-tree-hash --log2-root-size=30 --log2-leaf-size=12 --input=/usr/bin/test-merkle-tree-hash --hash-function=sha256
216-
217212
- name: Run C API tests
218213
run: |
219214
docker run --rm -t ${{ github.repository_owner }}/machine-emulator:tests test-machine-c-api
@@ -378,11 +373,6 @@ jobs:
378373
run: |
379374
docker run --platform linux/arm64 --rm -t -v cmio-templates:/tmp/cartesi-machine/tests/data cartesi/machine-emulator:tests /usr/share/cartesi-machine/tests/scripts/test-cmio.sh cartesi-jsonrpc-machine cartesi-machine lua
380375
381-
- name: Run Merkle tree tests
382-
run: |
383-
docker run --platform linux/arm64 --rm -t ${{ github.repository_owner }}/machine-emulator:tests test-merkle-tree-hash --log2-root-size=30 --log2-leaf-size=12 --input=/usr/bin/test-merkle-tree-hash --hash-function=keccak256
384-
docker run --platform linux/arm64 --rm -t ${{ github.repository_owner }}/machine-emulator:tests test-merkle-tree-hash --log2-root-size=30 --log2-leaf-size=12 --input=/usr/bin/test-merkle-tree-hash --hash-function=sha256
385-
386376
- name: Run C API tests
387377
run: |
388378
docker run --platform linux/arm64 --rm -t ${{ github.repository_owner }}/machine-emulator:tests test-machine-c-api
@@ -554,7 +544,7 @@ jobs:
554544
555545
- name: Run coverage
556546
run: |
557-
docker run --name coverage-report -t ${{ github.repository_owner }}/machine-emulator:coverage make -j1 test-save-and-load test-machine test-hash test-lua test-jsonrpc test-c-api coverage-machine test-uarch-rv64ui test-uarch-interpreter coverage-uarch coverage-report coverage=yes
547+
docker run --name coverage-report -t ${{ github.repository_owner }}/machine-emulator:coverage make -j1 test-save-and-load test-machine test-lua test-jsonrpc test-c-api coverage-machine test-uarch-rv64ui test-uarch-interpreter coverage-uarch coverage-report coverage=yes
558548
docker cp coverage-report:/usr/src/emulator/tests/build/coverage .
559549
docker rm coverage-report
560550

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ build
1313
pkg
1414
third-party/downloads
1515
src/cartesi-jsonrpc-machine
16-
src/cartesi-merkle-tree-hash
16+
src/cartesi-hash-tree-hash
1717
src/tests/test-machine-c-api
18-
src/tests/test-merkle-tree-hash
1918

2019
doc/html
2120
doc/api.md

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ INSTALL_DIR= cp -RP
7373
SYMLINK= ln -sf
7474
CHMOD_EXEC= chmod 0755
7575

76-
EMU_TO_BIN= src/cartesi-jsonrpc-machine src/cartesi-merkle-tree-hash
76+
EMU_TO_BIN= src/cartesi-jsonrpc-machine src/cartesi-hash-tree-hash
7777
EMU_TO_LIB= src/$(LIBCARTESI_SO) src/$(LIBCARTESI_SO_JSONRPC)
7878
EMU_TO_LIB_A= src/libcartesi.a src/libcartesi_jsonrpc.a src/libluacartesi.a src/libluacartesi_jsonrpc.a
7979
EMU_LUA_TO_BIN= src/cartesi-machine.lua src/cartesi-machine-stored-hash.lua
@@ -83,7 +83,7 @@ EMU_TO_LUA_CARTESI_CPATH= src/cartesi/jsonrpc.so
8383
EMU_TO_INC= $(addprefix src/,jsonrpc-machine-c-api.h machine-c-api.h machine-c-version.h)
8484
UARCH_TO_SHARE= uarch-ram.bin
8585

86-
TESTS_TO_BIN= tests/build/misc/test-merkle-tree-hash tests/build/misc/test-machine-c-api
86+
TESTS_TO_BIN= tests/build/misc/test-machine-c-api
8787
TESTS_LUA_TO_LUA_PATH=tests/lua/cartesi
8888
TESTS_LUA_TO_TEST_LUA_PATH=$(wildcard tests/lua/*.lua)
8989
TESTS_SCRIPTS_TO_TEST_SCRIPTS_PATH=$(wildcard tests/scripts/*.sh)

src/Makefile

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ endif
9797

9898
SO_EXT=dylib
9999
LIBCARTESI_LDFLAGS=-install_name '@rpath/$(LIBCARTESI)'
100-
LIBCARTESI_MERKLE_TREE_LDFLAGS=-install_name '@rpath/$(LIBCARTESI_MERKLE_TREE)'
100+
LIBCARTESI_HASH_TREE_LDFLAGS=-install_name '@rpath/$(LIBCARTESI_HASH_TREE)'
101101
LIBCARTESI_JSONRPC_LDFLAGS=-install_name '@rpath/$(LIBCARTESI_JSONRPC)' -Wl,-rpath,@loader_path
102102
LUACARTESI_LDFLAGS=-install_name '@rpath/cartesi.so'
103103
LUACARTESI_JSONRPC_LDFLAGS=-install_name '@rpath/cartesi/jsonrpc.so' -Wl,-rpath,@loader_path/..
@@ -123,7 +123,7 @@ SLIRP_INC=
123123
SLIRP_LIB=-lslirp
124124
SO_EXT=so
125125
LIBCARTESI_LDFLAGS=
126-
LIBCARTESI_MERKLE_TREE_LDFLAGS=
126+
LIBCARTESI_HASH_TREE_LDFLAGS=
127127
LIBCARTESI_JSONRPC_LDFLAGS=-Wl,-rpath,'$$ORIGIN'
128128
LUACARTESI_LDFLAGS=
129129
LUACARTESI_JSONRPC_LDFLAGS=-Wl,-rpath,'$$ORIGIN/..'
@@ -132,7 +132,7 @@ PROFILE_DATA=
132132
endif
133133

134134
LIBCARTESI=libcartesi-$(EMULATOR_VERSION_MAJOR).$(EMULATOR_VERSION_MINOR).$(SO_EXT)
135-
LIBCARTESI_MERKLE_TREE=libcartesi_merkle_tree-$(EMULATOR_VERSION_MAJOR).$(EMULATOR_VERSION_MINOR).$(SO_EXT)
135+
LIBCARTESI_HASH_TREE=libcartesi_hash_tree-$(EMULATOR_VERSION_MAJOR).$(EMULATOR_VERSION_MINOR).$(SO_EXT)
136136
LIBCARTESI_JSONRPC=libcartesi_jsonrpc-$(EMULATOR_VERSION_MAJOR).$(EMULATOR_VERSION_MINOR).$(SO_EXT)
137137

138138
ifeq ($(slirp),yes)
@@ -148,12 +148,12 @@ DEFS+=-DNO_SLIRP
148148
endif
149149

150150
LIBCARTESI_LIBS=$(LIBCARTESI_COMMON_LIBS)
151-
LIBCARTESI_MERKLE_TREE_LIBS=
151+
LIBCARTESI_HASH_TREE_LIBS=
152152
LIBCARTESI_JSONRPC_LIBS=
153153
LUACARTESI_LIBS=$(LIBCARTESI_COMMON_LIBS)
154154
LUACARTESI_JSONRPC_LIBS=
155155
CARTESI_JSONRPC_MACHINE_LIBS=$(LIBCARTESI_COMMON_LIBS)
156-
CARTESI_MERKLE_TREE_HASH_LIBS=
156+
CARTESI_HASH_TREE_HASH_LIBS=
157157

158158
#DEFS+= -DMT_ALL_DIRTY
159159

@@ -344,15 +344,15 @@ SOLDFLAGS+=$(MYSOLDFLAGS)
344344
LIBLDFLAGS+=$(MYLIBLDFLAGS)
345345
EXELDFLAGS+=$(MYEXELDFLAGS)
346346

347-
all: libcartesi libcartesi_merkle_tree libcartesi_jsonrpc c-api luacartesi cartesi-jsonrpc-machine hash
347+
all: libcartesi libcartesi_hash_tree libcartesi_jsonrpc c-api luacartesi cartesi-jsonrpc-machine hash
348348

349349
luacartesi: libluacartesi.a cartesi.so libluacartesi_jsonrpc.a cartesi/jsonrpc.so
350350

351351
jsonrpc: cartesi/jsonrpc.so cartesi-jsonrpc-machine
352352

353-
hash: cartesi-merkle-tree-hash
353+
hash: cartesi-hash-tree-hash
354354

355-
c-api: $(LIBCARTESI) $(LIBCARTESI_MERKLE_TREE) $(LIBCARTESI_JSONRPC)
355+
c-api: $(LIBCARTESI) $(LIBCARTESI_HASH_TREE) $(LIBCARTESI_JSONRPC)
356356

357357
.PHONY: all generate use clean lint format format-lua check-format check-format-lua luacartesi hash c-api compile_flags.txt
358358

@@ -373,7 +373,7 @@ LIBCARTESI_OBJS:= \
373373
os-mmap.o \
374374
os-filesystem.o \
375375
plic-address-range.o \
376-
pristine-merkle-tree.o \
376+
back-hash-tree.o \
377377
replay-step-state-access-interop.o \
378378
send-cmio-response.o \
379379
keccak-256-hasher.o \
@@ -404,17 +404,14 @@ LUACARTESI_OBJS:= \
404404
clua-cartesi.o \
405405
$(CARTESI_CLUA_OBJS)
406406

407-
LIBCARTESI_MERKLE_TREE_OBJS:= \
407+
LIBCARTESI_HASH_TREE_OBJS:= \
408408
keccak-256-hasher.o \
409409
sha-256-hasher.o \
410410
is-pristine.o \
411-
back-merkle-tree.o \
412-
pristine-merkle-tree.o \
413-
complete-merkle-tree.o \
414-
full-merkle-tree.o
411+
back-hash-tree.o \
415412

416-
CARTESI_MERKLE_TREE_HASH_OBJS:= \
417-
merkle-tree-hash.o
413+
CARTESI_HASH_TREE_HASH_OBJS:= \
414+
hash-tree-hash.o
418415

419416
LIBCARTESI_JSONRPC_OBJS:= \
420417
jsonrpc-machine.o \
@@ -435,7 +432,7 @@ CARTESI_JSONRPC_MACHINE_OBJS:= \
435432
ifeq ($(gperf),yes)
436433
DEFS+=-DGPERF
437434
LIBCARTESI_LIBS+=-lprofiler
438-
LIBCARTESI_MERKLE_TREE_LIBS+=-lprofiler
435+
LIBCARTESI_HASH_TREE_LIBS+=-lprofiler
439436
LIBCARTESI_JSONRPC_LIBS+=-lprofiler
440437
LUACARTESI_LIBS+=-lprofiler
441438
LUACARTESI_JSONRPC_LIBS+=-lprofiler
@@ -448,10 +445,10 @@ so-version:
448445
@echo $(EMULATOR_VERSION_MAJOR).$(EMULATOR_VERSION_MINOR)
449446

450447
libcartesi: libcartesi.a libcartesi.$(SO_EXT)
451-
libcartesi.$(SO_EXT): $(LIBCARTESI) $(LIBCARTESI_MERKLE_TREE)
448+
libcartesi.$(SO_EXT): $(LIBCARTESI) $(LIBCARTESI_HASH_TREE)
452449
ln -sf $< $@
453-
libcartesi_merkle_tree: libcartesi_merkle_tree.a libcartesi_merkle_tree.$(SO_EXT)
454-
libcartesi_merkle_tree.$(SO_EXT): $(LIBCARTESI_MERKLE_TREE)
450+
libcartesi_hash_tree: libcartesi_hash_tree.a libcartesi_hash_tree.$(SO_EXT)
451+
libcartesi_hash_tree.$(SO_EXT): $(LIBCARTESI_HASH_TREE)
455452
ln -sf $< $@
456453
libcartesi_jsonrpc: libcartesi_jsonrpc.a libcartesi_jsonrpc.$(SO_EXT)
457454
libcartesi_jsonrpc.$(SO_EXT): $(LIBCARTESI_JSONRPC)
@@ -460,7 +457,7 @@ libcartesi_jsonrpc.$(SO_EXT): $(LIBCARTESI_JSONRPC)
460457
libcartesi.a: $(LIBCARTESI_OBJS)
461458
$(AR) $@ $^
462459

463-
libcartesi_merkle_tree.a: $(LIBCARTESI_MERKLE_TREE_OBJS)
460+
libcartesi_hash_tree.a: $(LIBCARTESI_HASH_TREE_OBJS)
464461
$(AR) $@ $^
465462

466463
libcartesi_jsonrpc.a: $(LIBCARTESI_JSONRPC_OBJS)
@@ -472,8 +469,8 @@ libluacartesi.a: $(LUACARTESI_OBJS)
472469
libluacartesi_jsonrpc.a: $(LUACARTESI_JSONRPC_OBJS)
473470
$(AR) $@ $^
474471

475-
$(LIBCARTESI_MERKLE_TREE): $(LIBCARTESI_MERKLE_TREE_OBJS)
476-
$(CXX) -o $@ $^ $(LIBCARTESI_MERKLE_TREE_LIBS) $(LDFLAGS) $(LIBCARTESI_MERKLE_TREE_LDFLAGS) $(LIBLDFLAGS)
472+
$(LIBCARTESI_HASH_TREE): $(LIBCARTESI_HASH_TREE_OBJS)
473+
$(CXX) -o $@ $^ $(LIBCARTESI_HASH_TREE_LIBS) $(LDFLAGS) $(LIBCARTESI_HASH_TREE_LDFLAGS) $(LIBLDFLAGS)
477474

478475
$(LIBCARTESI): $(LIBCARTESI_OBJS)
479476
$(CXX) -o $@ $^ $(LIBCARTESI_LIBS) $(LDFLAGS) $(LIBCARTESI_LDFLAGS) $(LIBLDFLAGS)
@@ -536,8 +533,8 @@ $(PROFILE_DATA):
536533
llvm-profdata merge -output=default.profdata default*.profraw
537534
endif
538535

539-
cartesi-merkle-tree-hash: $(CARTESI_MERKLE_TREE_HASH_OBJS) libcartesi_merkle_tree.a
540-
$(CXX) -o $@ $^ $(CARTESI_MERKLE_TREE_HASH_LIBS) $(LDFLAGS) $(EXELDFLAGS)
536+
cartesi-hash-tree-hash: $(CARTESI_HASH_TREE_HASH_OBJS) libcartesi_hash_tree.a
537+
$(CXX) -o $@ $^ $(CARTESI_HASH_TREE_HASH_LIBS) $(LDFLAGS) $(EXELDFLAGS)
541538

542539
cartesi-jsonrpc-machine: $(CARTESI_JSONRPC_MACHINE_OBJS) libcartesi_jsonrpc.a libcartesi.a
543540
$(CXX) -o $@ $^ $(CARTESI_JSONRPC_MACHINE_LIBS) $(LDFLAGS) $(EXELDFLAGS)
@@ -619,7 +616,7 @@ clean-libcartesi: clean-objs
619616
@rm -f *.so *.a cartesi/*.so *.dylib
620617

621618
clean-executables:
622-
@rm -f cartesi-jsonrpc-machine cartesi-merkle-tree-hash compute-uarch-pristine-hash
619+
@rm -f cartesi-jsonrpc-machine cartesi-hash-tree-hash compute-uarch-pristine-hash
623620

624621
clean-coverage:
625622
@rm -f *.profdata *.profraw *.gcda *.gcov coverage.info coverage.txt

src/access-log.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,10 @@ class access {
173173
/// \param root_hash Hash to be used as the root of the proof.
174174
/// \return The corresponding proof
175175
proof_type make_proof(const machine_hash root_hash) const {
176-
// the access can be of data smaller than the merkle tree word size
177-
// however, the proof must be at least as big as the merkle tree word size
176+
// the access can be of data smaller than the hash tree word size
177+
// however, the proof must be at least as big as the hash tree word size
178178
const int proof_log2_size = std::max(m_log2_size, HASH_TREE_LOG2_WORD_SIZE);
179-
// the proof address is the access address aligned to the merkle tree word size
179+
// the proof address is the access address aligned to the hash tree word size
180180
const uint64_t proof_address = m_address & ~(HASH_TREE_WORD_SIZE - 1);
181181
if (!m_sibling_hashes.has_value()) {
182182
throw std::runtime_error("can't make proof if access doesn't have sibling hashes");

0 commit comments

Comments
 (0)