Add invariant tests for spending limits across redelegation chains

Abierto
#216 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
53/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
solidity

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Solidity
Estrellas
230
Forks
122
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MetaMask/delegation-framework

Todos los issues de MetaMask/delegation-framework

Issues similares

Más issues de Blockchain

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.