noise
where a bit comes from
The bit position comes from a hash. The draw is reduced modulo 2,040, the number of bits in the codeword. Its quotient identifies a symbol and its remainder identifies a bit within that symbol.
The signature identifies one transaction after it is included. The instruction position identifies one event inside that transaction. Their joined hash fixes the bit position.
Nobody supplies the selected bit to the replay. The reader computes it from the signature and instruction position. The bit is unpredictable before the slot and reproducible afterward.
noise reading: —
how damage grows
Two flips can land in one symbol. They can also select the same bit and undo each other. The flip counter still records both events.
After f independent symbol draws, the expected number of distinct hit symbols is 255(1 − (254/255)^f). At 10 transfers the value is about 9.8, at 100 it is about 82.9, and at 1,000 it is about 250.0. These are expectations across repeated sequences rather than a statement about the current replay.
The expected count grows almost one-for-one at first. Repeated symbol positions become more common as the number of transfers rises. Growth slows as fewer untouched symbols remain.
noise reading: —
who causes it
Noise counts transfers rather than transferred value. A small transfer and a large transfer each produce one draw. Their effect on the codeword is equal because each invokes one bit flip.
The ring records the last 64 bit positions in replay order. New positions displace the oldest when it is full. It is a short record rather than a complete transfer history.
The scatter figure places each recorded bit position against its ring order. The hit histogram accumulates symbol counts over the stored lifetime. Together they show recent locations and long-run concentration without inventing missing observations.
noise reading: —
what is fair
A bit is unpredictable before its transfer enters a slot. The signature and instruction position fix it afterward. Replaying those values reproduces the selection.
Busy sending wallets cause more flips because each ordinary outgoing transfer contributes one. Transfer size has no place in the bit formula. The top-sender figure counts events rather than value.
Modulo reduction gives 2,040 possible bit positions. A small bias exists because the hash range does not divide evenly. It does not let a sender directly name a bit.
noise reading: —
export async function bitFor(signature: string): Promise<number> { const sig = base58Decode(signature); // 64 bytes const input = new Uint8Array(sig.length + 4); // ++ u32le(0) input.set(sig); const h = new Uint8Array(await crypto.subtle.digest("SHA-256", input)); let n = 0n; for (const b of h) n = (n << 8n) | BigInt(b); return Number(n % 2040n); // 255 symbols * 8 bits}