nx_trace_merkle_test.nx source
↩ module page · 58 lines · 2316 B
1// nx_trace_merkle_test.nx -- smoke for nx_trace_merkle.
2
3import "nx_syscalls.nx"
4import "nx_trace_log.nx"
5import "nx_trace_merkle.nx"
6
7func main() -> i64 {
8 let l: *NxTraceLog = nx_trace_log_new(32)
9 // Append 8 entries for call_id 100 with distinct output_hashes
10 var i: nx_int = 0
11 while i < 8 {
12 nx_trace_log_append(l, 1000 + i, 100, i, 1,
13 0x100 + i, 0xa00 + i, 7)
14 i = i + 1
15 }
16 if nx_trace_log_count(l) != 8 { return 1 }
17
18 // 1: build merkle tree over 4 entries
19 let t: *NxMerkleTree = nx_trace_merkle_build(l, 100, 0, 4)
20 if (t as i64) == 0 { return 2 }
21 if nx_trace_merkle_leaf_count(t) != 4 { return 3 }
22 if nx_trace_merkle_root(t) == 0 { return 4 } // non-zero root
23
24 // 2: membership query -- existing leaf hashes
25 if nx_trace_merkle_verify_member(t, 0xa00) != NX_MK_MEMBER { return 5 }
26 if nx_trace_merkle_verify_member(t, 0xa03) != NX_MK_MEMBER { return 6 }
27 // Not in the tree (we only built 0..3)
28 if nx_trace_merkle_verify_member(t, 0xa05) != NX_MK_NOT_MEMBER { return 7 }
29 if nx_trace_merkle_verify_member(t, 0xdeadbeef) != NX_MK_NOT_MEMBER { return 8 }
30
31 // 3: build over second range -- different root
32 let t2: *NxMerkleTree = nx_trace_merkle_build(l, 100, 4, 4)
33 if nx_trace_merkle_root(t) == nx_trace_merkle_root(t2) { return 9 }
34
35 // 4: build identical range twice -- same root
36 let t3: *NxMerkleTree = nx_trace_merkle_build(l, 100, 0, 4)
37 if nx_trace_merkle_roots_equal(t, t3) != 1 { return 10 }
38
39 // 5: different leaf counts produce different roots
40 let t_3: *NxMerkleTree = nx_trace_merkle_build(l, 100, 0, 3)
41 if nx_trace_merkle_root(t) == nx_trace_merkle_root(t_3) { return 11 }
42
43 // 6: empty range refused
44 if (nx_trace_merkle_build(l, 100, 0, 0) as i64) != 0 { return 12 }
45
46 // 7: out-of-range refused
47 if (nx_trace_merkle_build(l, 100, 100, 4) as i64) != 0 { return 13 }
48
49 // 8: too-many leaves refused
50 if (nx_trace_merkle_build(l, 100, 0, 257) as i64) != 0 { return 14 }
51
52 // 9: cross-host equality -- two trees of same range have equal roots
53 let t_a: *NxMerkleTree = nx_trace_merkle_build(l, 100, 4, 4)
54 let t_b: *NxMerkleTree = nx_trace_merkle_build(l, 100, 4, 4)
55 if nx_trace_merkle_roots_equal(t_a, t_b) != 1 { return 15 }
56
57 return 0
58}