///|
fn text(value : String) -> String {
value
}
///|
fn int_text(value : Int) -> String {
"\{value}"
}
///|
fn reducer(
state : Int,
event : @replay.JournalEvent[String],
) -> @replay.Transition[Int] {
if event.payload == "inc" {
@replay.Transition::Accepted(state + 1)
} else {
@replay.Transition::Rejected("unexpected workload event")
}
}
///|
fn main {
let event_count = 10000
let journal : @replay.Journal[String] = @replay.Journal::new()
for index = 0; index < event_count; index = index + 1 {
ignore(journal.append("Increment", "inc", "workload-1", text))
}
let report = @replay.replay(journal, 0, text, int_text, reducer)
let evidence = @replay.build_replay_evidence(journal, report, text).unwrap()
let proof = @replay.replay_inclusion_proof(
journal, report, evidence, event_count,
).unwrap()
println("events=\{journal.length()}")
println("final_state=\{report.final_state}")
println("state_hash=\{report.final_state_hash}")
println("journal_hash=\{report.journal_tail_hash}")
println("evidence_root=\{evidence.root}")
println("evidence_levels=\{evidence.levels.length()}")
println("proof_depth=\{proof.siblings.length()}")
println("proof_verified=\{@replay.verify_replay_inclusion(proof)}")
println(
"deterministic=\{@replay.verify_determinism(journal, 0, text, int_text, reducer)}",
)
}