40 lines
2.7 KiB
Rust
40 lines
2.7 KiB
Rust
//! igneum-pow: the Igneum lottery hash, bit-exact with the Swift prototype in `proto-metal/main.swift`.
|
|
//!
|
|
//! The crate has five parts, each mirroring one section of the prototype:
|
|
//!
|
|
//! * [`seed`]: the 32-byte seed words from a string (FNV-1a 64, four salts) and the SplitMix64 stream.
|
|
//! * [`generator`]: the 64-instruction program drawn from a seed (version 2: 16 load slots, fresh sources).
|
|
//! * [`accept`]: the acceptance rule every candidate program must pass; a rejected candidate is replaced by the
|
|
//! next attempt of the same seed.
|
|
//! * [`memhard`]: the 256 MiB ChaCha12 cache and the 8-round dataset item derivation (`proto-metal/MEMHARD.md`).
|
|
//! * [`derive`]: the per-day item-derivation program of Counter ASIC 3.0 item 2 (a prototype behind a load class).
|
|
//! * [`verify`]: the 32-lane warp interpreter that computes the 64-bit hash on the CPU, deriving dataset
|
|
//! words on demand from the cache (or from the closed form, for the old packs).
|
|
//! * [`emit`]: the Metal, CUDA and OpenCL kernel text for a program, byte-identical to the Swift exporter.
|
|
//! * [`bind`]: the header binding (init words from the pre-PoW header hash and the nonce) and the 256-bit mapping.
|
|
//!
|
|
//! Nothing here depends on a crate outside the standard library. The integration points for the
|
|
//! rusty-kaspa fork (`docs/fork-map.md`) are [`verify::Epoch`], [`verify::Epoch::verify_block`] and
|
|
//! [`verify::Epoch::hash_warp`]; the node hands [`emit::Pack`] files to miners.
|
|
|
|
// The lane loops are written index style on purpose so they read like the kernels they mirror, and the
|
|
// SplitMix64 `next` keeps the Swift name.
|
|
#![allow(clippy::needless_range_loop, clippy::should_implement_trait, clippy::large_enum_variant)]
|
|
#![allow(clippy::manual_slice_size_calculation, clippy::too_many_arguments)]
|
|
|
|
pub mod accept;
|
|
pub mod bind;
|
|
pub mod derive;
|
|
pub mod emit;
|
|
pub mod generator;
|
|
pub mod memhard;
|
|
pub mod packcheck;
|
|
pub mod seed;
|
|
pub mod verify;
|
|
|
|
pub use bind::{block_init_words, day_bytes, pow256_from_lane, target64_from_le256};
|
|
pub use accept::{check as accept_program, AcceptReport, Reject};
|
|
pub use generator::{generate, generate_from_seed_bytes, generate_from_seed_bytes_program_class, generate_from_seed_bytes_program_class_shadow, v4_class_at, v4_counted_ops, v4_rung_reps, Instr, LoadClass, Op, Program, ProgramClass, GENERATOR_VERSION, GENERATOR_VERSION_V3, GENERATOR_VERSION_V4, V3_CLASS, V4_CLASS, V4_SHADOW_INSTRS, V4_SHADOW_REPS};
|
|
pub use memhard::{cache_log2_words, dataset_log2_words, days_since_genesis, growth_doublings, Cache, MemhardCpu, MixParams, Shape};
|
|
pub use seed::{fnv1a64, seed_words, SplitMix64};
|
|
pub use verify::{hash_warp, interpret_warp_init, verify_block, DatasetMode, DatasetSource, Epoch};
|