1.1.0 (2026-09-11)
- metrics: record exported but unset state transition gauges (#662) (d57e89a)
- metrics: report proposer rewards per type (#689) (d2eaabe)
- napi: expose forkSeq on BeaconStateView binding (#635) (213a732)
- shuffle: add ./shuffle subpath export (#612) (c9655c4)
- shuffle: add PTC sampling (#563) (ab56ddf)
- ssz: add Progressive List, Progressive BitList, ProgressiveContainer, CompatibleUnion (#99) (1e43f5e)
- avoid duplicate phase0 pending-attestation participants (#659) (bdc0cd0)
- bench: stabilize committee benchmark inputs (#606) (5b2c3b1)
- bindings: expose explicit state view disposal (#649) (cb42fa0)
- bindings: support blinded state transitions (#628) (3fdb5aa)
- hash block body when converting to header (#657) (692dd5b)
- pmt: reclaim grouped intermediate roots (#599) (f7e9a8b)
- pmt: reclaim partial compact proof nodes (#609) (c99eff3)
- pmt: reject empty compact proof leaves (#610) (5bc9297)
- preserve participation view ownership on rotation failure (#643) (660434c)
- preserve sync committee ownership on rotation OOM (#652) (3a3b497)
- prevent duplicate Altair sync cache cleanup (#651) (eb23182)
- reject short seed validator bytes (#653) (5cd576b)
- reject withdrawal count mismatches (#619) (3add44d)
- release benchmark hasher scratch (#688) (8628415)
- release bitlist json scratch (#677) (acef3e7)
- report proposer rewards from block transitions (#655) (2f0755f)
- split tests in variable element iterator (#650) (747b321)
- ssz: clean up partially decoded blocks (#596) (e77358e)
- ssz: clean up partially initialized tree view values (#579) (5de24e2)
- ssz: clean up recursive hasher initialization (#592) (ffa29f8)
- ssz: free variable list offsets on decode errors (#595) (32e1d14)
- ssz: hash boolean lists as basic lists (#602) (e2b9598)
- ssz: instantiate variable vector tree views (#600) (5f7beaf)
- ssz: keep clone destinations deinit-safe (#614) (8917c51)
- ssz: make container commits failure-atomic (#567) (cbfadb9)
- ssz: make tree view publication atomic (#574) (9c98cb2)
- ssz: preserve container view state after failed child reads (#646) (966bdc8)
- ssz: reclaim partial byte and bit vector trees (#594) (f4c81d0)
- ssz: reject invalid list growth lengths (#604) (0fa8e7c)
- ssz: reject noncanonical booleans in list and vector trees (#645) (2e5aba3)
- ssz: reject overflowing bit list indexes (#603) (7d3ba65)
- ssz: validate bit list length before hashing (#608) (a038e86)
- stabilize ptc benchmark seeds (#674) (2e1c781)
- state_transition: reuse shared shuffled index cache (#638) (807bae3)
- state-transition: clean up upgraded payload headers (#597) (e47028d)
- state-transition: count validator filling withdrawal payload (#656) (22eea7e)
- state-transition: prevent next-shuffling ownership corruption on decision-root failure (#634) (c62cd29)
- stf: allocate epoch cache clone before refs (#639) (9076673)
- stf: cleanup sync committee indices on init OOM path (#631) (58a9fcb)
- stf: fix epochshuffling slot committee slice leaks (#636) (c61367d)
- stf: justify exact two-thirds participation (#623) (7e4e322)
- stf: keep expected withdrawals query read-only (#620) (e646cf0)
- stf: safe pending withdrawal map reads with get (#630) (4f29bbb)
- stf: treat Capella as post-merge (#624) (057310e)
- use integer square root for Phase0 rewards (#654) (ba63288)
- allocate epoch scratch buffers on demand (#665) (fc4e50b)
- fill reusable participation buffers directly (#660) (7a1b16f)
- ssz: avoid scratch allocation in chunked list serialization (#642) (f16981b)
- ssz: bound list hashing scratch with batched accumulation (#672) (ef82b72)
- ssz: hash dirty basic field roots directly (#615) (a859403)
- ssz: size progressive fixed lists without materializing values (#641) (f3dc6ff)
- ssz: stream list tree reads into output values (#671) (1ac2e51)
- state-transition: optimize slashing penalties (#676) (b01424a)
- use branchless swaps in shuffle (#661) (e18fb84)
- extract tests to _test.zig, add tidy lint (#625) (bb485bb)
- metrics: drop SSZ node-cache metrics (#666) (5d35494)
- pmt: bound lazy hashing and compact proof depth (#647) (52f5113)
- pmt: compute proof descriptors with integer paths (#644) (d4cc6b9)
- pmt: make node pool non-growable (#617) (9827bf2)
- pubkeys: drop deserialized lookup wrappers (#584) (8ec2897)
- remove redundant epoch benchmark reward synchronization (#668) (947e828)
- share bytelist tree conversion (#680) (cfc90f4)
- shuffle: drop JS signature comments and fix balance param name (#577) (be598b1)
- ssz: rewrite offset iteration for variable element iteration (#598) (af63364)
- ssz: share byte-list hashing with generic uint8 lists (#673) (34cdddd)
- ssz: simplify progressive bit list type (#637) (abb41fa)
- stf: remove unused epoch transition cache options (#667) (31cc99e)
- docs: document bls/pk cache trust assumptions (#585) (66ecb23)
- docs: readme housekeeping + add contributing doc (#560) (f780208)
1.0.0 (2026-08-19)
- add
state.getBuildersLength()binding (#472) (be2b5ab) - beacon-node: add block state cache and checkpoint datastore (#452) (2145faa)
- bindings to
getExpectedWithdrawalsand native tweaks (#350) (f47bc66) - bindings: add pubkey cache syncPubkeys (#537) (542779f)
- bindings: aggregate cached public keys by validator index (#397) (2f90603)
- bindings: align
BeaconStateViewwithIBeaconStateView(#347) (b8ec273) - bindings: configurable pubkey cache growth step (#481) (133ef24)
- bindings: expose more APIs for STF (#444) (7fe2609)
- bls: add small MSM for npoints < 32 (#393) (b430638)
- blst: use external buffers for blst operations (#358) (78e4678)
- ci: conditionally publish bindings with tag (#355) (ea77919)
- clock: add clock module for slot/epoch timing (#354) (385b077)
- fork_choice: add Prometheus metrics module (#309) (cbc9d8d)
- forkchoice: implement the forkchoice module (#246) (7c62a9b)
- getSyncCommitteesWitness (#367) (ef77649)
- implement
loadStateAPI and binding (#165) (f903519), closes #159 - metrics: metrics bindings (#455) (dd41999)
- migrate blst,pubkeys to use zapi js dsl (#331) (fcd26ca)
- pubkeys: add getPubkeyBytes binding (#555) (4ca51cf)
- publish ARM64 musl bindings (#482) (ac764c9)
- shuffle: add swap-or-not shuffling module and binding (#559) (c2db37c)
- split nextValue fn (#464) (b47faeb)
- support getLatestWeakSubjectivityCheckpointEpoch (#366) (dcf3883)
- update fulu deposit processing (#442) (064335c)
- avoid set (#484) (2e25d97)
- better generation of rand scalar (#388) (74dce77)
- bindings: accept
dontTransferCachein processSlots for backward compatibility (#460) (65df5af) - bindings: check signature infinity by default (#509) (2f5f281)
- bindings: clean up failed async BLS work (#527) (1111b00)
- bindings: free metrics writer on scrape failure (#529) (4c8d94a)
- bindings: harden random aggregate scalars (#528) (8e89a63)
- bindings: log level for missing fields (#435) (08faf41)
- bindings: misordering of print for cpu count (#381) (752a972)
- bindings: populate epoch participation for test fixtures (#436) (8dbdd2e)
- bindings: refcount Pool to fix teardown panic (#352) (23b2f68)
- bindings: roll back partial N-API initialization (#491) (31c5ebb)
- bindings: size BLS thread pool by cgroup-aware CPU count (#386) (3ae9522)
- bindings: validate class types before unwrap (#514) (2fd2ad5)
- bindings: validate secret key hex length (#517) (136e415)
- bls: align PublicKey.uncompress validation with Signature.uncompress (#508) (5a8dbe9)
- bls: bound randomized aggregation inputs (#548) (779d0bf), closes #542
- bls: clean up partial thread pool initialization (#490) (d55e598)
- bls: convert pippenger scratch bytes to element counts (#513) (a12ca92)
- bls: enforce 32-byte signing roots (#545) (72fd308)
- bls: make batch cardinality structural (#547) (a06d8b2)
- bls: preserve aggregate outputs on failure (#521) (e0b6dd1)
- bls: reject empty keygen salts (#524) (d2a9c86)
- bls: reject unknown BLST error codes (#525) (9e4a6ad)
- bls: size pairing buffers for 32-bit targets (#531) (dc64a27)
- blst: default signature infinity check to true if not provided (#387) (021cdcb)
- build: remove
zig-outfromfiles(#360) (c52af09) - ci: fix caching spec test version (#439) (96885a1)
- dangling state pointer in loadOtherState (#450) (81cbd5f)
- epoch_cache: compute missing
next_proposers(#447) (0088a29) - epoch_cache: populate decision roots in afterProcessEpoch (#453) (4b70a5e)
- export asyncAggregateWithRandomness through napi binding (#371) (1d04c2b)
- harden memory safety across PMT, SSZ tree views, and state transition (#377) (d6f5897)
- improve atomic ordering in ThreadPool and NAPI init (#310) (4b0a1cc)
- interface compatbility with NativeBeaconStateView (#445) (89e13d1)
- missing deinits in loadOtherState (#459) (094d278)
- missing state commits (#454) (a432b55)
- no-op when syncPubkeys run on a pk cache with shrinking validator set (#432) (ed05a99)
- param order in BeaconBlockBody (#348) (d8b9c06)
- pendingConsolidations bindings (#449) (b9c497e)
- pmt,ssz: harden chunked-leaf and zero-copy tree-view memory safety (#400) (de50c53)
- populate cache balances during rewards/penalties processing (#474) (5bf23dc)
- re-expose sizes (#369) (64b81f3)
- remove
slashValidatorgating on active status (#448) (d319a0d) - ssz: drop redundant default-init pass in fixed-list decode (#468) (0c757be)
- ssz: publish child cache entries after lookup (#565) (21e78c9)
- state transition binding exports (#456) (895982c)
- state-transition: group-check signature sets (#515) (42774e9), closes #502
- state-transition: isolate epoch step cache mutations (#535) (a83741a)
- state-transition: repair Pool.init call broken by #346×#367 merge skew (#394) (b42944f)
- various fixes around config (#433) (c4f082c)
- bindings: drop TS BLS comparison benches and report benchmarks on PRs (#552) (c909c6f)
- bls: add cache-aware signature verifier (#562) (063857e)
- bls: bypass worker queue for small batches (#553) (3f8a6df)
- epoch: replace AutoHashMap with array lookup in reward/penalty caches (#286) (e4e181b), closes #243
- pmt: chunked-leaf packing for basic lists and container_struct (#346) (ba156c4)
- allocate
AsyncAggRandDatain one obj (#384) (459750f) - bindings/pubkeys: simplify allocation strategy for aggregate (#518) (b82750f)
- bindings: rename blst Lifecycle to State (#516) (0a9c179)
- bindings: use zapi js.io() instead of local io module (#469) (2b34cc0)
- bindings: wake only required number of workers (#383) (1db57f1)
- bls: allocations around VMAS (#395) (dfda58c)
- bls: clean up bls (#398) (e0f3b9b)
- bls: remove need for tracking results for verifyMultipleAggregateSignatures (#389) (6fe5c3f)
- bls: remove single-threaded fallback (#390) (e057713)
- clock: single public Clock; internalize SlotClock (#463) (fbab1fa)
- make XXXDecisionRoot fns return
js.String(#342) (aef4420) - move shuffle into swap_or_not_shuffle module (#558) (e56efb2)
- pubkeys: centralize the process-wide cache (#522) (dc9669d)
- avoid slow tests in AGENTS.md (#546) (c60f2a9)
- bump zapi to include musl build (#485) (0b488cc)
- ci: pin github actions with sha hashes (#507) (167b8f5)
- deprecate unused blst APIs (#575) (7b547fa)
- deps: bump zapi v2.1.0 -> v2.2.0 (#376) (0c240d8)
- deps: bump zbuild (#403) (e2545de)
- deps: compile blst with ReleaseFast (#391) (753a896)
- deps: update zapi to 3.1.0 (#483) (f3e5827)
- deps: use zapi v2.1.0 (#372) (88f403a)
- disable gemini auto code review (#382) (63e42a4), closes #380
- docs: add comments section in AGENTS.md (#566) (0c09750)
- move state clones out of benchmark run functions (#324) (e4035de)
- prepare 1.0.0 release (#576) (20b657b)
- release v0.1.2-rc.3 (#370) (e4fc551)
- release: 0.1.2-rc.2 (#365) (7046128)
- release: v0.1.2-rc.10 (#477) (9a4fad5)
- release: v0.1.2-rc.4 (#373) (09468f1)
- release: v0.1.2-rc.5 (#374) (f344efa)
- release: v0.1.2-rc.6 (#375) (bdf5b67)
- release: v0.1.2-rc.8 (#401) (06f91c2)
- release: v0.1.2-rc.9 (#404) (6024800)
- remove merge transition code (#359) (09b175d)
- remove stale epoch cache TODOs (#534) (27a547a)
- rename era shortHistoricalRoot to shortEraRoot (#473) (c75a4d3)
- scripts: build bindings with preset (#434) (a1b5ef7)
- silence debug log when used in release builds (#486) (c5377d7)
- support dev workflow (#364) (fcb9a78)
- update gloas types to align with the latest specs (#431) (1f065b5)
- update spec test version to v1.7.0-alpha.11 (#451) (5875660)
- update spec-test-version: v1.6.0-beta.2 -> v1.7.0-alpha.10 (#441) (f932b1c)
- update zapi to 4.0.0 (#571) (de8e3fd)