[{"data":1,"prerenderedAt":238},["ShallowReactive",2],{"docs:nl:\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\u002Fnl\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity.md","Beveiliging",{"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},"beveiliging",[14,15,17],"h2",{"id":16},"wat-waarde-heeft","Wat waarde heeft",[19,20,21,29],"ul",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"De ETH en de tokens van de pools",", in posities die niemand kan weghalen. De ETH van een kant verlaat zijn pool alleen als die kant erin wordt verkocht: door een trader, of door de herschikking van de hook nadat een trade de drie prijzen uit elkaar heeft bewogen.",[22,30,31,34],{},[25,32,33],{},"De pots, de creatorvergoedingen en de protocolvergoedingen",", door de hook aangehouden als ETH-tegoeden in de PoolManager van Uniswap V4, per duel apart bijgehouden.",[14,36,38],{"id":37},"wat-het-beschermt","Wat het beschermt",[19,40,41,47,57,68,74,80,86,96],{},[22,42,43,46],{},[25,44,45],{},"Vergrendelde liquiditeit."," Alleen de factory kan geregistreerde pools openen of hun lanceringsliquiditeit toevoegen; opnames en donaties draaien terug.",[22,48,49,52,53,56],{},[25,50,51],{},"Begrensde ontvangers."," Een pot koopt alleen de winnaar van zijn eigen duel; creatorvergoedingen gaan alleen naar de creator van het duel: de wallet die het lanceerde of een adres waaraan die zijn rol overdroeg en dat hem accepteerde. Protocolvergoedingen gaan naar de ",[25,54,55],{},"huidige treasury",", die de eigenaar van de factory na 48 uur kan wijzigen, ook voor al opgebouwde protocolvergoedingen.",[22,58,59,62,63,67],{},[25,60,61],{},"Begrensde bevoegdheden van de factory."," Tokens hebben geen eigenaar en geen mintfunctie, en de hook kan niet worden geüpgraded of gepauzeerd. De eigenaar van de factory kan nieuwe lanceringen pauzeren, begrensde voorwaarden voor toekomstige duels voorstellen of na de wachttijd de treasury wijzigen. Hij kan ook het deel van het protocol in de swapvergoeding van alle duels meteen verlagen, tot nul, of weer verhogen, nooit boven de voorwaarden van het duel: wat het protocol niet neemt, gaat naar de pots. De eigenaar kan de rol voorgoed opgeven (",[64,65,66],"code",{},"renounceOwnership","): de voorwaarden, de treasury, het tarief van het protocol en een pauze blijven dan zoals ze zijn, behalve een al voorgestelde wijziging, die iedereen na de wachttijd nog kan toepassen.",[22,69,70,73],{},[25,71,72],{},"Afrekening vóór de swap."," De eerste swap na een sluiting rekent het afgelopen gemiddelde af voordat er gehandeld wordt. Het plafond van een terugkoop ligt ongeveer 10% boven een referentie die wordt bijgehouden met een precisie van fracties van een tick: het exponentiële gemiddelde over 30 minuten van de ticks van de ETH-pool, begrensd op hoogstens de huidige tick, zodat die de prijs meteen omlaag volgt.",[22,75,76,79],{},[25,77,78],{},"Rondes alleen in ETH."," De verdeling en het gemiddelde van de ronde gebruiken de twee ETH-pools. Een A\u002FB-wissel die geen ETH-prijs beweegt, verandert noch het signaal noch de activiteit van een ronde die anders rustig zou zijn.",[22,81,82,85],{},[25,83,84],{},"Vergoedingen alleen bij volledige uitvoering."," Vooraf belaste swaps draaien terug als ze het gevraagde bedrag niet volledig kunnen uitvoeren. Netwerkgas komt daar los bij.",[22,87,88,91,92,95],{},[25,89,90],{},"Geïsoleerde herschikking."," Alleen winstgevende lussen worden behouden, begrensd door de ETH van de verkopende pool. Een mislukte poging wordt teruggedraaid en overgeslagen; bij gebrek aan gas draait de swap terug (",[64,93,94],{},"ArbitrageStarved","), zodat een aanroeper haar niet kan overslaan door gas achter te houden. Dit garandeert geen gelijke prijzen en beschermt niet tegen alle handelsverliezen.",[22,97,98,101],{},[25,99,100],{},"Dezelfde regels op elke route."," De hook heft vergoedingen, belastingen en burns, of de router nu die van Duel is of een andere V4-router.",[103,104,105,106,109,110,113,114,117,118,121],"p",{},"De factory begint met gepauzeerde lanceringen. Zolang ",[64,107,108],{},"paused()"," true is, kan alleen ",[64,111,112],{},"owner()"," een duel lanceren; aanroepen van anderen worden teruggedraaid met ",[64,115,116],{},"CreationPaused",". De eigenaar opent de lanceringen met ",[64,119,120],{},"setPaused(false)",". Bestaande duels blijven verhandelbaar.",[14,123,125],{"id":124},"wat-de-site-toont","Wat de site toont",[19,127,128,134,140,146],{},[22,129,130,133],{},[25,131,132],{},"Afbeeldingen alleen via de site."," De pagina's tonen de afbeeldingen van een duel alleen vanaf Duels eigen adres, en alleen afbeeldingen die de site heeft verwerkt: een JPEG, PNG of WebP die eerst aan de hand van de header wordt gelezen (hooguit 1536 × 1536 pixels en 5 MB), in WebAssembly wordt gedecodeerd, binnen 1024 pixels wordt ingepast en opnieuw als WebP wordt gecodeerd, zonder metadata. Het beveiligingsbeleid van de pagina's laat ze nergens anders afbeeldingen laden.",[22,135,136,139],{},[25,137,138],{},"Gescheiden codecs."," De afbeeldingen worden gedecodeerd in een eigen Worker, die alleen de site bereikt en die niets bewaart: geen sleutel, geen opslag. Een fout in een codec zou alleen de afbeelding raken die hij leest. De site controleert wat die Worker teruggeeft (een stilstaande WebP van de verwachte grootte) voordat ze het bewaart, en de C-decoders beginnen voor elke afbeelding opnieuw.",[22,141,142,145],{},[25,143,144],{},"Duels die via het contract zijn gelanceerd."," Hun gegevens kunnen elk adres noemen. De site toont geen https-afbeeldingen; een IPFS-afbeelding haalt ze één keer op via een publieke gateway (hooguit 5 MB en 10 seconden), verwerkt die als een upload en toont haar eigen kopie, of de initialen van de kant.",[22,147,148,151],{},[25,149,150],{},"Uploads binnen grenzen."," De site neemt alleen afbeeldingen aan vanaf haar eigen pagina's: tien per minuut vanaf één adres en een beperkt aantal per dag. Een afbeelding die geen enkel duel noemt, wordt na een dag verwijderd.",[14,153,155],{"id":154},"hoe-het-is-gecontroleerd","Hoe het is gecontroleerd",[19,157,158,164,170,176],{},[22,159,160,163],{},[25,161,162],{},"Geautomatiseerde tests"," dekken het gedrag van de contracten, de webapp en de alertbot. Dekking is een testmaatstaf, geen bewijs dat elk mogelijk gedrag veilig is.",[22,165,166,169],{},[25,167,168],{},"Forktests"," oefenen de integratie met de op Robinhood Chain gedeployde Uniswap V4-contracten, waaronder de Universal Router, Permit2 en de V4 Quoter.",[22,171,172,175],{},[25,173,174],{},"Regressietests"," bewaren gevallen die bij de interne review zijn gevonden, waaronder de boekhouding van vergoedingen, randgevallen bij de lancering, de afrekening en leeggekochte pools.",[22,177,178,181],{},[25,179,180],{},"Invarianttests"," controleren de boekhouding over willekeurige reeksen trades, afrekeningen en opeisingen: ETH-tegoeden moeten overeenkomen met de verschuldigde bedragen, en er mogen geen tussentijdse tokens achterblijven in de hook, de factory of de router. Het doorstaan van de geconfigureerde runs bewijst geen veiligheid voor elke mogelijke reeks.",[103,183,184],{},"De interne review vond en herstelde een exact-output-route om de anti-snipebelasting heen, een verdeling die een alleen gekochte kant niet volgde, leeggekochte pools die de referentieprijs van de terugkoop verkeerd las, en onveilige links in de metadata van een duel.",[186,187,190],"callout",{"title":188,"type":189},"Nog niet extern geaudit","warning",[103,191,192,193,198],{},"De contracten zijn intern gereviewd, niet extern geaudit. Ze kunnen niet worden geüpgraded: een later gevonden bug kan in lopende duels niet worden gerepareerd. Lees ",[194,195,197],"a",{"href":196},"\u002Fdocs\u002Fduel\u002Frisks","Risico's",".",[14,200,202],{"id":201},"een-kwetsbaarheid-melden","Een kwetsbaarheid melden",[103,204,205,206,212],{},"Denk je een kwetsbaarheid te hebben gevonden, dank je dat je de tijd neemt om die te melden. Schrijf ons privé op Telegram, via ",[194,207,211],{"href":208,"rel":209},"https:\u002F\u002Ft.me\u002Fchatwithdivine",[210],"nofollow","@chatwithdivine",", wat je hebt gevonden en, als het kan, hoe je het kunt reproduceren, en geef ons tijd om het te onderzoeken voordat je iets openbaar deelt. We antwoorden snel en houden je op de hoogte.",[103,214,215,216,198],{},"We schrijven nooit als eerste: vertrouw alleen ",[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,"Hoe Duel het geld in de pools, de pots en de vergoedingen beschermt: vergrendelde liquiditeit, begrensde bevoegdheden van de factory, afrekenregels, geautomatiseerde tests en een interne review.","md",{},true,"\u002Fnl\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity",{"title":5,"description":230},"nl\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","ki164MmDis7TYF-3nJQAm2INNawHCoyIxjtHR_06xsk",1791231664841]