code wiki / (root) / nx_trace_merkle_test.nx

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}