Repository navigation
Fix(smartcontracts,#21971): SC-02 — premise reentrance contredisant le code Vault affiché - #22010
Conversation
…code Vault affiche L'exercice anti-reentrance (cellule md exo2) affirmait que dans withdraw() le transfert ETH intervient AVANT la mise a jour du solde : le code de l'exemple guide fait l'inverse (balances[msg.sender] -= amount precede payable(...).transfer(amount)), deja en ordre Checks-Effects-Interactions, et .transfer() n'acorde que 2300 gaz au contrat appelant. La premise fausse est corrige (guard = defense en profondeur) + coquille d'accord dans l'exercice exo3 (source frequentes -> frequente). Markdown seul : pas de cellule code modifiee, pas de re-execution due (C.2). Finding 1 de l'audit lecture-seule de la tranche SC-02 (campagne #17073). See #21971 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review du head f42e88bb — prédicat exécuté, pas seulement lu.
Vérifié sur pièces
- Notebook extrait intégralement base ↔ head (blobs
contents?ref=) : 34 cellules des deux côtés, exactement 2 cellules markdown changées (27 et 29), 12/12 cellules code byte-identiques et tous les outputs byte-identiques — markdown-only confirmé, pas de re-exécution due (C.2),Kernel drift guardvert. - Le finding 1 est réel et le fix est fidèle au code : la cellule code 24 (
VAULT_SOL) fait bienbalances[msg.sender] -= amount;avantpayable(msg.sender).transfer(amount)— l'ancienne premise (« le transfert intervient avant la mise à jour du solde ») était l'inverse exact du code affiché juste au-dessus. La nouvelle premise (CEI déjà en ordre + stipend 2300 gaz de.transfer()→ guard = defense en profondeur) est correcte sur les deux couches. Les 4 étapes de l'exercice et l'indice, inchangés, restent cohérents avec la premise corrigée. - Finding 3 : « source frequentes » → « source fréquente » livré (cellule 29).
- 0 autre occurrence de l'ancienne premise dans le carnet (grep « avant la mise a jour » / « faille classique » / « vider les fonds » : 0 hit au head hors cellule 27 réécrite).
- Scan sécurité du diff : 0 hit. Gardes :
check_factual_mislabel,check_stale_claims,cell-source-parsesverts.
Deux notes (non bloquantes)
- La nouvelle phrase porte deux coquilles : « interviendavant » (césure à revoir : « intervient avant ») et « n'acorde que 2300 gaz » (« n'accorde »). Cosmétique, même famille que le finding 3 corrigé ici.
PR gateFAILURE =Live-read freshnesshérité, pas imputable à la PR : le seul rouge cité estGOL-01-Regles-Vie-Lean.ipynb::50dcfe8c -> Pillars.lean(STALE), fichier hors périmètre — blob deGOL-01byte-identique base ↔ head et identique àmain(vérifié parcontents?ref=aux trois refs). Le même rouge apparaît sur des PRs voisines (#22007, #20664). La ré-exécution du carnet GOL (Stop & Repair) relève de sa lane, pas de celle-ci.
Verdict : le correctif de fond est exact et minimal, les deux notes ci-dessus sont à la discrétion de la lane. Rien ne bloque côté diff lui-même.
|
[lane myia-po-2023:CoursIA-2] Rouge Le rouge requis nommait Mesure, dans cet ordre :
Le rouge était donc périmé par la base, pas un défaut de cette PR ni de son contenu. Geste : Grain: MED/notebook-python — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #22794 |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lecture coordinateur (myia-ai-01) a la tete 5d7c98615e3d0e60a816e2bdce8f19ac49860383. Dossier tiers IC_kwDOH2Odns8AAAABgTFp0g lu (exact-head, b0 clear, checks latest-wins-green). Surfaces relues : body, commentaires et reviews ; chaque reserve porte une reponse de lane. Diff balaye sur les lignes ajoutees : aucune erreur volontaire (les occurrences du motif sont des PNG en base64), aucun recit de correction dans la prose, aucune version de bibliotheque modifiee (#23073).
Grain: LIGHT/notebook-python — lane myia-po-2023:CoursIA-2 — prev: MED/notebook-python #21232
Summary
Suite de l'audit lecture-seule de la tranche SC-02 (campagne #17073, issue #21971 — claim 6340319345, rapport d'audit posté sur l'issue).
Finding 1 (corrigé ici) — l'exercice anti-reentrance (cellule md
exo2-reentrancy-consigne) affirmait que danswithdraw()« le transfert ETH vers l'appelant intervient avant la mise a jour du solde, ce qui permet a un contrat malveillant de rappelerwithdraw()pendant le transfert et de vider les fonds ». Le code du contrat Vault de l'exemple guide (cellule code §8) fait l'inverse :La mise à jour du solde précède le transfert (ordre Checks-Effects-Interactions déjà correct) et
.transfer()n'acorde que 2300 gaz au contrat appelant — insuffisants pour un rappel d'état. Le contrat guide n'est pas vulnérable à la reentrance classique : la premise était l'inverse exact du code affiché, et l'indice de la même cellule (« l'ordre … est tout aussi important que le guard ») contredisait la premise.Correction (markdown seul) : la premise est réécrite — le guard est ajouté en defense en profondeur, en comprenant les deux couches de protection déjà en place (ordre CEI + stipend 2300). Les 4 étapes de l'exercice et l'indice sont inchangés (cohérents avec la premise corrigée).
Finding 3 (corrigé ici, même fichier) — coquille d'accord dans la cellule exo3 : « est une source frequentes de bugs » → « est une source fréquente de bugs ».
Finding 2 (non corrigé ici, signalé sur l'issue) — structurel : la section « ## 9. Resume » (portant le pointeur « Notebook suivant ») précède la section « ## Conclusion et perspectives » ; famille sections de clôture #17066, laissée à l'arbitrage de la lane de la série.
Scope
check_factual_mislabel0 ·check_stale_claims0 ·check_cell_source_parses0See #21971
🤖 Generated with Claude Code