DinFeeRouter: validatorPool/storage/publicGoods shares accrue with no withdrawal path (BL-29)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- solidity
- Domain
- backend, blockchain
Research direction
Start with foundry/src/DinFeeRouter.sol and the BL-29 entry in Developer/BACK_LOG.md; read the bucket accounting and routeFeeDIN/routeFeeETH alongside the operator note in Documentation/public/roles/dinrep.md. The issue says a design decision is needed about who can withdraw each bucket and where validatorPool funds go. Once that is decided, done means the accrued balances have a withdrawal path for the affected buckets.
Written by the indexing model from the issue text.
Description
Summary
DinFeeRouter.routeFeeETH/routeFeeDIN split every fee into five buckets (validatorPool, treasury, burn, storage, publicGoods), but only the treasury share is ever actually moved out of the contract — paid immediately via a direct transfer/call. The other three buckets are only counted in accruedEth/accruedDin (keyed by bucket-name hash); there is no function anywhere in the contract that reads or spends those balances.
Where
foundry/src/DinFeeRouter.sol (verified against develop @ 740a613):
accruedDin/accruedEthmappings, L65-66 — the code itself comments them as "Buckets with no live consumer yet"routeFeeDIN()L172-190,routeFeeETH()L194-211 — onlytreasuryAmtis ever transferred out- Full function list (
initialize,addFeeSource,removeFeeSource,setTreasury,setTreasuryBpsCeiling,setDinSplit,setEthSplit,routeFeeDIN,routeFeeETH) — confirmed no withdraw/sweep function exists anywhere in the contract
Impact
With the default split (validatorPool=95%, treasury=5%), 95% of every fee swept through this router is permanently stuck the moment it's routed — not hypothetical, this is the live default on every network including the current devnet. Documentation/public/roles/dinrep.md:259 already warns operators about this ("nothing can withdraw them yet... treat swept non-Treasury ETH as locked"), so the team is aware of the behavior, but there's no dedicated engineering ticket for the fix itself — the only references are the ROADMAP's P3-5.3 row and Developer/BACK_LOG.md's BL-29 entry.
Relationship to #43
#43 ("P3 fees & treasury") is the broad mechanism-design umbrella this falls under, but its scope is MECHANISM_DESIGN-level (fee lines, denomination, burn policy) rather than this specific, already-shipped-in-principle engineering gap — the split itself and its bps values already work; only the withdrawal path for 3 of the 5 buckets is missing. This issue is the concrete, scoped sub-task; #43 should link here rather than absorb it.
Suggested approach
Needs a design decision first (who can pull each bucket, and where the validatorPool share specifically goes — straight to DinValidatorStake reward pools? DinEmission? a claim-pull contract?), per BL-29's own open question in the backlog. Candidate shapes, not prescribing one:
- A role-gated
withdraw(bytes32 bucket, address to, uint256 amount)per asset type, with the consuming contract(s) added as a known recipient once P3-5.2 (emission/reward pool) ships. - A
sweepBucket(bytes32 bucket)that forwards the full accrued balance to a configured per-bucket destination address (mirrors thesweepFeesToRouterpattern already used elsewhere in the codebase).
References
Developer/BACK_LOG.mdBL-29Documentation/public/roles/dinrep.md:259Developer/ROADMAP.mdP3-5.3 row- #43 (parent/umbrella)
- Dominant language
- Python
- Stars
- 4
- Forks
- 7
- Avg merge
- 3d 5h
- Merged PRs (30d)
- 34
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from InfiniteZeroFoundation/DevNet
-
ROADMAP.md: refresh "What is still open for P3" (several items were fixed in October)Possibly taken @umermjd11 claimed this 3 days ago. Opendocumentation good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
InfiniteZeroFoundation/DevNet#285 · 1 comment · 1 assignee ·
Maintainers usually reply within 1 day
-
Update the 25 translated organisation READMEs to match the English versionPossibly taken @mrCabez claimed this 1 day ago. Opengood first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
InfiniteZeroFoundation/DevNet#277 · 2 comments · 1 assignee ·
Maintainers usually reply within 1 day
-
Update the client-service guide to explain training and uploading separatelyPossibly taken @Santiagocetran claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
InfiniteZeroFoundation/DevNet#266 · 1 assignee ·
Maintainers usually reply within 1 day
-
Few questions related to GI2 aggregatorPossibly taken @Abidoyesimze claimed this today. Open
InfiniteZeroFoundation/DevNet#307 · 1 reaction · 4 assignees ·
Maintainers usually reply within 1 day
-
bug python
Difficulty 4/5 3-5 days Newbie friendliness 52/100
InfiniteZeroFoundation/DevNet#306 ·
Maintainers usually reply within 1 day
All issues in InfiniteZeroFoundation/DevNet
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
NousResearch/hermes-agent#147104 ·
Maintainers usually reply within 1 day
-
[oblt-aw][autodoc] Document new required `shared-org-key` input for `obs-aw-dependency-review`Possibly taken @github-actions claimed this today. Open
Difficulty 1/5 Under an hour Newbie friendliness 90/100
Maintainers usually reply within 1 day
-
bot-triaged module: inductor oncall: pt2 topic: fuzzer triaged
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
getchaintips leaves out the active tip once a header is staged on it, where Core always lists itOpen
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
btclib-org/btclib-node#2158 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
patrick-hudson/put.gd-desktop#979 · 1 comment ·
Maintainers usually reply within 1 day