Add invariant tests for spending limits across redelegation chains
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 53/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- solidity
- 领域
- blockchain, testing
调研方向
Read test/DelegationChainWithCaveatsTest.t.sol for existing chain test setup and documents/CaveatEnforcers.md for hook order. The proposed file is test/invariants/RedelegationSpendLimit.invariant.t.sol; begin by tracing how those tests construct links and inspect spentMap. Done means the stated balance, per-link limit, disabled-link, and redelegator-balance properties hold across generated redemption and toggle sequences.
由索引模型根据 Issue 内容生成。
描述
Description
I'd like to add Foundry invariant tests for the amount enforcers when they sit on more than one link of a delegation chain.
The suite has no invariant or fuzz tests today, and the test files for the cumulative enforcers use root delegations only. Limits on a redelegation appear in fixed integration scenarios such as _createAdapterRedelegation in VedaLending.t.sol. A tree of delegations has more states than those reach: siblings sharing a parent's budget, batched redemptions, links disabled and re-enabled between spends.
Technical Details
- One new test file,
test/invariants/RedelegationSpendLimit.invariant.t.sol. No change tosrc/,foundry.tomlor CI; run length is set inline withforge-config. - A handler redeems down a fixed four-link tree, singly and in two-context batches, and disables or re-enables links between calls. Each link carries
ERC20TransferAmountEnforcer, and sibling limits add up to more than their parent's. - Ghost totals per link are compared with
spentMapand token balances after every call.
I have a working draft. On main at b4b8c41 all the properties below hold over 256 runs of 128 calls, in under 20 seconds. To check the tests can fail, I weakened four things in a local copy and each was caught: the enforcer's limit check, storing spent, the disabled-delegation check, and running beforeHook on every link.
Acceptance Criteria
Over any sequence of redemptions, batches and enable or disable calls:
- The root delegator's balance falls by at most the root link's limit.
spentMapfor each link stays within that link's limit.spentMapfor each link equals what left through it, so reverted redemptions count nothing.- Nothing moves through a disabled link.
- Redelegators' balances don't move.
Scenario:
- GIVEN a root link limited to 100, with redelegations to A (60) and B (70)
- WHEN A and B redeem in any order and any amounts
- THEN root pays at most 100, A's path at most 60 and B's at most 70
References
test/DelegationChainWithCaveatsTest.t.sol, the fixed three-level chain with per-call limitsdocuments/CaveatEnforcers.md, hook order across a chain
If this is useful, I'll open the PR against this issue. The native, period and streaming enforcers could follow separately if you want them.
AI use: an AI assistant helped write the tests and this issue; I reviewed both before posting.
- 主要语言
- Solidity
- 星标
- 230
- 派生
- 122
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
MetaMask/delegation-framework 的其他 Issue
-
难度 5/5 一周以上 新手友好度 20/100
MetaMask/delegation-framework#215 ·
-
MultiSigDeleGator: support smart contract accounts as signers (ERC-1271)可能已有人在做 @Muhammad-Altabba 于 30 天前认领。 未关闭
难度 5/5 一周以上 新手友好度 18/100
MetaMask/delegation-framework#213 ·
-
ExactCalldataBatchEnforcer should pin terms target and value可能已有人在做 @SashaMIT 于 95 天前认领。 未关闭
难度 3/5 1-2 天 新手友好度 74/100
MetaMask/delegation-framework#198 ·
-
难度 4/5 3-5 天 新手友好度 45/100
MetaMask/delegation-framework#192 · 1 条评论 ·
-
UKZToken.sol未关闭
难度 5/5 一周以上 新手友好度 15/100
MetaMask/delegation-framework#185 ·
查看 MetaMask/delegation-framework 的全部 Issue
相似的 Issue
-
Log filters reject `"fromBlock": null` (and `toBlock`/`blockHash`) instead of treating it as unset未关闭L1 rpc-api
难度 2/5 1-3 小时 新手友好度 78/100
lambdaclass/ethrex#7530 ·
维护者通常 2 天内回复
-
难度 1/5 1 小时以内 新手友好度 91/100
维护者通常 1 天内回复
-
[BUG]: Oracle with rewardBps above 1e5 can never accept a funded price submission可能已有人在做 @kansalakshat 于 1 天前认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 65/100
StabilityNexus/OrbOracle-Solidity#27 · 1 条评论 ·
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 78/100
LFDT-Lineth/lineth-monorepo#4442 ·
维护者通常 1 天内回复