[{"data":1,"prerenderedAt":238},["ShallowReactive",2],{"docs:fr:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity":3},{"id":4,"title":5,"body":6,"cover":229,"description":230,"extension":231,"meta":232,"navigation":233,"path":234,"seo":235,"stem":236,"__hash__":237},"docs\u002Ffr\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity.md","Sécurité",{"type":7,"value":8,"toc":219},"minimark",[9,13,18,35,39,102,122,126,152,156,182,185,199,203,213],[10,11,5],"h1",{"id":12},"sécurité",[14,15,17],"h2",{"id":16},"ce-qui-a-de-la-valeur","Ce qui a de la valeur",[19,20,21,29],"ul",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"L’ETH et les tokens des pools",", dans des positions que personne ne peut retirer. L’ETH d’un camp ne quitte son pool\nque quand ce camp y est vendu : par un trader, ou par le réalignement du hook après qu’un trade a écarté les trois prix.",[22,30,31,34],{},[25,32,33],{},"Les cagnottes, les frais de créateur et les frais du protocole",", détenus par le hook sous forme de créances en ETH\ndans le PoolManager d’Uniswap V4, comptabilisés à part pour chaque duel.",[14,36,38],{"id":37},"ce-qui-le-protège","Ce qui le protège",[19,40,41,47,57,68,74,80,86,96],{},[22,42,43,46],{},[25,44,45],{},"Liquidité verrouillée."," Seule la factory peut ouvrir les pools enregistrés ou ajouter leur liquidité de lancement ; les retraits et les dons sont annulés.",[22,48,49,52,53,56],{},[25,50,51],{},"Destinataires limités."," Une cagnotte rachète seulement le gagnant de son duel ; les frais de créateur vont seulement au créateur du duel, le wallet qui l’a lancé ou une adresse à qui il a cédé son rôle et qui l’a accepté. Les frais du protocole vont à la ",[25,54,55],{},"trésorerie actuelle",", que le propriétaire de la factory peut changer après 48 heures, y compris pour les frais du protocole déjà accumulés.",[22,58,59,62,63,67],{},[25,60,61],{},"Pouvoirs bornés de la factory."," Les tokens n’ont ni propriétaire ni fonction de mint, et le hook ne peut être mis à jour ni mis en pause. Le propriétaire peut suspendre les nouveaux lancements, proposer des conditions bornées pour les futurs duels ou changer la trésorerie après le délai. Il peut aussi baisser d’un coup la part du protocole sur les frais de swap de tous les duels, jusqu’à zéro, ou la remonter, jamais au-delà des conditions du duel : ce que le protocole ne prend pas va aux cagnottes. Le propriétaire peut renoncer à ce rôle pour de bon (",[64,65,66],"code",{},"renounceOwnership",") : les conditions, la trésorerie, le taux du protocole et une pause restent alors en l’état, sauf un changement déjà proposé, que n’importe qui peut encore appliquer après son délai.",[22,69,70,73],{},[25,71,72],{},"Règlement avant le swap."," Le premier swap après la clôture règle le round terminé avant de s’exécuter. Le plafond du rachat est environ 10 % au-dessus d’une référence conservée avec une précision inférieure au tick : une moyenne exponentielle à 30 minutes des ticks du pool ETH, ramenée au tick courant dès que celui-ci est plus bas, pour qu’elle suive le prix à la baisse immédiatement.",[22,75,76,79],{},[25,77,78],{},"Rounds fondés sur l’ETH seul."," La répartition et la moyenne utilisent les deux pools ETH. Un changement A\u002FB qui ne déplace aucun prix en ETH ne change pas le signal et n’active pas un round par ailleurs sans activité.",[22,81,82,85],{},[25,83,84],{},"Frais sur les exécutions complètes."," Les swaps facturés à l’avance sont annulés s’ils ne peuvent échanger tout le montant demandé. Les frais de réseau sont distincts.",[22,87,88,91,92,95],{},[25,89,90],{},"Réalignement isolé."," Seules les boucles rentables sont conservées, dans la limite de l’ETH du pool qui rachète les tokens. Une tentative échouée est annulée et sautée ; faute de gaz, c’est le swap qui est annulé (",[64,93,94],{},"ArbitrageStarved","), pour qu’un appelant ne puisse pas la sauter en retenant du gaz. Cela ne garantit ni l’alignement des prix ni une protection contre toutes les pertes de trading.",[22,97,98,101],{},[25,99,100],{},"Mêmes règles quel que soit le chemin."," Le hook prélève les frais, les taxes et les burns, que le router soit celui de Duel ou un autre router V4.",[103,104,105,106,109,110,113,114,117,118,121],"p",{},"La factory démarre en pause. Tant que ",[64,107,108],{},"paused()"," est vrai, seul ",[64,111,112],{},"owner()"," peut lancer un duel ; les autres appels sont annulés avec ",[64,115,116],{},"CreationPaused",". Le propriétaire ouvre les lancements avec ",[64,119,120],{},"setPaused(false)",". Les duels existants continuent de s’échanger.",[14,123,125],{"id":124},"ce-que-montre-le-site","Ce que montre le site",[19,127,128,134,140,146],{},[22,129,130,133],{},[25,131,132],{},"Des images venues du site seul."," Les pages n’affichent les images d’un duel que depuis l’adresse de Duel, et\nseulement des images que le site a traitées : un JPEG, un PNG ou un WebP lu d’abord par son en-tête (1536 × 1536 pixels\net 5 Mo au plus), décodé en WebAssembly, réduit à 1024 pixels et réencodé en WebP, sans ses métadonnées. La politique de\nsécurité des pages ne les laisse charger d’images de nulle part ailleurs.",[22,135,136,139],{},[25,137,138],{},"Des codecs à part."," Les images sont décodées dans un Worker à part, que seul le site peut joindre et qui ne détient\nrien : ni clé, ni stockage. Une faille dans un codec n’atteindrait que l’image qu’il lit. Le site vérifie ce que ce\nWorker lui renvoie (un WebP fixe, à la taille attendue) avant de le garder, et les décodeurs écrits en C repartent de\nzéro pour chaque image.",[22,141,142,145],{},[25,143,144],{},"Les duels lancés depuis le contrat."," Leurs détails peuvent nommer n’importe quelle adresse. Le site n’affiche\naucune image https ; il récupère une image IPFS une seule fois, depuis une passerelle publique (5 Mo et 10 secondes au\nplus), la traite comme un envoi et affiche sa propre copie, ou les initiales du camp.",[22,147,148,151],{},[25,149,150],{},"Des envois bornés."," Le site ne prend d’images que de ses propres pages : dix par minute depuis une même adresse, et\nun nombre limité par jour. Une image qu’aucun duel n’utilise est supprimée au bout d’un jour.",[14,153,155],{"id":154},"comment-ça-a-été-vérifié","Comment ça a été vérifié",[19,157,158,164,170,176],{},[22,159,160,163],{},[25,161,162],{},"Des tests automatisés"," couvrent le comportement des contrats, l’app web et le bot d’alertes. La couverture est une mesure des tests, pas une preuve que tous les comportements possibles sont sûrs.",[22,165,166,169],{},[25,167,168],{},"Des tests sur fork"," vérifient l’intégration avec les contrats Uniswap V4 déployés sur Robinhood Chain, dont l’Universal Router, Permit2 et le V4 Quoter.",[22,171,172,175],{},[25,173,174],{},"Des tests de régression"," conservent les cas trouvés pendant la revue interne, dont la comptabilité des frais, les cas limites du lancement, le règlement et les pools à court de fonds.",[22,177,178,181],{},[25,179,180],{},"Des tests d’invariants"," vérifient la comptabilité sur des séquences aléatoires d’échanges, de règlements et de réclamations : les créances en ETH doivent correspondre aux montants dus, sans tokens intermédiaires laissés dans le hook, la factory ou le router. Réussir les exécutions configurées ne prouve pas la sûreté de toutes les séquences possibles.",[103,183,184],{},"La revue interne a trouvé et corrigé un contournement de la taxe anti-snipe par un swap à sortie exacte, une\nrépartition qui ne suivait pas un camp acheté seul, des pools épuisés mal lus par le prix de référence du rachat, et des\nliens dangereux dans les métadonnées d’un duel.",[186,187,190],"callout",{"title":188,"type":189},"Pas encore audité par un tiers","warning",[103,191,192,193,198],{},"Les contrats ont fait l’objet d’une revue interne, pas d’un audit externe. Ils ne peuvent pas être mis à jour : un bug\ndécouvert plus tard ne pourrait pas être corrigé dans les duels en cours. Lisez ",[194,195,197],"a",{"href":196},"\u002Fdocs\u002Fduel\u002Frisks","Risques",".",[14,200,202],{"id":201},"signaler-une-vulnérabilité","Signaler une vulnérabilité",[103,204,205,206,212],{},"Vous pensez avoir trouvé une faille ? Merci de prendre le temps de nous la signaler. Écrivez-nous en privé sur\nTelegram, à ",[194,207,211],{"href":208,"rel":209},"https:\u002F\u002Ft.me\u002Fchatwithdivine",[210],"nofollow","@chatwithdivine",", en décrivant ce que vous avez trouvé et, si possible, comment\nle reproduire, et laissez-nous le temps de l’examiner avant d’en parler publiquement. Nous vous répondrons rapidement et\nvous tiendrons au courant.",[103,214,215,216,198],{},"Nous n’écrivons jamais en premier : ne faites confiance qu’à ",[194,217,211],{"href":208,"rel":218},[210],{"title":220,"searchDepth":221,"depth":222,"links":223},"",2,3,[224,225,226,227,228],{"id":16,"depth":221,"text":17},{"id":37,"depth":221,"text":38},{"id":124,"depth":221,"text":125},{"id":154,"depth":221,"text":155},{"id":201,"depth":221,"text":202},null,"Comment Duel protège les fonds, les cagnottes et les frais : liquidité verrouillée, pouvoirs bornés de la factory, règlement des rounds, tests et revue interne.","md",{},true,"\u002Ffr\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity",{"title":5,"description":230},"fr\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","pYWJ6qu9ts0n-TlHAZTf9lEzV3dtPKlQipHHDXTNsA0",1791231652572]