Add invariant tests for spending limits across redelegation chains

Đang mở
#216 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
53/100
Loại issue
Tính năng
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
solidity
Lĩnh vực
blockchain, testing

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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 to src/, foundry.toml or CI; run length is set inline with forge-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 spentMap and 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.
  • spentMap for each link stays within that link's limit.
  • spentMap for 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 limits
  • documents/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.

Ngôn ngữ chính
Solidity
Star
230
Fork
122
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của MetaMask/delegation-framework

Tất cả issue của MetaMask/delegation-framework

Issue tương tự

Thêm issue về Blockchain

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.