Ecosystem metrics
- New Repos
- 8
- down 68.0%
- Commits
- 875
- up 19.9%
- Releases
- 11
- up 120.0%
- Contributors
- 59
- up 22.9%
- Merges
- 13
- down 53.6%
Activity Overview
Commits and releases over time
- Commits
- Releases
- Authors
Repository Explorer
No repositories match that filter.
10618 commits in all time
May 14, 2026 04:18 – Aug 12, 2026 04:18 UTC
Merge 6d7d771eab682c853503f4c2037cf909e24ea906 into 2bb186e0a27bcf0b321e530f202ed6b7ecc5d1f0
68bead22
pull/14/merge
1/27 ++ 0 --
Run the lib-gated security tests, which never ran in CI
Thirteen tests behind skipif(not _lib_available()) had never executed in
CI, on any event, since the workflow was written. The two jobs each had
half of what was needed and neither had both:
wire-format runs `pytest tests` (the whole suite) but never builds
the Falcon C library, so every lib-gated test skipped.
signature-kat builds the library on 3 OSes but ran only
`pytest tests/test_signature_kat.py`.
testnet-e2e builds the library, runs no pytest, and is manual-gated.
The intersection was empty. The never-run set is not incidental - it is
where the constitution's hardest crypto rules are actually enforced:
test_seal_wipes_private_key_buffer S2.3 zeroization
test_worker_stdout_carries_only_public_values S2.3 no secrets in output
test_isolated_result_has_no_private_key
test_isolated_require_locked_fails_closed_when_mlockall_unavailable
test_bad_build_fails_closed_without_consuming_cell
test_seal_signature_verifies_and_has_0xBA_header
test_second_seal_of_same_cell_raises
test_isolated_seal_produces_verifying_signature
test_isolated_second_seal_raises
+ 3 signature fuzzers and 1 interop cross-verify
Every green CI run has reported success while the private-key
zeroization check and the secret-leak-to-stdout check did not run.
This adds one step to signature-kat, the only job that builds the
library, running the full suite there.
The grep is not belt-and-braces, it is the substance: without it a failed
library build silently returns all thirteen tests to "skipped" and the job
goes green again, reintroducing this exact defect in the exact place it
was removed from. Passing must require that they RAN, not merely that
nothing failed. Same reasoning as TRELYAN_REQUIRE_KAT one step above,
which was applied to the KAT and never extended to its neighbours.
set -o pipefail so the tee does not swallow pytest's exit code.
Found by an adversarial sweep for claims that nothing mechanically
enforces; this was the highest-severity survivor.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6d7d771e
fix/lib-gated-security-tests-never-run
1/27 ++ 0 --
Merge eefb222d8b88bc9a994e560ef453a45155a0e8b2 into 2bb186e0a27bcf0b321e530f202ed6b7ecc5d1f0
f2841d3e
pull/13/merge
1/154 ++ 0 --
Make the Falcon "unreachable" risk acceptance enforceable
The pinned build (ce15e75b = tag v0.1.0, the release go-algorand vendors) has a confirmed size_t underflow in falcon_det1024_convert_compressed_to_ct giving an unbounded read. TRELYAN's documented position is accept-and- document, and it rests on exactly one fact: the SDK never binds that function. The pin is deliberately NOT bumped - ce15e75b is the network's release, and the untagged fix commit would make TRELYAN stricter than the deployed on-chain verifier for no reachable benefit. That makes the acceptance only as durable as the binding surface, and nothing was watching it. A later commit adding CT-format support would convert a documented non-issue into a live out-of-bounds read silently. sdk/tests/test_binding_surface.py derives the bound symbol set by parsing the AST of _bind() and compares it to a declared allowlist. Note this is NOT the tautology it resembles: the two sides come from independent sources - one parsed from the source, one the security policy - so it can fail. A constant compared against itself cannot. The correct response to a failure is to justify the binding, not to edit the allowlist green. A second test sweeps all shipped sources textually, catching dynamic access (getattr(lib, ...)) that the AST check on _bind() alone would miss. A third asserts the extraction itself works, so the guard cannot pass vacuously. Static only - no shared library is loaded, so it runs in the no-native-lib CI job. Verified by mutation, not just by passing: injecting lib.falcon_det1024_convert_compressed_to_ct into _bind() turns both guards red with the quarantine reason attached; reverting turns them green. Full SDK suite 24 passed / 18 skipped (skips are the native-lib tests). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
eefb222d
test/falcon-binding-surface-guard
1/154 ++ 0 --
Merge d4e82888209a0e5df25d3f7a84f159455f700636 into 2bb186e0a27bcf0b321e530f202ed6b7ecc5d1f0
4166cd24
pull/12/merge
4/259 ++ 9 --
Make deployment verification able to fail
The deployed application has not matched the committed contract since 2ec798e (2026-06-16), and nothing could observe it. Three defects combined: 1. ci.yml filtered on sdk/** only, so no change under contracts/ ever triggered CI. inscription.py was edited, merged and released without a single test run. 2. verify_trelyan.py pinned EXPECTED_APPROVAL_SHA512_256 - a constant copied from the deployed program - and compared it to the chain. The contract blocks Update/Delete (I1/I5), so the deployed bytecode is immutable and that comparison cannot fail. It was a tautology reported as a PASS, and the weekly schedule has been re-proving it every Monday since June. 3. The pin was recorded 2026-06-17, one day AFTER the divergence, so it captured the superseded value. Changes: - contracts/verify_deployment.py (new): derives the expected bytecode by assembling the committed TEAL artifact and compares it to the deployed program. No stored expected hash. Exit 1 = drift, exit 2 = could not check; an unreachable node must read as neither agreement nor drift, and an unexpected crash exits 2 rather than masquerading as a finding. --compile-url lets a reviewer split the trust so one endpoint does not both assemble and serve. --recompile re-derives the TEAL from inscription.py so the artifact is not trusted either. - ci.yml: add contracts/** to the path filters; add the contract-drift job. - verify_trelyan.py: separate the two claims that were conflated. The pinned constant now asserts only "the app was not replaced", which is what it can actually support. Source correspondence is checked properly when the committed artifact is present, and reported as NOT CHECKED when it is not, rather than being silently covered by the weaker check. Verified against live TestNet: drift detected (exit 1, committed source builds to 112fcad3 / 667 B, chain serves d24d9071 / 660 B). The MATCH path is reachable and was proven separately by round-tripping the deployed program through algod disassemble/assemble (exit 0, byte-identical). contract-drift and verify-live are both expected to be RED until the committed contract is redeployed. That red is the finding, not a broken job. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
d4e82888
fix/non-circular-deployment-verification
4/259 ++ 9 --
Merge d952b8ee2105f52c40d6b397a76db4e061cd01d4 into b0a3e71a91adfd1dfb97b5060d054618c2a147aa
6cf91489
pull/66/merge
10/1,149 ++ 1,264 --
chore(deps): Update all non-major dependencies
d952b8ee
renovate/all-non-major-dependencies
10/1,149 ++ 1,264 --
fix: USDC display on SendAssetScreen for fnet (#386)
337211c9
main
3/17 ++ 10 --
fix: USDC display on SendAssetScreen
9feb5743
bug-fix
3/17 ++ 10 --
Merge f86b979bac1da5e2e08e9ae7094ef6110b7e56a8 into 0e26b4b274a282ae273b68b29140379d39803971
f2e9af4c
pull/606/merge
1/73 ++ 3 --
chore(deps-dev): bump js-yaml from 4.1.1 to 4.3.1
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.3.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.1/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.1...4.3.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.3.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
f86b979b
dependabot/npm_and_yarn/js-yaml-4.3.1
1/73 ++ 3 --
Merge 07c02b794d45de4833b95f5186ca93bfaf60dd29 into 361d3066ffaca4241991cc6563403417bf562ecf
c4b03155
pull/23/merge
1/4,204 ++ 3,550 --
chore(deps): lock file maintenance
07c02b79
renovate/lock-file-maintenance
1/4,204 ++ 3,550 --
Merge febd339f8fbf30c877566b6d575f0f5595d99c00 into 361d3066ffaca4241991cc6563403417bf562ecf
1af84dd0
pull/32/merge
2/346 ++ 520 --
chore(deps): update commitlint monorepo to v21
febd339f
renovate/major-commitlint-monorepo
2/346 ++ 520 --
Merge ae1969d7bebd846a94b2bdb2e98ce3d053ec5f09 into 361d3066ffaca4241991cc6563403417bf562ecf
a7649b80
pull/17/merge
4/3,363 ++ 1,954 --
fix(deps): update all non-major dependencies
ae1969d7
renovate/all-minor-patch
4/3,363 ++ 1,954 --
Merge c38f6e67a6f266164d0346a584657fc4ebe48e2d into 361d3066ffaca4241991cc6563403417bf562ecf
c898af15
pull/30/merge
2/295 ++ 111 --
fix(deps): update dependency next to v15 [security]
c38f6e67
renovate/npm-next-vulnerability
2/295 ++ 111 --
Merge 7ca6cf1fb6d2acdbfaae9c6f308ad3bd1f6333b9 into 361d3066ffaca4241991cc6563403417bf562ecf
5da82294
pull/27/merge
2/11 ++ 6 --
chore(deps): update dependency postcss to v8.4.31 [security]
7ca6cf1f
renovate/npm-postcss-vulnerability
2/11 ++ 6 --