Skip to content

SC-8 : la courbe d'impact AMM est concave (dite convexe), et le fractionnement propose ne gagne rien #14840

Closed

Description

@jsboige

Localisation

MyIA.AI.Notebooks/SymbolicAI/SmartContracts/02-Solidity-Advanced/SC-8-DeFi-Primitives.ipynb, cellules 4 cell-2, 13 f2b36324, 14, 15 109e0e13. Verifie sur 2c500fe6b.

La simulation retire les frais du pool et maintient k constant. Cette simplification est explicite dans le notebook et n'est pas le defaut — elle doit etre conservee.

Defaut 1 — la courbe est concave, l'interpretation la dit convexe

La cellule 15 affirme : « La relation est convexe : le price impact accelere a mesure que le swap represente une plus grande part des reserves. »

Avec x la reserve initiale, r la fraction conservee apres frais et q le montant entre, l'impact relatif vaut I(q) = 1 - (1 + rq/x)^-2, qui est concave en q.

Mesure, via simulate_swap du notebook (reserve_a = 1000, reserve_b = 2000000, fee = 0.3 %) :

q (ETH) impact
10 1.96457 %
20 3.87181 %
30 5.72393 %

Accroissements : +1.90724 puis +1.85212 — decroissants.

Derivee seconde par difference finie : I''(10) = -5.76e-4, I''(100) = -4.09e-4, I''(300) = -2.07e-4 — negative partout.

La table du notebook lui-meme le montre, sans rien executer : 1.96 / 18.79 / 31.63 / 49.61 % pour 10 / 110 / 210 / 410 ETH, soit une pente par 100 ETH qui tombe de 16.82 a 12.84 puis 8.99. La sortie committee contredit la phrase qui la commente.

Correctif : « La relation est concave : le price impact croit, mais de moins en moins vite — chaque ETH supplementaire deplace le prix moins que le precedent. » La lecon pedagogique (le slippage augmente avec la taille) est preservee ; c'est la qualification de la courbure qui change.

Defaut 2 — le fractionnement propose ne cree pas le gain suggere

La cellule 13 melange « a travers plusieurs pools » et « ou dans le meme pool », alors que l'interface de la cellule 14 ne connait qu'une seule paire de reserves.

Mesure, 100 ETH dans le meme pool :

1 swap de 100 ETH : 181322.17877603 USDC
5 swaps de 20 ETH : 181322.17877603 USDC
ecart             : 2.328e-10 USDC

Dans un pool a produit constant, fractionner ne rapporte rien — l'ecart est purement numerique. L'exercice suggere donc un gain que sa propre interface ne peut pas produire.

Correctif : trancher le perimetre. Soit l'exercice porte sur plusieurs pools et l'interface doit exposer plusieurs reserves ; soit il porte sur un seul pool, et l'enonce doit demander a l'etudiant de montrer que le fractionnement n'y change rien — ce qui est un meilleur exercice.

Critere de cloture

  • L'interpretation qualifie correctement la courbure, avec les valeurs re-executees.
  • L'enonce du fractionnement et l'interface du stub s'accordent sur un seul perimetre.
  • Notebook re-execute et committe avec ses sorties (C.2).

Activity

  1. jsboige commented on Sep 6, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2024:CoursIA — fix SC-8 : courbure concave corrigee (defaut 1) + perimetre fractionnement tranche single-pool, enonce reformule « montrer que le fractionnement ne rapporte rien » (option B de l'issue, defaut 2) — paths: MyIA.AI.Notebooks/SymbolicAI/SmartContracts/02-Solidity-Advanced/SC-8-DeFi-Primitives.ipynb

  2. jsboige commented on Sep 6, 2026

    @jsboige
    OwnerAuthor

    Livree par #14863 (lane myia-po-2024:CoursIA) — les 3 criteres de cloture :

    1. Cellule 15 : concave remplace convexe, avec la formule 1 - (1 + rq/x)^-2 ; la table re-executee (1.96/18.79/31.63/49.61 %, pente par 100 ETH 16.82 -> 12.84 -> 8.99) confirme la concavite.
    2. Cellule 13 : exercice re-scope single-pool (« dans le meme pool, meme paire de reserves »), l'etudiant montre que le fractionnement n'y change rien (option B de l'issue) — aligne sur l'interface mono-paire du stub cellule 14, inchange. Indice 1e-10 = erreur machine ajoute.
    3. Re-execution complete : Success 1/0, 14.9 s, anvil local chain 31337, solc 0.8.28, 8/8 cellules execution_count non-null, 0 erreur, sorties committees (C.2).

    La simplification (frais retires, k constant) est conservee comme l'issue l'exige.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions