9574 commits in all time Apr 22, 2026 12:59 – Jul 21, 2026 12:59 UTC
cce sortition
Merge 0fdbb9de7efd338de8bdf49d43cf7c5df97fb083 into 9ffbb4eb8f7b0acb233c9e6dcc5d1fa030350a94
Git Commit 0774d8bb Branch pull/8/merge Document 4/987 ++ 1 --
cce sortition
correct ratio==1.0 docs: both walk outcomes occur; pin both branches
At ratio exactly 1.0 (only the all-0xff digest IS exactly 1.0; the rest of the top 2^-129 digest interval rounds up to it), the accumulated f128 CDF reaches exactly 1.0 only for some distributions, decided at ulp granularity: money=1954/exp=1500 stops at j=3 with total=1_999_999_999_999_964 but falls through with total=2_000_000_000_000_000, 36 more. Other distributions never get within half an ulp of 1.0 (p=1/2 with money=100 leaves cdf(99) = 1 - 2^-100, 2^28 ulps short) and the walk runs to money -- which, with the rounded threshold fixed at 1.0, is also the exact-CDF count, since the exact CDF is < 1 for every j < money. The previous text presented the early stop as the behavior and money as hypothetical; this had it backwards.

Reframe the f128 round-to-nearest rationale accordingly: RNE is required because every result must be the correctly-rounded 128-bit value to stay bit-identical to the 128-bit big.Float oracle; the ratio==1.0 edge is a consequence, not the requirement. Boost's double CDF -- evaluated independently per j via ibetac rather than accumulated -- can also saturate to 1.0 on its far coarser grid, potentially at a different (typically earlier) j, so old-vs-new divergence at this edge can be as large as money vs. a few.

TestSelectF128RatioExactlyOne now pins both branches and both boundaries: the hair-trigger total pair (j=3 vs money), the provably-stuck money=100/p=1/2 case, and the exact tie money=129/p=1/2 where true cdf(128) = 1 - 2^-129 sits precisely on the rounding midpoint and ties-to-even rounds it up to 1.0 (stops at j=128). The rounds-to-1.0 digest is constructed with exactly 129 leading one bits, the minimal such digest.
Git Commit 0fdbb9de Branch sortition-f128 Document 3/61 ++ 26 --
cce sortition
update comment
Git Commit 9902d6de Branch sortition-f128 Document 1/6 ++ 7 --
cce sortition
take expectedSize as uint64 in SelectF128
The committee size is a uint64 in the protocol (CommitteeSize(proto)); the float64 parameter only mirrored the C++ double signature and forced casts at every caller. Passing the exact integers lets each PMF-recurrence constant be a SINGLE round-to-nearest-even f128 divide of exact values -- q = (total-expected)/total and pq = expected/(total-expected) -- instead of stacking roundings through an intermediate float64 p (float64(totalMoney) is itself inexact above 2^53). Invalid probabilities (NaN/Inf/negative/fractional) become unrepresentable and p >= 1 is an exact integer comparison, so the differential fuzz no longer needs any input filtering.

f128FromFloat64 loses its only caller and is removed; sub and its norm192s helper likewise lose theirs (1-p is now a direct divide of exact integers, one rounding instead of two) and are removed along with their fuzz checks. The oracle mirrors the integer-quotient constants. Boost agreement is unchanged (200000/200000); the fuzz explored the new signature for 8.1M execs clean. Setup now does two divs instead of convert+sub+div: ~170ns/op (was ~159), still 1 alloc.
Git Commit da28510a Branch sortition-f128 Document 3/68 ++ 154 --
cce sortition
Merge a6645efe919fdda8c7c1555a01151c8cbb196406 into 9ffbb4eb8f7b0acb233c9e6dcc5d1fa030350a94
Git Commit 74fa6603 Branch pull/8/merge Document 4/1,039 ++ 1 --
cce sortition
fuzz sub and div in FuzzF128Ops, add BenchmarkSelectF128
sub was previously exercised only through the (1, p) operand shape in newBinomialF128; fuzz it across the full operand space, with seeds for the sticky/borrow path (exponent diff >= 65) and near-equal cancellation. Fuzz div alongside TestDivVsBig for ongoing corpus-driven coverage.

Also correct the newBinomialF128 comment: 1-p is correctly rounded rather than exact for p below ~2^-76 (it still matches the 128-bit big.Float oracle bit-for-bit, which is the property the fuzz checks). BenchmarkSelectF128 mirrors BenchmarkSortition for direct comparison with the cgo/Boost path.
Git Commit a6645efe Branch sortition-f128 Document 2/32 ++ 4 --
cce sortition
Merge 789f596f6b698b2524578c749ca038a547fe48e1 into 9ffbb4eb8f7b0acb233c9e6dcc5d1fa030350a94
Git Commit 18b08ffb Branch pull/8/merge Document 4/1,011 ++ 1 --
jannotti sortition
add f128 div, drop big.Float from newBinomialF128 entirely
Compute p/(1-p) with a native round-to-nearest-even f128 divide (128/128
via Knuth long division, used once per setup) instead of big.Float. With
the earlier native 1-p, newBinomialF128 is now heap-free apart from the
returned struct: 658ns/19allocs -> 195ns/1alloc, and the SelectF128 common
path drops 984ns/25allocs -> 535ns/7allocs (the remaining allocs are the
VRF->ratio big.Float work shared with Select).

div is fuzz-checked bit-identical to the big.Float oracle via SelectF128,
and TestDivVsBig cross-checks it directly against a 128-bit big.Float
divide on 5M broad random operands. Removes the now-dead f128FromBigFloat,
f128bigMask, and toBigFloat helpers and the math/big import.
Git Commit 789f596f Branch sortition-f128 Document 2/154 ++ 45 --
jannotti sortition
add f128 sub, compute 1-p natively in newBinomialF128
1-p is exact for any float64 p, so compute it with a native f128
subtraction instead of big.Float, dropping one f128FromBigFloat
conversion (~6 fewer allocs, ~17% off newBinomialF128). sub is done
exactly in a 192-bit field so it is correct under cancellation, and is
fuzz-checked bit-identical to the big.Float oracle.
Git Commit b646576d Branch sortition-f128 Document 1/88 ++ 4 --
cce sortition
add TestSelectF128RatioExactlyOne
Git Commit 0b07a39a Branch sortition-f128 Document 3/50 ++ 2 --
cce sortition
add direct 256-bit digest-to-f128 ratio conversion and passes an f128 ratio into the CDF walk
Git Commit 623a5673 Branch sortition-f128 Document 4/176 ++ 96 --
cce sortition
trim comments
Git Commit c4febea5 Branch sortition-f128 Document 2/4 ++ 7 --
cce sortition
Merge b479649d55beae63b40ec42a1a232d0e9e79f5a6 into 9ffbb4eb8f7b0acb233c9e6dcc5d1fa030350a94
Git Commit ba3bf47c Branch pull/8/merge Document 3/692 ++ 0 --
cusma specs
Merge d2dc150776bc50a44ba39240dfaedb3b3e3cbb28 into 71e152527831ea860cfe66888704ff5b84373609
Git Commit 652f0874 Branch pull/293/merge Document 7/182 ++ 43 --
cusma specs
docs: logic signature delegation
Git Commit d2dc1507 Branch pq-account Document 2/73 ++ 76 --
cce sortition
add FuzzF128Ops
Git Commit b479649d Branch sortition-f128 Document 3/86 ++ 3 --
cusma specs
docs: specify compressed signature format
Git Commit 0ccb5706 Branch pq-account Document 1/2 ++ 0 --
cusma specs
fix: broken link
Git Commit 87462cd6 Branch pq-account Document 1/1 ++ 1 --
mrcointreau algokit-lora
Merge 6d51ef7424fe371730f1d492e6f2996626e6c6cf into 0e26b4b274a282ae273b68b29140379d39803971
Git Commit 2e20ce01 Branch pull/602/merge Document 140/2,258 ++ 2,768 --
mrcointreau algokit-lora
fix: bump brace-expansion, js-yaml and shell-quote to resolve npm audit advisories
Git Commit 6d51ef74 Branch chore/v9-revert-and-modernize Document 1/12 ++ 12 --
mrcointreau algokit-lora
fix: restore populateAppCallResources so the Populate Resources button works on algokit-utils v9
Git Commit ca23a9a3 Branch chore/v9-revert-and-modernize Document 1/5 ++ 1 --
fix: map the axfer abi transaction type to AssetTransfer instead of AssetFreeze
Git Commit e6584227 Branch chore/v9-revert-and-modernize Document 1/1 ++ 1 --
jannotti go-algorand-sdk
Merge 399d2791fd5ac5f2c2df129d2d5c5e223efe2b59 into 22ce85e7fc59ba9cd0bcfcacbc3af588e267b679
Git Commit 92e43aad Branch pull/794/merge Document 4/229 ++ 27 --
Merge a5cf512084feda393cea50819d112902bce57935 into 22ce85e7fc59ba9cd0bcfcacbc3af588e267b679
Git Commit 7d6bd73c Branch pull/819/merge Document 2/3 ++ 3 --
wjbeau connect
refactor: use new transports correctly (#200)
Git Commit f092d6d6 Branch main Document 7/105 ++ 193 --