pub struct StateHash(/* private fields */);Expand description
An in-progress fingerprint. Absorption is by value and returns the new state, so the order of a digest is written out as an expression and can be read off the page.
Implementations§
Source§impl StateHash
impl StateHash
pub const fn new() -> Self
Sourcepub const fn absorb_bytes(self, bytes: &[u8]) -> Self
pub const fn absorb_bytes(self, bytes: &[u8]) -> Self
Absorb raw bytes, in the order given.
Sourcepub const fn absorb_u64(self, value: u64) -> Self
pub const fn absorb_u64(self, value: u64) -> Self
Absorb a 64-bit value, little-endian. The byte order is fixed here rather than left to the host so a digest means the same thing on every target.
Sourcepub const fn absorb_u32(self, value: u32) -> Self
pub const fn absorb_u32(self, value: u32) -> Self
Absorb a 32-bit value, little-endian.
Sourcepub const fn absorb_f32_bits(self, value: f32) -> Self
pub const fn absorb_f32_bits(self, value: f32) -> Self
Absorb a float by its bit pattern — never by its value, which has two zeros and no equality for NaN.
Sourcepub const fn absorb_plan(self, plan: &FramePlan) -> Self
pub const fn absorb_plan(self, plan: &FramePlan) -> Self
The canonical per-frame absorption order, written once so no consumer invents a second one.
alpha is excluded deliberately: it is a pure function of the
remainder and the timestep, both of which are absorbed here, so
hashing it would add no information and would make the oracle
float-dependent. An unstated exclusion is how a determinism oracle
goes quietly vacuous, so it is stated.
The timestep was not absorbed until it was checked. The sentence above was written when this folded four fields, none of them the timestep, so the exclusion it justified rested on a premise that was false: two plans with equal first tick, step count, dropped count and remainder, cut against different timesteps, digested identically and had different alphas. Nothing in the tree could produce that pair, since a loop’s timestep is fixed at construction — which is exactly why it survived. A digest justified by a claim that happens to hold is a digest waiting for the day it stops.