Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
553 commits
Select commit Hold shift + click to select a range
7c24347
chore(workspace): update changelogs (malbeclabs/doublezero-offchain#178)
vihu Nov 4, 2025
58f0a07
add pr template (malbeclabs/doublezero-offchain#179)
bgm-malbeclabs Nov 4, 2025
490367d
feat(validator-debt): add prom metrics (malbeclabs/doublezero-offchai…
bgm-malbeclabs Nov 6, 2025
6b1a220
fix(workspace): group imports per rust unstable standards (malbeclabs…
bgm-malbeclabs Nov 6, 2025
1fe58e1
feat(solana-cli): add `revenue-distribution harvest-2z` command (malb…
karl-dz Nov 6, 2025
359dda1
feat(solana-cli): add `revenue-distribution fetch distribution --view…
karl-dz Nov 7, 2025
178f772
fix(sentinel): retry on conn reset, one more time (malbeclabs/doublez…
vihu Nov 7, 2025
c122243
fix(goreleaser): Install binaries in /usr/bin/ instead of /usr/local/…
nikw9944 Nov 11, 2025
542c34c
move binaries to /usr/bin: update changelogs and systemd units (malbe…
nikw9944 Nov 11, 2025
58d3cff
fix(contributor-rewards): handle grace period for scheduling rewards …
vihu Nov 11, 2025
436cf6b
fix(workspace): version bump contributor-rewards, sentinel, and solan…
nikw9944 Nov 11, 2025
5cf4aaf
feat(solana-cli): add `--specific-dex` option for `harvest-2z` (malbe…
karl-dz Nov 11, 2025
3aecd3c
fix(solana-cli): correct default limit price for `convert-2z` and `ha…
karl-dz Nov 12, 2025
fc0b351
solana-cli: uptick to 0.2.2 (malbeclabs/doublezero-offchain#191)
karl-dz Nov 12, 2025
f0bdc8e
revenue-distribution: add null rewards root protection (malbeclabs/do…
karl-dz Nov 13, 2025
25e0be6
fix(revenue-distribution-admin): update migration command (malbeclabs…
karl-dz Nov 13, 2025
56259a5
revenue-distribution: fix swap balance in journal (malbeclabs/doublez…
karl-dz Nov 13, 2025
2812d28
Add scheduler app to manage debt lifecycle processes (malbeclabs/doub…
bgm-malbeclabs Nov 13, 2025
5ab09da
feat(validator-debt): use s3 bucket to fetch validator keys (malbecla…
vihu Nov 14, 2025
1d9e87d
fix(validator-debt): automate initialize distribution with new schedu…
bgm-malbeclabs Nov 14, 2025
171cd05
fix(contributor-rewards): make scheduler retry infinitely (malbeclabs…
vihu Nov 17, 2025
606beff
docs/rfc: add 0001_ALLOW_WRITING_OFF_DEBT_FOR_SAME_DISTRIBUTION.md (m…
karl-dz Nov 18, 2025
61701ad
feat(scheduler): automate calculate distribution (malbeclabs/doubleze…
bgm-malbeclabs Nov 19, 2025
43a4d4b
feat(scheduler): Automatically finalize distribution (malbeclabs/doub…
bgm-malbeclabs Nov 19, 2025
6762883
feat(solana-cli): add `revenue-distribution fetch validator-debts` co…
karl-dz Nov 19, 2025
c5b4275
fix(contributor-rewards): add Distribution merkle root check to idemp…
vihu Nov 20, 2025
98bc040
feat(contributor-rewards): add granular support to skip writes (malbe…
vihu Nov 20, 2025
7b0eabc
add action to deploy scheduler (malbeclabs/doublezero-offchain#2193) …
bgm-malbeclabs Nov 20, 2025
aca0054
feat(contributor-rewards): add support to send slack notifications (m…
vihu Nov 21, 2025
a0c58a0
feat(scheduler): add action to deploy scheduler (malbeclabs/doublezer…
bgm-malbeclabs Nov 21, 2025
fc0845a
docs(README): change build and test directions (malbeclabs/doublezero…
datasalaryman Nov 23, 2025
6f5e840
uptick crate version 0.3.0 (malbeclabs/doublezero-offchain#210)
karl-dz Nov 24, 2025
694c2cd
fix(contributor-rewards): track shapley output record address for sla…
vihu Nov 24, 2025
2e56a7e
feat(contributor-rewards): add snapshot flag to inspect shapley cmd (…
vihu Nov 24, 2025
536eeae
revenue-distribution: allow same-distribution debt write-offs (malbec…
karl-dz Nov 26, 2025
5febc40
workspace: update dependencies (malbeclabs/doublezero-solana#92)
karl-dz Nov 26, 2025
e510424
feat(contributor-rewards): add read-rewards command (malbeclabs/doubl…
vihu Nov 26, 2025
7dfa654
fix(sentinel): improve previous epoch slot evaluation (malbeclabs/dou…
karl-dz Nov 26, 2025
43ee9a2
fix(sentinel): fix leader schedule evaluation (malbeclabs/doublezero-…
karl-dz Nov 26, 2025
9f5c9b3
Add shared validator access validation and force flag (malbeclabs/dou…
RedaRahmani Nov 27, 2025
db73f5f
feat(solana-client-tools): add stdin support for keypair loading (mal…
vihu Dec 1, 2025
fc3856f
docs/rfc: add 0002_IMPROVED_DEBT_WRITE_OFF_TRACKING.md (malbeclabs/do…
karl-dz Dec 1, 2025
05ce470
feat(validator-debt): add overrides option to validator debt payment …
bgm-malbeclabs Dec 2, 2025
1291130
revenue-distribution: track debt write-offs in state (malbeclabs/doub…
karl-dz Dec 2, 2025
cb97ca0
workspace: update Solana crates to v3 (malbeclabs/doublezero-solana#94)
karl-dz Dec 2, 2025
4c2b8e0
workspace: uptick programs to v0.2.0 (malbeclabs/doublezero-solana#95)
karl-dz Dec 2, 2025
4f4f493
passport: update CHANGELOG (malbeclabs/doublezero-solana#96)
karl-dz Dec 2, 2025
5800f16
fix(workspace): update `doublezero-solana` crates to use revenue-dist…
karl-dz Dec 3, 2025
5245371
workspace: add verifiable builds (malbeclabs/doublezero-solana#97)
karl-dz Dec 3, 2025
bfedcf1
feat(validator-debt): better summarized debt (malbeclabs/doublezero-…
bgm-malbeclabs Dec 3, 2025
a9f68d3
feat(scheduler): add prom metrics (malbeclabs/doublezero-offchain#207)
bgm-malbeclabs Dec 3, 2025
927423d
ci: changelog reminder (malbeclabs/doublezero-offchain#221)
snormore Dec 3, 2025
5b14fac
ci: changelog reminder pass instead of skip when label is present (ma…
snormore Dec 3, 2025
9037cfa
fix(sentinel): improve retry handling for transient RPC errors (malbe…
vihu Dec 4, 2025
7d75c89
fix: typo in LICENSE (malbeclabs/doublezero-offchain#223)
karl-dz Dec 4, 2025
dc215e4
add docs/audits (malbeclabs/doublezero-solana#98)
karl-dz Dec 4, 2025
ecdabff
workspace: add docs/audits (malbeclabs/doublezero-offchain#224)
karl-dz Dec 4, 2025
74e8caf
client-tools: remove `tracing` feature (malbeclabs/doublezero-offchai…
karl-dz Dec 12, 2025
3ae4eab
chore: bump stable rust to 1.92.0 (malbeclabs/doublezero-offchain#227)
vihu Dec 16, 2025
99ecc69
feat(validator-debt): add debt write-off logic (malbeclabs/doublezero…
karl-dz Dec 16, 2025
f991b50
feat(solana-admin-cli/revenue-distribution): update migration command…
karl-dz Dec 17, 2025
c57c658
revenue-distribution: debt write off activation (malbeclabs/doublezer…
karl-dz Dec 17, 2025
9d1ee95
revenue-distribution: uptick to version 0.2.1 (malbeclabs/doublezero-…
karl-dz Dec 17, 2025
3ac7316
fix(validator-debt): track eligibility by vote account instead of ide…
vihu Dec 17, 2025
cdc2d94
feat(solana-cli): add `--fund-outstanding-debt` to `revenue-distribut…
karl-dz Dec 18, 2025
f653583
feat(solana-cli): add memos to `relay distribute-rewards` and `valida…
karl-dz Dec 18, 2025
97c725a
solana-cli: uptick version to 0.3.1 (malbeclabs/doublezero-offchain#233)
karl-dz Dec 18, 2025
59a48a8
feat(contributor-rewards): add export shapley command (malbeclabs/dou…
vihu Dec 19, 2025
9158cdf
validator-debt: enable debt write-off at activation (malbeclabs/doubl…
karl-dz Dec 19, 2025
4117901
validator-debt: fix local uncollectible debt tracking for write-off l…
karl-dz Dec 29, 2025
a250f83
solana-cli: handle missing fee fields for `harvest-2z` Jupiter quotes…
karl-dz Dec 30, 2025
9005c03
solana-cli: uptick to version 0.3.2 (malbeclabs/doublezero-offchain#241)
karl-dz Dec 30, 2025
0321a3a
feat(scheduler): refactor and remove private functions (malbeclabs/do…
bgm-malbeclabs Jan 5, 2026
88d0d8a
feat(validator-debt): parallelize debt collection (malbeclabs/doublez…
bgm-malbeclabs Jan 6, 2026
041a78f
feat(solana-cli): migrate `harvest-2z` Jupiter integration to api.jup…
RedaRahmani Jan 6, 2026
689e105
feat(validator-debt): add finalize rewards and sweep tokens to initia…
karl-dz Jan 8, 2026
a2a675a
feat(validator-debt): filter results, remove loop to calculate result…
bgm-malbeclabs Jan 8, 2026
a92098b
docs/rfc: add 0003_BAD_DEBT_RECOVERY_AND_ERRONEOUS_DEBT_ACCOUNTING.md…
karl-dz Jan 9, 2026
d5223af
feat(scheduler): skip rows with no successful collections (malbeclabs…
bgm-malbeclabs Jan 9, 2026
7223aee
validator-debt: finalize zero debt (malbeclabs/doublezero-offchain#248)
karl-dz Jan 12, 2026
0daa037
validator-debt: bail early when Revenue Distribution is paused (malbe…
RedaRahmani Jan 13, 2026
bc80d1a
validator-debt: use vote key from past (malbeclabs/doublezero-offchai…
karl-dz Jan 14, 2026
e5b0677
feat(validator-debt): parallelize finalize distribution (malbeclabs/d…
bgm-malbeclabs Jan 14, 2026
3facd7d
scheduler: update CHANGELOG.md (malbeclabs/doublezero-offchain#251)
karl-dz Jan 14, 2026
7eb1aea
(validator-debt): align Slack summary totals with displayed rows (mal…
RedaRahmani Jan 21, 2026
1309344
feat(validator-debt): remove dz_ledger as argument (malbeclabs/double…
bgm-malbeclabs Jan 21, 2026
abe6263
(solana-cli): implement revenue-distribution fetch contributor-reward…
RedaRahmani Jan 21, 2026
6908f71
fix(solana-cli): show debt write-off activation epoch in fetch config…
RedaRahmani Jan 26, 2026
73b052c
docs/rfc: revise rfc-0003 (malbeclabs/doublezero-solana#102)
karl-dz Jan 28, 2026
12fd6d0
sentinel: default leader schedule lookahead 2→1 (malbeclabs/doublezer…
RedaRahmani Jan 29, 2026
71897da
fix(solana-cli): sum delinquent debt for `revenue-distribution fetch …
karl-dz Jan 29, 2026
202aa17
feat(validator-debt): e2e test script (malbeclabs/doublezero-offchain…
bgm-malbeclabs Jan 29, 2026
3c7bf83
fix(goreleaser): publish packages to cloudsmith doublezero-testnet re…
nikw9944 Feb 2, 2026
2744cf2
bugfix(validator-debt): inclusive range for DZ epochs (malbeclabs/dou…
bgm-malbeclabs Feb 5, 2026
07f1ea8
chore(valdiator-debt, scheduler): improve test coverage (malbeclabs/…
bgm-malbeclabs Feb 11, 2026
db4be0e
docs/rfc: add 0004_ALLOW_DIRECT_2Z_PAYMENTS_FOR_NETWORK_RESOURCES (ma…
karl-dz Feb 11, 2026
e9b32fb
revenue-distribution: fix initialize-distribution interface (malbecla…
karl-dz Feb 12, 2026
8da8fd8
validator-debt: initialize-distribution interface change (malbeclabs/…
karl-dz Feb 13, 2026
a725bf7
fix credo warnings (malbeclabs/doublezero-offchain#267)
bgm-malbeclabs Feb 13, 2026
5a02903
revenue-distribution: handle direct 2Z payments to Journal's ATA (mal…
karl-dz Feb 13, 2026
a078f73
feat: billing sentinel for tenant payment status monitoring (malbecla…
vihu Feb 13, 2026
4904cee
bugfix(validator-debt): Ensure debt is finalized before collection (m…
bgm-malbeclabs Feb 13, 2026
8a1f5ef
bugfix(scheduler): result returns value only, not ok tuple (malbeclab…
bgm-malbeclabs Feb 19, 2026
85933c8
Update changelog for v0.1.10 (malbeclabs/doublezero-offchain#271)
bgm-malbeclabs Feb 19, 2026
25095c8
solana-cli: add configure-contributor-rewards CLI command (malbeclabs…
RedaRahmani Feb 23, 2026
8997082
feat(sentinel): auto-manage multicast publishers (malbeclabs/doubleze…
bgm-malbeclabs Feb 26, 2026
6f476ca
feat(contributor-rewards): bump network-shapley to v0.4.0 (malbeclabs…
vihu Mar 3, 2026
418e38a
feat(contributor-rewards): add on-chain reward distribution (malbecla…
vihu Mar 4, 2026
9efd115
chore(workspace): fixup versions and CHANGELOG (malbeclabs/doublezero…
vihu Mar 4, 2026
eba8d6f
fix(contributor-rewards): stop infinite retry when recipient accounts…
vihu Mar 4, 2026
dda82d9
reservation: add SDK module with instruction builders and account par…
martinsander00 Mar 5, 2026
e93ffe8
reservation: add CLI commands (initialize-seat, withdraw, list, price…
martinsander00 Mar 6, 2026
2096fae
reservation: update SDK and CLI for on-chain USDC custody changes (ma…
martinsander00 Mar 6, 2026
a5ab660
fix(sentinel): associate access passes with solana tenant PDA (malbec…
juan-malbeclabs Mar 6, 2026
7032efa
reservation: fix execution_controller writable flag for InitializeCli…
martinsander00 Mar 6, 2026
c6849a4
feat(validator-debt): abort calculation if fees are zero (malbeclabs/…
bgm-malbeclabs Mar 11, 2026
0977e8c
revenue-distribution: fix zero-fee handling (malbeclabs/doublezero-so…
karl-dz Mar 13, 2026
54fabb4
revenue-distribution: update CHANGELOG (malbeclabs/doublezero-solana#…
karl-dz Mar 13, 2026
ee3605e
bugfix(workflow): fix broken indentation (malbeclabs/doublezero-offch…
bgm-malbeclabs Mar 13, 2026
11e0258
reservation: combine initialize-seat and fund into pay command (malbe…
martinsander00 Mar 16, 2026
fd5d423
feat(contributor-rewards): add support for distribution slack notific…
vihu Mar 16, 2026
ac07e21
reservation: rename command to shreds (malbeclabs/doublezero-offchain…
martinsander00 Mar 16, 2026
924a725
cli: add --now flag for instant seat allocation (malbeclabs/doublezer…
martinsander00 Mar 17, 2026
8ac9aa0
cli: add --unsafe-now flag to withdraw for instant seat withdrawal (m…
martinsander00 Mar 18, 2026
df26696
sdk: align instruction discriminators with onchain program (malbeclab…
martinsander00 Mar 18, 2026
9d35322
sdk: make execution controller writable for instant withdrawal (malbe…
martinsander00 Mar 18, 2026
3303563
sdk: make client-seat account writable (malbeclabs/doublezero-offchai…
martinsander00 Mar 19, 2026
2349c4f
cli: add guards for pay and withdraw commands (malbeclabs/doublezero-…
martinsander00 Mar 19, 2026
f740b5e
cli: enrich price command with device status and seat info (malbeclab…
martinsander00 Mar 20, 2026
b73bed2
cli: rework shreds list command for better trader UX (malbeclabs/doub…
martinsander00 Mar 20, 2026
d3b5685
cli: rework shreds list command for better trader UX (malbeclabs/doub…
martinsander00 Mar 20, 2026
d89b243
cli: fix reservation price --json outputting text (malbeclabs/doublez…
martinsander00 Mar 20, 2026
38fb8d4
cli: make instant seat allocation and withdrawal the default (malbecl…
martinsander00 Mar 23, 2026
c2ca414
shreds: add --dz-ledger-url flag to override dz ledger rpc endpoint (…
packethog Mar 23, 2026
c484625
cli: warn when paying for shreds late in epoch (malbeclabs/doublezero…
packethog Mar 23, 2026
e84a429
cli: fix est epochs unit mismatch in shreds list (malbeclabs/doubleze…
martinsander00 Mar 23, 2026
cc7b51b
cli: fix settled seats and available seats in price command (malbecla…
martinsander00 Mar 23, 2026
f8eb59f
shreds pay: skip instant allocation when re-funding active seat (malb…
packethog Mar 23, 2026
eec29e7
cli: add shreds payments command (malbeclabs/doublezero-offchain#307)
martinsander00 Mar 24, 2026
ad40ca5
fix: seed journal and fills registry in localnet fork (malbeclabs/dou…
snormore Mar 24, 2026
0209124
refactor: rename reservation to shred subscription (malbeclabs/double…
snormore Mar 24, 2026
94b4a41
fix: update default shred subscription program id (malbeclabs/doublez…
snormore Mar 24, 2026
9b21503
feat: add release candidate and install scripts (malbeclabs/doublezer…
snormore Mar 24, 2026
0568cee
fix: correct est epochs paid calculation in shreds list (malbeclabs/d…
snormore Mar 24, 2026
c282a88
fix: use per-seat price override and correct unit conversion in shred…
snormore Mar 25, 2026
fec0e60
refactor: replace multicast group codes with pubkeys in sentinel (mal…
snormore Mar 25, 2026
0b6a19d
cli: block shreds pay when device has no available seats (malbeclabs/…
martinsander00 Mar 25, 2026
39e7fd3
feat: derive network defaults from -u moniker in shreds CLI (malbecla…
martinsander00 Mar 26, 2026
0857008
cli: fix broken pipe panic when piping output to head/grep (malbeclab…
martinsander00 Mar 27, 2026
1aa9bed
perf: replace get_program_accounts scans with PDA lookups in shreds p…
martinsander00 Mar 30, 2026
16b3604
rpc: add try_fetch_multiple_accounts to DoubleZeroLedgerConnection (m…
martinsander00 Mar 30, 2026
eca359d
validator-debt: conditionally sweep 2Z based on balance (malbeclabs/d…
karl-dz Mar 31, 2026
80eddbc
revenue-distribution: set distribution economic burn rate (malbeclabs…
karl-dz Mar 31, 2026
431ca9b
solana-client-tools: match DZ ledger testnet genesis hash (malbeclabs…
karl-dz Apr 1, 2026
6bb52e3
cli: hide devices with no remaining seats in shreds price by default …
packethog Apr 2, 2026
17dc6ea
cli: remove experimental feature flag from shreds subcommands (malbec…
packethog Apr 2, 2026
ca354d4
solana-cli: fix `fetch validator-debts` record logic (malbeclabs/doub…
karl-dz Apr 2, 2026
6eb7e92
cli: check active service before shreds withdraw (malbeclabs/doubleze…
martinsander00 Apr 2, 2026
e05d90b
feat(solana-client-tools): meaningful keypair errors (malbeclabs/dou…
bgm-malbeclabs Apr 2, 2026
746f34a
fix(solana-client-tools): fix transaction batch size checks to includ…
snormore Apr 2, 2026
301d541
fix(solana-cli): use tenure_epochs to detect active seats in shreds p…
packethog Apr 3, 2026
8e2da52
solana-cli: fix env USDC mint (malbeclabs/doublezero-offchain#333)
karl-dz Apr 3, 2026
48bed4d
feat(solana-client-tools): add memos, instruction sizing (malbeclabs/…
bgm-malbeclabs Apr 3, 2026
97ba055
solana-cli: support env var fallback for cli args (malbeclabs/doublez…
packethog Apr 3, 2026
17d4818
workspace: uptick tag to revenue-distribution/v0.3.3 (malbeclabs/doub…
karl-dz Apr 3, 2026
ab9ad7e
cli: allow shreds pay top-up when multicast user is owned by shred or…
packethog Apr 3, 2026
76c67e2
solana-cli: uptick crate version to 0.5.0 (malbeclabs/doublezero-offc…
karl-dz Apr 3, 2026
81ef798
solana-cli: add validator-client-rewards shreds command (malbeclabs/d…
martinsander00 Apr 6, 2026
6e5b197
shreds pay: block duplicate client IP across devices (malbeclabs/doub…
packethog Apr 7, 2026
61446cc
cli: default shreds list to funder keypair, add --all and -k flags (m…
martinsander00 Apr 7, 2026
b4960cd
programs: refactor monolithic tests to multi-scenario tests (malbecla…
karl-dz Apr 7, 2026
e1300f4
solana-cli: prepend CheckCliVersion to shreds write transactions (mal…
packethog Apr 8, 2026
6f928a4
revenue-distribution: withdraw deposited SOL (malbeclabs/doublezero-s…
karl-dz Apr 8, 2026
e213197
solana-cli: add `--withdraw-excess-balance` to `revenue-distribution …
karl-dz Apr 10, 2026
b108363
solana-cli: uptick crate to v0.5.1 (malbeclabs/doublezero-offchain#344)
karl-dz Apr 10, 2026
7ea370d
solana-cli: uptick crate to v0.5.2 (malbeclabs/doublezero-offchain#345)
karl-dz Apr 10, 2026
088df71
solana-cli: shreds list falls back to all seats when no default keypa…
martinsander00 Apr 13, 2026
72b20ae
solana-cli: shreds withdraw supports stale seats and --funds-only (ma…
martinsander00 Apr 14, 2026
d43b1db
revenue-distribution: register rewards integrations (malbeclabs/doubl…
martinsander00 Apr 16, 2026
8553227
revenue-distribution: simplify already-registered rejection (malbecla…
martinsander00 Apr 16, 2026
e874b2c
solana-cli: uptick crate to v0.5.3 (malbeclabs/doublezero-offchain#348)
martinsander00 Apr 16, 2026
ce70f50
revenue-distribution: scaffold integration harvesting (malbeclabs/dou…
martinsander00 Apr 21, 2026
bb896d9
feat(contributor-rewards): update demand for new inputs (malbeclabs/d…
bgm-malbeclabs Apr 21, 2026
08d36bd
solana-cli: shreds pay integrates prorated instant seat allocation (m…
martinsander00 Apr 21, 2026
62679ef
solana-cli: shreds withdraw uses prorated instruction when onchain fl…
martinsander00 Apr 22, 2026
2192eae
revenue-distribution: track collected integrations via inline bitmap …
martinsander00 Apr 23, 2026
56253a1
revenue-distribution: add CollectIntegrationRewards instruction (malb…
martinsander00 Apr 24, 2026
9648335
revenue-distribution: fix CHANGELOG (malbeclabs/doublezero-solana#118)
karl-dz Apr 24, 2026
824e1d8
workspace: bump revenue-distribution pin to v0.3.5 (malbeclabs/double…
martinsander00 Apr 25, 2026
f157532
fix(contributor-rewards): subscriber decoding (malbeclabs/doublezero-…
vihu May 1, 2026
450198c
revenue-distribution: validate destination authority in WithdrawInteg…
martinsander00 May 4, 2026
acf2cf9
revenue-distribution: uptick crate version to 0.3.6 (malbeclabs/doubl…
karl-dz May 4, 2026
2cda2c1
workspace: uptick tag to revenue-distribution/v0.3.6 (malbeclabs/doub…
karl-dz May 4, 2026
1de33a2
chore(contributor-rewards): Bump contributor-rewards to v0.5.1 (malbe…
vihu May 4, 2026
4001a22
solana-cli: shreds withdraw bails when instant seat allocation reques…
martinsander00 May 5, 2026
c365b55
feat(contributor-rewards): make demand parameters configurable (malbe…
vihu May 5, 2026
e6e9531
fix(contributor-rewards): update shapley input defaults (malbeclabs/d…
vihu May 7, 2026
4192518
revenue-distribution: migrate distributions to fix integrations_count…
karl-dz May 10, 2026
7038990
fix(contributor-rewards): distribution summary reporting (malbeclabs/…
vihu May 14, 2026
e77538d
feat(solana-cli): allow validator client teams to claim rewards (malb…
bgm-malbeclabs May 15, 2026
a61a933
feat(doublezero-solana): either oracle or user owned (malbeclabs/doub…
bgm-malbeclabs May 15, 2026
504448b
feat(solana-cli): add validator rewards commands (malbeclabs/doubleze…
bgm-malbeclabs May 19, 2026
296b5dd
cli: drop prorated bypass on min-price preflight (malbeclabs/doubleze…
martinsander00 May 19, 2026
28ec2ae
feat(contributor-rewards): add configurable public latency multiplier…
vihu May 20, 2026
12afe28
docs(contributor-rewards): document reward calculation methodology (m…
vihu May 20, 2026
0ef0d2c
release(contributor-rewards): prep v0.5.5 (malbeclabs/doublezero-offc…
vihu May 20, 2026
b5baf01
solana-cli: uptick crate to v0.5.5 (malbeclabs/doublezero-offchain#372)
martinsander00 May 21, 2026
c6379ac
feat(solana-cli): tighten up some ergonomics (malbeclabs/doublezero-o…
bgm-malbeclabs May 26, 2026
5d99b83
solana-client-tools: tolerate missing/invalid accounts in try_fetch_m…
martinsander00 May 26, 2026
dcea468
solana-cli: distribute pending rewards on validator configure (malbec…
martinsander00 May 29, 2026
2e34586
solana-cli: uptick crate to v0.5.6 (malbeclabs/doublezero-offchain#376)
martinsander00 May 29, 2026
584c1a1
fix(contributor-rewards): bump network shapley (malbeclabs/doublezero…
vihu May 31, 2026
0159f5e
solana-cli: remove invalid written-off debt sanity check from fetch v…
karl-dz Jun 2, 2026
0464709
refactor(passport): extract passport verbs into doublezero-passport-c…
juan-malbeclabs Jun 2, 2026
093117a
client-tools: add Solana devnet (-ud) network environment (malbeclabs…
karl-dz Jun 9, 2026
b5ce8d8
solana-cli: publisher-rewards per-epoch status command (malbeclabs/do…
martinsander00 Jun 9, 2026
45fb884
solana-cli: uptick crate to v0.5.7 (malbeclabs/doublezero-offchain#385)
martinsander00 Jun 9, 2026
5ddea5e
solana-admin-cli/revenue-distribution: add initialize-rewards-integra…
karl-dz Jun 10, 2026
47a9f57
solana-client-tools: add a shared create-ATA compute-unit helper (mal…
karl-dz Jun 11, 2026
d13220b
chore(deps): converge SDK family on client/v0.25.1 (malbeclabs/double…
juan-malbeclabs Jun 12, 2026
0302aa6
chore(contributor-rewards): bump dz client to v0.27.1 (malbeclabs/dou…
vihu Jun 12, 2026
18011e7
client-tools: derive memo compute units from memo length (malbeclabs/…
karl-dz Jun 15, 2026
4ae4868
solana-cli: shreds list --all returns only active seats (malbeclabs/d…
martinsander00 Jun 26, 2026
ac977d9
solana-cli: claim all validator-client-rewards holdings by default (m…
martinsander00 Jun 30, 2026
f42cd16
solana-cli: bump version to 0.5.9 (malbeclabs/doublezero-offchain#394)
martinsander00 Jun 30, 2026
3fa9450
solana-cli: shreds withdraw compares active_epoch against last_settle…
nikw9944 Jul 6, 2026
ea6f437
solana-cli: remove testnet shred-subscription DZ Ledger special-case …
nikw9944 Jul 6, 2026
1b9bfe1
deps: migrate workspace to Solana 3.0 and ship static musl binaries (…
ben-dz Jul 8, 2026
4ab67eb
refactor(solana-cli): RFC-20 verb contract for all CLI verbs (malbecl…
ben-dz Jul 8, 2026
6231ef6
deps: bump malbeclabs/doublezero pins to malbeclabs/doublezero-offcha…
bgm-malbeclabs Jul 10, 2026
dacfcce
contributor-rewards: backfill User.feed_pk in snapshot compat migrati…
bgm-malbeclabs Jul 10, 2026
3ca3d0b
solana-cli: shreds pay --operator-key (operator-key split, buyer CLI)…
bgm-malbeclabs Jul 16, 2026
0850a5e
Revert shreds pay --operator-key (operator-key split buyer CLI) (malb…
martinsander00 Jul 20, 2026
839ead7
deps: bump malbeclabs/doublezero pins to client/v0.31.0 (malbeclabs/d…
ben-dz Jul 22, 2026
98a031b
contributor-rewards: warn and skip undecodable serviceability account…
ben-dz Jul 24, 2026
c424bf4
shreds: price the pay preflight from last_settled_epoch (malbeclabs/d…
ben-dz Jul 27, 2026
db6ca6b
shreds pay: confirm the fastshreds.com transition before paying (malb…
kevin-dz Aug 5, 2026
f4f32f3
solana-client-tools: add squads module for Squads v4 vault support (m…
karl-dz Aug 10, 2026
e293786
solana-client-tools: add a payload budget and a checked encoder for S…
karl-dz Aug 14, 2026
70a36ce
solana-sdk: mirror ValidatorClientRewards as a zero-copy struct (malb…
karl-dz Aug 14, 2026
b15ff97
remove CODEOWNERS (malbeclabs/doublezero-solana#124)
karl-dz Aug 17, 2026
c454f5b
revenue-distribution: reject null-root rewards finalize while 2Z is o…
nikw9944 Aug 18, 2026
ef958fe
contributor-rewards, solana-cli, validator-debt: fix the hardcoded 40…
nikw9944 Aug 24, 2026
465f028
repo: point this repo and its doublezero-solana deps at the malbeclab…
bgm-malbeclabs Aug 26, 2026
e4e57ac
repo: point the doublezero-offchain install and the RFC link at malbe…
bgm-malbeclabs Aug 26, 2026
300c886
contributor-rewards: fail the tick instead of saving a snapshot with …
nikw9944 Aug 27, 2026
64f5d13
contributor-rewards: add golden tests covering reward values (malbecl…
bgm-malbeclabs Aug 27, 2026
3d1f934
repo: import doublezero-offchain under offchain/ with its history
bgm-malbeclabs Aug 28, 2026
0e0a2d2
repo: import doublezero-solana under solana/ with its history
bgm-malbeclabs Aug 28, 2026
8bb4791
workspace: exclude the imported trees and stop dependabot editing them
bgm-malbeclabs Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 12 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,19 @@ updates:
- "go.uber.org/mock"

- package-ecosystem: "cargo"
# Enumerated rather than "**/*" because that glob would also pick up
# offchain/Cargo.toml and solana/Cargo.toml, and no job in this repo builds
# either tree yet. A grouped update would edit their lockfiles, merge green
# with nothing compiled, and diverge them from the repos that still release
# them. These five are every directory that has its own lockfile, which is
# what the glob resolved to before the import. Step 4 folds offchain into
# the root workspace, at which point "/" covers it.
directories:
- "**/*"
- "/"
- "/sdk/geolocation/testdata/fixtures/generate-fixtures"
- "/sdk/revdist/testdata/fixtures/generate-fixtures"
- "/sdk/serviceability/testdata/fixtures/generate-fixtures"
- "/sdk/telemetry/testdata/fixtures/generate-fixtures"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ All notable changes to this project will be documented in this file.
- CI
- The new `release-bump-dry-run` job dry-runs the release version bump on every PR, so a `cargo update --workspace` dependency rebind fails on the PR that causes it instead of a week later at release time, as it did for v0.37.0 (#4213, fixed in #4219). Advisory until its context is added to the `main` ruleset. (#4220)
- Add `.cursor/BUGBOT.md` to enable Cursor review. This is an experiment. (malbeclabs/infra#2387)
- Repo
- `doublezero-offchain` and `doublezero-solana` are imported into this repo, with their history and all 126 of their release tags, under new top-level `offchain/` and `solana/` directories. Nothing that was already here moves. Both trees stay excluded from the root Cargo workspace and keep their own `Cargo.toml`, `Cargo.lock` and `rust-toolchain.toml`, so they build exactly as they did in their own repos, and their workflows do not run yet. Imported commit messages are rewritten so that a reference that meant a pull request in a source repo now names that repo explicitly. `.github/dependabot.yml` enumerates its cargo directories instead of globbing them, so no update lands in a tree this repo does not build. The source repos are still the ones that release. (#4240)
- CLI
- `doublezero connect` with no mode provisions everything the server's AccessPass authorizes in one run — the IBRL tunnel plus a multicast tunnel joined to the groups or purchased feeds the pass grants — instead of requiring the operator to know their entitlements and issue `connect ibrl` and `connect multicast` separately. Each mode is reported on its own line; one the pass does not cover is skipped with the reason rather than failing the run. The two are attempted independently, so a failure in one keeps the other's work and names the command that finishes the rest, and the run exits non-zero if an attempted mode failed or the pass authorized nothing. Epoch expiry still gates unicast only, so an expired pass connects multicast and skips IBRL. The bare form also enables the reconciler up front, so a run that provisions nothing still leaves the daemon managing tunnels, and takes `--tenant`/`--allocate-addr` for its IBRL half (`connect ibrl` keeps its own positional tenant and `-a`). `connect ibrl` and `connect multicast` are unchanged.
- `doublezero balance` takes an optional address, so `doublezero balance <pubkey>` reports that account's balance while the bare form keeps reporting the configured keypair's. Querying another account needs no local keypair. An address that was never funded prints `0 Credits` instead of failing the account lookup.
Expand Down
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ members = [
]
default-members = []
exclude = [
# Both trees keep their own workspace, lockfile and toolchain until step 4
# of the monorepo migration merges them in.
"offchain",
"solana",
"sdk/revdist/testdata/fixtures/generate-fixtures",
"sdk/serviceability/testdata/fixtures/generate-fixtures",
"sdk/telemetry/testdata/fixtures/generate-fixtures",
Expand Down
176 changes: 176 additions & 0 deletions offchain/.githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
#!/bin/bash

# Pre-commit hook:
# 1. Checks CHANGELOG.md is updated when files in a crate/directory change
# 2. Runs Rust checks (fmt, clippy) when Rust files change
# 3. Runs Elixir checks (compile warnings, format, credo, tests) when Elixir files change
#
# To install this hook, run from the repo root:
# git config core.hooksPath .githooks
#
# Or to skip the check for a specific commit:
# git commit --no-verify

set -e

# Get list of staged files (excluding deleted files)
STAGED_FILES=$(git diff --cached --name-only --diff-filter=d)

if [ -z "$STAGED_FILES" ]; then
exit 0
fi

# ─── Rust checks ────────────────────────────────────────────────────────────────
HAS_RUST_CHANGES=false
for file in $STAGED_FILES; do
if [[ "$file" == *.rs ]] || [[ "$file" == "Cargo.toml" ]] || [[ "$file" == "Cargo.lock" ]]; then
HAS_RUST_CHANGES=true
break
fi
done

if [ "$HAS_RUST_CHANGES" = true ]; then
echo "🦀 Rust changes detected — running checks..."

echo " → just fmt-check"
if ! just fmt-check 2>&1; then
echo ""
echo "❌ Rust formatting check failed. Run 'just fmt' to fix."
exit 1
fi

echo " → just clippy"
if ! just clippy 2>&1; then
echo ""
echo "❌ Clippy found warnings/errors."
exit 1
fi

echo "✅ Rust checks passed."
echo ""
fi

# ─── Elixir checks ─────────────────────────────────────────────────────────────
HAS_ELIXIR_CHANGES=false
for file in $STAGED_FILES; do
if [[ "$file" == scheduler/*.ex ]] || [[ "$file" == scheduler/*.exs ]] || [[ "$file" == scheduler/mix.exs ]] || [[ "$file" == scheduler/mix.lock ]]; then
HAS_ELIXIR_CHANGES=true
break
fi
done

if [ "$HAS_ELIXIR_CHANGES" = true ]; then
echo "💧 Elixir changes detected — running checks..."

echo " → just elixir-compile"
if ! just elixir-compile 2>&1; then
echo ""
echo "❌ Elixir compilation has warnings. Fix them before committing."
exit 1
fi

echo " → just elixir-fmt-check"
if ! just elixir-fmt-check 2>&1; then
echo ""
echo "❌ Elixir formatting check failed. Run 'just elixir-fmt' to fix."
exit 1
fi

echo " → just elixir-credo"
if ! just elixir-credo 2>&1; then
echo ""
echo "❌ Credo found issues."
exit 1
fi

echo " → just elixir-test"
if ! just elixir-test 2>&1; then
echo ""
echo "❌ Elixir tests failed."
exit 1
fi

echo "✅ Elixir checks passed."
echo ""
fi

# Determine the base branch to compare against
# Try main first, then master, then fall back to HEAD~1
if git rev-parse --verify origin/main >/dev/null 2>&1; then
BASE_BRANCH="origin/main"
elif git rev-parse --verify main >/dev/null 2>&1; then
BASE_BRANCH="main"
elif git rev-parse --verify origin/master >/dev/null 2>&1; then
BASE_BRANCH="origin/master"
elif git rev-parse --verify master >/dev/null 2>&1; then
BASE_BRANCH="master"
else
BASE_BRANCH="HEAD~1"
fi

# Get the merge base (common ancestor) between current branch and base
MERGE_BASE=$(git merge-base HEAD "$BASE_BRANCH" 2>/dev/null || echo "")

# Get list of files changed in the branch (from merge base to HEAD, plus staged changes)
if [ -n "$MERGE_BASE" ]; then
BRANCH_FILES=$(git diff --name-only "$MERGE_BASE" HEAD 2>/dev/null || echo "")
else
BRANCH_FILES=""
fi

# Find all directories that have a CHANGELOG.md
CHANGELOG_DIRS=$(find . -name "CHANGELOG.md" -type f | sed 's|/CHANGELOG.md$||' | sed 's|^\./||' | sort -u)

# Track which changelog directories have changes but no changelog update
MISSING_CHANGELOGS=()

for changelog_dir in $CHANGELOG_DIRS; do
# Check if any staged file is in this directory (but not the changelog itself)
has_changes=false
changelog_updated_staged=false
changelog_updated_branch=false

# Check staged files
for file in $STAGED_FILES; do
# Check if file is in this changelog directory
if [[ "$file" == "$changelog_dir/"* ]]; then
if [[ "$file" == "$changelog_dir/CHANGELOG.md" ]]; then
changelog_updated_staged=true
else
has_changes=true
fi
fi
done

# Check if changelog was updated elsewhere in the branch
for file in $BRANCH_FILES; do
if [[ "$file" == "$changelog_dir/CHANGELOG.md" ]]; then
changelog_updated_branch=true
break
fi
done

# If there are changes but changelog wasn't updated (in staged or branch), add to missing list
if [ "$has_changes" = true ] && [ "$changelog_updated_staged" = false ] && [ "$changelog_updated_branch" = false ]; then
MISSING_CHANGELOGS+=("$changelog_dir")
fi
done

# Report missing changelog updates
if [ ${#MISSING_CHANGELOGS[@]} -gt 0 ]; then
echo ""
echo "❌ CHANGELOG.md not updated for the following directories:"
echo ""
for dir in "${MISSING_CHANGELOGS[@]}"; do
echo " • $dir/CHANGELOG.md"
done
echo ""
echo "Please update the relevant CHANGELOG.md file(s) with your changes."
echo ""
echo "To skip this check (use sparingly):"
echo " git commit --no-verify"
echo ""
exit 1
fi

exit 0
9 changes: 9 additions & 0 deletions offchain/.github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Summary of Changes
* Describe what changed in the PR
* Explain why the change is necessary
* Note any metrics that were exposed in this PR
* Is there supporting documentation or external resources that explain the change?
* Is a CHANGELOG.md update needed?

## Testing Verification
* Show evidence of testing the change
79 changes: 79 additions & 0 deletions offchain/.github/workflows/changelog-reminder.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: changelog-reminder

on:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]

jobs:
changelog:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: check-changelogs
run: |
set -euo pipefail

if echo "${{ toJson(github.event.pull_request.labels.*.name) }}" | grep -q "skip-changelog"; then
echo "skip-changelog label present; passing without requiring changelog updates."
exit 0
fi

base_branch="${GITHUB_BASE_REF:-}"

if [ -z "$base_branch" ]; then
default_remote_head=$(git symbolic-ref --short refs/remotes/origin/HEAD)
base_branch="${default_remote_head#origin/}"
fi

git fetch origin "$base_branch"

base_ref="origin/$base_branch"
head_ref="HEAD"

changed_files=$(git diff --name-only "$base_ref"..."$head_ref")

projects=(
"crates/contributor-rewards::crates/contributor-rewards/CHANGELOG.md"
"crates/scheduled-command::crates/scheduled-command/CHANGELOG.md"
"crates/sentinel::crates/sentinel/CHANGELOG.md"
"crates/slack-notifier::crates/slack-notifier/CHANGELOG.md"
"crates/solana-admin-cli/passport::crates/solana-admin-cli/passport/CHANGELOG.md"
"crates/solana-admin-cli/revenue-distribution::crates/solana-admin-cli/revenue-distribution/CHANGELOG.md"
"crates/solana-admin-cli/sol-conversion::crates/solana-admin-cli/sol-conversion/CHANGELOG.md"
"crates/solana-cli::crates/solana-cli/CHANGELOG.md"
"crates/solana-client-tools::crates/solana-client-tools/CHANGELOG.md"
"crates/solana-fork::crates/solana-fork/CHANGELOG.md"
"crates/solana-interface/sol-conversion::crates/solana-interface/sol-conversion/CHANGELOG.md"
"crates/validator-debt::crates/validator-debt/CHANGELOG.md"
"scheduler::scheduler/CHANGELOG.md"
)

missing=()

for entry in "${projects[@]}"; do
subdir=${entry%%::*}
changelog=${entry##*::}

if echo "$changed_files" | grep -q "^${subdir}/"; then
if ! echo "$changed_files" | grep -q "^${changelog}$"; then
missing+=("$subdir (expected ${changelog})")
fi
fi
done

if [ ${#missing[@]} -eq 0 ]; then
exit 0
fi

echo "The following subprojects changed but their changelog was not updated:"
for m in "${missing[@]}"; do
echo " - $m"
done

echo
echo "If this change intentionally does not require a changelog, add the 'skip-changelog' label to the PR."
exit 1
87 changes: 87 additions & 0 deletions offchain/.github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: CI

on:
pull_request:
branches: [main]
push:
branches: [main]
tags: ["*"]

jobs:
rust:
runs-on: ubuntu-latest
steps:
- name: Setup | Cancel previous runs
uses: styfle/cancel-workflow-action@0.12.1

- name: Setup | Checkout
uses: actions/checkout@v4

- name: Check disk space before cleanup
run: df -h

- name: Free disk space
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL
sudo docker image prune --all --force
sudo docker builder prune -a --force

- name: Check disk space after cleanup
run: df -h

- name: Setup | Apt packages
run: sudo apt-get update

- name: Setup | Rust toolchain from rust-toolchain.toml
run: |
rustup toolchain install
rustup component add llvm-tools-preview

- name: Setup | Rust cache
uses: Swatinem/rust-cache@v2

- name: Setup | Install cargo-nextest
uses: taiki-e/install-action@nextest

- name: Setup | Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov

- name: Setup | Just
uses: taiki-e/install-action@just

- name: Test | CI Pipeline
run: just ci

# All four release components ship as static musl binaries so they load on
# any Linux regardless of the host glibc version. Build each package
# individually (as goreleaser does, so feature unification matches the
# release) and assert every binary is fully static.
rust-musl-static:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup | Rust toolchain from rust-toolchain.toml
run: rustup toolchain install
- uses: Swatinem/rust-cache@v2
- name: Install musl toolchain
run: sudo apt-get update && sudo apt-get install -y musl-tools cmake
- name: Build release packages for musl and assert static linkage
env:
CC_x86_64_unknown_linux_musl: musl-gcc
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER: musl-gcc
run: |
for entry in \
doublezero-solana-cli:doublezero-solana \
doublezero-contributor-rewards:doublezero-contributor-rewards \
doublezero-ledger-sentinel:doublezero-sentinel \
doublezero-solana-validator-debt:doublezero-solana-validator-debt
do
package="${entry%%:*}"
binary="target/x86_64-unknown-linux-musl/release/${entry##*:}"
cargo build --release --package "$package" --target x86_64-unknown-linux-musl
file "$binary"
if ! file "$binary" | grep -qE "statically linked|static-pie linked"; then
echo "::error::$binary is not statically linked"
exit 1
fi
done
Loading
Loading