0to100.mp4
This is the 100th tagged release 🥳
Major 📜
- 🔱 Activate HBSMT as the consensus contractstate tree at epoch 710. At fork height 710_00000 the contractstate trie
migrates from the legacy HubtV2/bintree to HBSMT, whose root is now signed into attestations. The fork block does a
deterministic full rebuild of the HBSMT from contractstate; post-fork updates are incremental and rewind-safe (folded
into the mutation set). See consensus_apply.rs, hbsmt_rdb.rs. - 🌲 Move the receipts / tx / validator roots to HBSMT at the fork. The per-block root_receipts, root_tx, and
root_validator switch from the Hubt trie to HBSMT once past the fork height (gated; pre-fork stays on Hubt). See
consensus_apply.rs, entry.ex. - 🔗 Add root_chain — an MMR commitment over all blocks — to the header. At epoch 710 the MMR accumulator root becomes
a mandatory block-header field that every node re-derives and verifies per block, and that snapshot import re-checks.
Built in lockstep with the chain and rewind-safe via per-entry pre-apply snapshots. See entry.ex, db_mmr.ex,
fabric_snapshot.ex. - 💸 Charge a per-value-byte READ budget (epoch 710). Reads now cost proportional to value size, so re-reading a large
(1MB+) term repeatedly is no longer almost free. See consensus_kv.rs. - ⚙️ Add a native multi-threaded UPOW solver — new upow.rs (~350 lines): the genuine 16×50240×16 matmul with
AVX-512-VNNI / AVX2 / scalar autodetect. A computor can compute UPOW to itself as a node, with a COMPUTOR_UPOW_THREADS override. See upow.rs, computor_gen.ex, node/upow.ex. - 🛡️ WASM VM budget/metering fixes — meter as_abort string reads (charge-before-read, capped), fix the
LOG element off-by-one, cap import call depth at MAX_CALL_DEPTH=16, and charge slash_trainer exec cost
(COST_PER_SLASH). See wasm.rs, protocol.rs. - 🧮 Harden Freivalds UPOW verification — AVX2-accelerated matmul check (hsum256/dot8_i32_to_i64/i64 accumulation),
fix an i32-min-wrap, plus a soundness/attack test battery. See sol_freivalds.rs.
Minor
- Don't crash on UDP send failure — handle all :gen_udp.send errors instead of only :ok/:eperm. See
node_gen_socket_gen.ex. - Harden special-meeting consensus — ignore signatures from non-validators, add a catch-all handler. See
special_meeting_gen.ex. - Per-op peer rate-limiting — canonical accepted-op set with per-6s quotas; throttle/drop unknown ops. See node_ops.ex
(new), node_gen_netguard.ex. - Harden STUN self-IP detection — DNS-resolve the STUN server, validate responses by transaction id, deadline/retry;
only accept parsable IPv4. See stun.ex, cymru_routing.ex. - Don't crash on malformed peer input — graceful handling of invalid entries/ANRs/attestations (throw vs match-crash),
cache pending attestations. See node_state.ex. - Validate BIC names/symbols — shared validate_name (1–32 bytes) for coin/NFT/collection; reject reserved symbols even
with punctuation stripped. See coin.rs, nft.rs, coin_symbol_reserved.rs. - Depth-limited, length-checked vecpak decode (reject malformed payloads).
- Cost-overflow guard (cost_per_byte_overflow) + min historical tx cost. See protocol.rs.
- RocksDB single-subcompaction tuning;
- fix an Elixir Range deprecation warning.