[{"data":1,"prerenderedAt":1176},["ShallowReactive",2],{"docs:nl:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate":3},{"id":4,"title":5,"body":6,"cover":1167,"description":1168,"extension":1169,"meta":1170,"navigation":1171,"path":1172,"seo":1173,"stem":1174,"__hash__":1175},"docs\u002Fnl\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate.md","Bouwen op Duel",{"type":7,"value":8,"toc":1160},"minimark",[9,13,17,22,29,131,187,215,219,225,306,313,338,344,350,451,454,536,559,566,659,697,700,720,781,799,803,861,880,884,1101,1108,1112,1156],[10,11,5],"h1",{"id":12},"bouwen-op-duel",[14,15,16],"p",{},"De pools van Duel zijn standaard Uniswap V4-pools met een hook, en elk getal dat de app toont, komt uit openbare views en events. Bots, terminals, dashboards en aggregators kunnen erop bouwen zonder toestemming te vragen.",[18,19,21],"h2",{"id":20},"een-duel-lezen","Een duel lezen",[14,23,24,28],{},[25,26,27],"code",{},"DuelLens"," verzamelt alles over een duel in één aanroep:",[30,31,36],"pre",{"className":32,"code":33,"language":34,"meta":35,"style":35},"language-solidity shiki shiki-themes vitesse-light vitesse-dark","function getPair(uint256 pairId) external view returns (PairView memory);\nfunction getPairs(uint256 offset, uint256 limit) external view returns (PairView[] memory);\n","solidity","",[25,37,38,88],{"__ignoreMap":35},[39,40,43,47,51,55,59,63,66,69,72,76,79,82,85],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"s5TCs","function",[39,48,50],{"class":49},"s_xSY"," getPair",[39,52,54],{"class":53},"si6no","(",[39,56,58],{"class":57},"s_NWU","uint256",[39,60,62],{"class":61},"s9nN2"," pairId",[39,64,65],{"class":53},")",[39,67,68],{"class":45}," external",[39,70,71],{"class":45}," view",[39,73,75],{"class":74},"sTPum"," returns",[39,77,78],{"class":53}," (",[39,80,81],{"class":45},"PairView",[39,83,84],{"class":45}," memory",[39,86,87],{"class":53},");\n",[39,89,91,93,96,98,100,103,106,109,112,114,116,118,120,122,124,127,129],{"class":41,"line":90},2,[39,92,46],{"class":45},[39,94,95],{"class":49}," getPairs",[39,97,54],{"class":53},[39,99,58],{"class":57},[39,101,102],{"class":61}," offset",[39,104,105],{"class":53},",",[39,107,108],{"class":57}," uint256",[39,110,111],{"class":61}," limit",[39,113,65],{"class":53},[39,115,68],{"class":45},[39,117,71],{"class":45},[39,119,75],{"class":74},[39,121,78],{"class":53},[39,123,81],{"class":45},[39,125,126],{"class":53},"[]",[39,128,84],{"class":45},[39,130,87],{"class":53},[14,132,133,134,136,137,140,141,144,145,148,149,152,153,156,157,160,161,164,165,168,169,172,173,176,177,152,180,152,183,186],{},"Een ",[25,135,81],{}," bevat het ID van het duel, zijn creator en zijn metadata-URI, beide kanten (token, naam, symbool, supply, poolprijs en tick, ETH per token, echte ETH in de pool), de drie poolsleutels, de live verdeling (",[25,138,139],{},"gaugeBps",", het aandeel van kant A in basispunten), het gemiddelde van de ronde tot nu toe (",[25,142,143],{},"roundGaugeBps","), de pot, de creatorvergoedingen, het totale volume en de terugkopen, de huidige anti-snipebelasting, de index, het begin en het einde van de ronde en of erin is gehandeld (",[25,146,147],{},"roundTraded","), het tijdstip en de tick van de lancering (",[25,150,151],{},"launchTime",", ",[25,154,155],{},"startTick","), of het een supportersduel is, zijn categorie (",[25,158,159],{},"category",", volgens de nummering van de app, 0 voor geen), zijn vergoedingsvoorwaarden (",[25,162,163],{},"fees",") en het gedeelte van zijn deel dat het protocol nu neemt (",[25,166,167],{},"protocolRateBps",", op 10.000): het protocol krijgt ",[25,170,171],{},"fees.protocolShareBps × protocolRateBps \u002F 10.000"," van de swapvergoeding, en de pot de rest van dat deel. In de contracten en hun ABI's heet kant B ",[25,174,175],{},"D",": ",[25,178,179],{},"d",[25,181,182],{},"tokenD",[25,184,185],{},"keyD",".",[14,188,189,190,152,193,152,196,152,199,152,202,152,205,152,208,211,212,186],{},"De hook heeft kleinere views: ",[25,191,192],{},"pairCount()",[25,194,195],{},"getPair(pairId)",[25,197,198],{},"poolKeys(pairId)",[25,200,201],{},"gaugeBps(pairId)",[25,203,204],{},"snipeTaxBps(pairId)",[25,206,207],{},"protocolRateBps()",[25,209,210],{},"protocolFees()"," en ",[25,213,214],{},"firstRoundEnd(launchTime)",[18,216,218],{"id":217},"handelen","Handelen",[14,220,221,222,224],{},"Elke Uniswap V4-router kan in de pools van een duel handelen. Bouw de poolsleutels uit ",[25,223,198],{},":",[226,227,228,250],"table",{},[229,230,231],"thead",{},[232,233,234,238,241,244,247],"tr",{},[235,236,237],"th",{},"Pool",[235,239,240],{},"currency0",[235,242,243],{},"currency1",[235,245,246],{},"fee",[235,248,249],{},"tickSpacing",[251,252,253,274,290],"tbody",{},[232,254,255,259,265,268,271],{},[256,257,258],"td",{},"ETH \u002F A",[256,260,261,262,65],{},"ETH (",[25,263,264],{},"address(0)",[256,266,267],{},"token A",[256,269,270],{},"0",[256,272,273],{},"200",[232,275,276,279,283,286,288],{},[256,277,278],{},"ETH \u002F B",[256,280,261,281,65],{},[25,282,264],{},[256,284,285],{},"token B",[256,287,270],{},[256,289,273],{},[232,291,292,295,298,301,303],{},[256,293,294],{},"A \u002F B",[256,296,297],{},"het lagere tokenadres",[256,299,300],{},"het hogere",[256,302,270],{},[256,304,305],{},"60",[14,307,308,309,312],{},"De hook heft zijn vergoedingen via return deltas, dus vraag koersen op via de V4 Quoter: zijn antwoorden bevatten elke vergoeding en belasting. Een wissel via ETH is zijn ",[25,310,311],{},"quoteExactInput"," langs het pad token → ETH → andere token.",[14,314,315,316,319,320,211,322,325,326,329,330,333,334,337],{},"Een swap waarvan de hook de vergoeding vóór de uitvoering heft (een aankoop of wissel met exacte input, een verkoop met exacte output), moet volledig worden uitgevoerd: een swap die door zijn prijslimiet, of door een ETH-pool met te weinig ETH, voortijdig zou stoppen, draait terug met ",[25,317,318],{},"PartialFill",". De PoolManager verpakt de fout van een hook: ",[25,321,318],{},[25,323,324],{},"ArbitrageStarved"," komen binnen in ",[25,327,328],{},"WrappedError(address target, bytes4 selector, bytes reason, bytes details)",", en in ",[25,331,332],{},"UnexpectedRevertBytes(bytes revertData)"," wanneer de V4 Quoter ze meldt. Decodeer ",[25,335,336],{},"reason"," om de fout van de hook te lezen.",[14,339,340,341,343],{},"Elke trade eindigt met de herschikking van de hook, die eigen gas nodig heeft: een swap die haar te weinig laat, draait terug met ",[25,342,324],{}," in plaats van haar over te slaan. Verstuur swaps met het gas van een schatting, nooit minder, en met marge: de eerste swap na de sluiting van een ronde rekent ook de ronde af (haar terugkoop, daarna een herschikking, zo'n 170.000 gas extra), wat een schatting van vóór de sluiting niet meetelt. De app telt bij elke schatting 500.000 gas op.",[14,345,346,349],{},[25,347,348],{},"DuelRouter"," biedt één aanroep voor een swap in één pool:",[30,351,353],{"className":32,"code":352,"language":34,"meta":35,"style":35},"function swapExactIn(\n    PoolKey calldata key,\n    bool zeroForOne,\n    uint256 amountIn,\n    uint256 minAmountOut,\n    address recipient,\n    uint256 deadline\n) external payable returns (uint256 amountOut);\n",[25,354,355,365,379,390,401,411,422,430],{"__ignoreMap":35},[39,356,357,359,362],{"class":41,"line":42},[39,358,46],{"class":45},[39,360,361],{"class":49}," swapExactIn",[39,363,364],{"class":53},"(\n",[39,366,367,370,373,376],{"class":41,"line":90},[39,368,369],{"class":45},"    PoolKey",[39,371,372],{"class":45}," calldata",[39,374,375],{"class":61}," key",[39,377,378],{"class":53},",\n",[39,380,382,385,388],{"class":41,"line":381},3,[39,383,384],{"class":57},"    bool",[39,386,387],{"class":61}," zeroForOne",[39,389,378],{"class":53},[39,391,393,396,399],{"class":41,"line":392},4,[39,394,395],{"class":57},"    uint256",[39,397,398],{"class":61}," amountIn",[39,400,378],{"class":53},[39,402,404,406,409],{"class":41,"line":403},5,[39,405,395],{"class":57},[39,407,408],{"class":61}," minAmountOut",[39,410,378],{"class":53},[39,412,414,417,420],{"class":41,"line":413},6,[39,415,416],{"class":57},"    address",[39,418,419],{"class":61}," recipient",[39,421,378],{"class":53},[39,423,425,427],{"class":41,"line":424},7,[39,426,395],{"class":57},[39,428,429],{"class":61}," deadline\n",[39,431,433,435,437,440,442,444,446,449],{"class":41,"line":432},8,[39,434,65],{"class":53},[39,436,68],{"class":45},[39,438,439],{"class":45}," payable",[39,441,75],{"class":74},[39,443,78],{"class":53},[39,445,58],{"class":57},[39,447,448],{"class":61}," amountOut",[39,450,87],{"class":53},[14,452,453],{},"en één voor een wissel via ETH, waarbij de kant die je verlaat in zijn ETH-pool wordt verkocht en alle verkregen ETH in die van de andere wordt besteed:",[30,455,457],{"className":32,"code":456,"language":34,"meta":35,"style":35},"function swapThroughEth(\n    PoolKey calldata keyIn,\n    PoolKey calldata keyOut,\n    uint256 amountIn,\n    uint256 minAmountOut,\n    address recipient,\n    uint256 deadline\n) external returns (uint256 amountOut);\n",[25,458,459,468,479,490,498,506,514,520],{"__ignoreMap":35},[39,460,461,463,466],{"class":41,"line":42},[39,462,46],{"class":45},[39,464,465],{"class":49}," swapThroughEth",[39,467,364],{"class":53},[39,469,470,472,474,477],{"class":41,"line":90},[39,471,369],{"class":45},[39,473,372],{"class":45},[39,475,476],{"class":61}," keyIn",[39,478,378],{"class":53},[39,480,481,483,485,488],{"class":41,"line":381},[39,482,369],{"class":45},[39,484,372],{"class":45},[39,486,487],{"class":61}," keyOut",[39,489,378],{"class":53},[39,491,492,494,496],{"class":41,"line":392},[39,493,395],{"class":57},[39,495,398],{"class":61},[39,497,378],{"class":53},[39,499,500,502,504],{"class":41,"line":403},[39,501,395],{"class":57},[39,503,408],{"class":61},[39,505,378],{"class":53},[39,507,508,510,512],{"class":41,"line":413},[39,509,416],{"class":57},[39,511,419],{"class":61},[39,513,378],{"class":53},[39,515,516,518],{"class":41,"line":424},[39,517,395],{"class":57},[39,519,429],{"class":61},[39,521,522,524,526,528,530,532,534],{"class":41,"line":432},[39,523,65],{"class":53},[39,525,68],{"class":45},[39,527,75],{"class":74},[39,529,78],{"class":53},[39,531,58],{"class":57},[39,533,448],{"class":61},[39,535,87],{"class":53},[14,537,538,539,542,543,546,547,550,551,554,555,558],{},"Een verkoop in een ETH-pool van Duel die stopt bij de lanceringsprijs van de pool, omdat zijn ETH op is, wordt in dezelfde aanroep opnieuw verstuurd voor de rest, zodra de herschikking van de hook van de pool heeft teruggekocht wat de pool tussen de kanten opneemt: tot ",[25,540,541],{},"SALE_PASSES()"," (8) swaps, zolang de prijs van de pool onder de limiet van de swaps ligt. Elke swap betaalt de vergoeding van de hook over zijn eigen ETH, en ",[25,544,545],{},"minAmountOut"," telt ze allemaal. De V4 Quoter van Uniswap offreert één swap: voorbij wat die uitvoert, antwoordt hij ",[25,548,549],{},"NotEnoughLiquidity",". De app offreert zo'n verkoop door de router als de trader uit te voeren (een ",[25,552,553],{},"eth_call"," met een state override, ",[25,556,557],{},"DuelSimulator",").",[14,560,561,562,565],{},"Wat de herschikking niet meer kan terugkopen, neemt ",[25,563,564],{},"sell"," via de pool tussen de kanten mee naar de ETH-pool van de andere kant, waar de herschikkingen de ETH die ervoor betaalt naartoe hebben verplaatst:",[30,567,569],{"className":32,"code":568,"language":34,"meta":35,"style":35},"function sell(\n    PoolKey calldata keyIn,\n    PoolKey calldata keyCross,\n    PoolKey calldata keyOther,\n    uint256 amountIn,\n    uint256 minAmountOut,\n    address recipient,\n    uint256 deadline\n) external returns (uint256 amountOut);\n",[25,570,571,580,590,601,612,620,628,636,642],{"__ignoreMap":35},[39,572,573,575,578],{"class":41,"line":42},[39,574,46],{"class":45},[39,576,577],{"class":49}," sell",[39,579,364],{"class":53},[39,581,582,584,586,588],{"class":41,"line":90},[39,583,369],{"class":45},[39,585,372],{"class":45},[39,587,476],{"class":61},[39,589,378],{"class":53},[39,591,592,594,596,599],{"class":41,"line":381},[39,593,369],{"class":45},[39,595,372],{"class":45},[39,597,598],{"class":61}," keyCross",[39,600,378],{"class":53},[39,602,603,605,607,610],{"class":41,"line":392},[39,604,369],{"class":45},[39,606,372],{"class":45},[39,608,609],{"class":61}," keyOther",[39,611,378],{"class":53},[39,613,614,616,618],{"class":41,"line":403},[39,615,395],{"class":57},[39,617,398],{"class":61},[39,619,378],{"class":53},[39,621,622,624,626],{"class":41,"line":413},[39,623,395],{"class":57},[39,625,408],{"class":61},[39,627,378],{"class":53},[39,629,630,632,634],{"class":41,"line":424},[39,631,416],{"class":57},[39,633,419],{"class":61},[39,635,378],{"class":53},[39,637,638,640],{"class":41,"line":432},[39,639,395],{"class":57},[39,641,429],{"class":61},[39,643,645,647,649,651,653,655,657],{"class":41,"line":644},9,[39,646,65],{"class":53},[39,648,68],{"class":45},[39,650,75],{"class":74},[39,652,78],{"class":53},[39,654,58],{"class":57},[39,656,448],{"class":61},[39,658,87],{"class":53},[14,660,661,663,664,667,668,671,672,675,676,679,680,682,683,685,686,689,690,692,693,696],{},[25,662,564],{}," verkoopt in ",[25,665,666],{},"keyIn"," zoals ",[25,669,670],{},"swapExactIn"," dat doet, daarna wat overblijft via ",[25,673,674],{},"keyCross",", die alles opneemt (waarbij zijn wisselvergoeding wordt verbrand, zoals bij elke wissel), en in ",[25,677,678],{},"keyOther",", ook daar in meerdere stappen. ",[25,681,545],{}," telt de ETH van beide pools. Wat ook ",[25,684,678],{}," niet kan terugkopen, wordt aan ",[25,687,688],{},"recipient"," betaald in de token van die pool, buiten de minimale opbrengst. De app verkoopt via ",[25,691,564],{}," wanneer de V4 Quoter een verkoop weigert en ",[25,694,695],{},"DuelSimulator.simulateSale"," laat zien dat alles zo voor ETH wordt verkocht.",[14,698,699],{},"Een andere V4-router doet één swap. De hook weigert geen verkoop met exacte input die verder gaat dan wat de ETH van de pool betaalt (zijn vergoeding wordt na de swap geheven, op de uitbetaalde ETH): de verkoop wordt deels uitgevoerd, tot aan de lanceringsprijs van de pool, en de rest blijft bij de verkoper. Stel de minimale opbrengst in op wat kan worden uitgevoerd, en verkoop de rest in een latere transactie, tegen wat de herschikking heeft teruggekocht.",[14,701,702,703,705,706,152,709,211,712,715,716,719],{},"Stuur ETH mee met ",[25,704,670],{}," om te kopen. Om te verkopen of te wisselen, keur je de router goed voor de token, of laat je een permit (EIP-2612) dat in dezelfde transactie doen: ",[25,707,708],{},"swapExactInWithPermit",[25,710,711],{},"swapThroughEthWithPermit",[25,713,714],{},"sellWithPermit"," nemen dezelfde argumenten en de permit van de aanroeper voor precies ",[25,717,718],{},"amountIn",", ondertekend voor de router:",[30,721,723],{"className":32,"code":722,"language":34,"meta":35,"style":35},"struct Permit {\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n}\n",[25,724,725,736,747,757,767,776],{"__ignoreMap":35},[39,726,727,730,733],{"class":41,"line":42},[39,728,729],{"class":45},"struct",[39,731,732],{"class":57}," Permit",[39,734,735],{"class":53}," {\n",[39,737,738,740,744],{"class":41,"line":90},[39,739,395],{"class":57},[39,741,743],{"class":742},"s8w-G"," deadline",[39,745,746],{"class":53},";\n",[39,748,749,752,755],{"class":41,"line":381},[39,750,751],{"class":57},"    uint8",[39,753,754],{"class":742}," v",[39,756,746],{"class":53},[39,758,759,762,765],{"class":41,"line":392},[39,760,761],{"class":57},"    bytes32",[39,763,764],{"class":742}," r",[39,766,746],{"class":53},[39,768,769,771,774],{"class":41,"line":403},[39,770,761],{"class":57},[39,772,773],{"class":742}," s",[39,775,746],{"class":53},[39,777,778],{"class":41,"line":413},[39,779,780],{"class":53},"}\n",[14,782,783,784,787,788,791,792,795,796,798],{},"De wallet van de gebruiker ondertekent permits voor elke Duel-token in een EIP-712-domein met de naam ",[25,785,786],{},"Duel",", versie ",[25,789,790],{},"1",", op het adres van de token (zijn ",[25,793,794],{},"eip712Domain()",", ERC-5267, zegt dat). De router gebruikt eerst de permit en negeert het als die mislukt: een permit die al door iemand is verstuurd, heeft de allowance ingesteld, en een die mislukt verandert niets; de swap neemt dan wat de bestaande allowance dekt en draait terug als dat niet genoeg is. Na een gedeeltelijk uitgevoerde swap blijft het ongebruikte deel van de via de permit toegekende allowance geldig. De deadline begrenst de geldigheid van de permit-handtekening; een al toegekende allowance verloopt daardoor niet. De router haalt alleen tokens bij de aanroeper weg. De ETH van een wissel blijft in de PoolManager zodat de tweede pool die kan besteden; een Duel-pool besteedt alles, of de hook draait de swap terug (",[25,797,318],{},"), en bij elke andere pool wordt wat die niet kan besteden aan de aanroeper terugbetaald.",[18,800,802],{"id":801},"een-duel-lanceren","Een duel lanceren",[14,804,805,808,809,812,813,152,816,152,819,152,822,825,826,152,829,152,832,835,836,152,839,841,842,845,846,849,850,853,854,857,858,558],{},[25,806,807],{},"DuelFactory.createPair(CreateParams)"," lanceert een duel; stuur de lanceringsvergoeding en de lanceringsaankopen mee, een eventueel teveel wordt terugbetaald. ",[25,810,811],{},"CreateParams"," bestaat uit ",[25,814,815],{},"nameA",[25,817,818],{},"symbolA",[25,820,821],{},"nameD",[25,823,824],{},"symbolD"," (kant B), ",[25,827,828],{},"metadataURI",[25,830,831],{},"buyA",[25,833,834],{},"buyD"," (de ETH die bij de lancering aan elke kant wordt besteed, zonder anti-snipebelasting), ",[25,837,838],{},"supporter",[25,840,159],{}," (volgens de nummering van de categorieën in de app, 0 voor geen) en ",[25,843,844],{},"config",", de ",[25,847,848],{},"configHash()"," van de factory zoals je die hebt gelezen: de lancering draait terug met ",[25,851,852],{},"ConfigChanged"," als de voorwaarden sindsdien zijn veranderd. Een naam telt 1 tot 128 bytes, een ticker 1 tot 40 en de metadata-URI hooguit 4096 (",[25,855,856],{},"InvalidMetadata","); een lanceringsaankoop boven 5% van de supply van een kant draait terug (",[25,859,860],{},"CreatorBuyTooLarge",[14,862,863,864,867,868,871,872,875,876,879],{},"De factory begint met gepauzeerde lanceringen. Zolang ",[25,865,866],{},"paused()"," true is, kan alleen ",[25,869,870],{},"owner()"," een duel lanceren; aanroepen van anderen worden teruggedraaid met ",[25,873,874],{},"CreationPaused",". De eigenaar opent de lanceringen met ",[25,877,878],{},"setPaused(false)",". Bestaande duels blijven verhandelbaar.",[18,881,883],{"id":882},"events","Events",[226,885,886,899],{},[229,887,888],{},[232,889,890,893,896],{},[235,891,892],{},"Contract",[235,894,895],{},"Event",[235,897,898],{},"Wanneer",[251,900,901,914,930,942,954,966,978,990,1002,1014,1026,1038,1054,1072,1084],{},[232,902,903,906,911],{},[256,904,905],{},"DuelFactory",[256,907,908],{},[25,909,910],{},"PairCreated(pairId, creator, tokenA, tokenD)",[256,912,913],{},"Er werd een duel gelanceerd",[232,915,916,919,924],{},[256,917,918],{},"DuelHook",[256,920,921],{},[25,922,923],{},"PairRegistered(pairId, tokenA, tokenD, creator, category)",[256,925,926,927,929],{},"Zijn pools werden bij de hook geregistreerd, in dezelfde transactie; ",[25,928,159],{}," is waar het over gaat, volgens de nummering van de categorieën in de app (0 voor geen)",[232,931,932,934,939],{},[256,933,918],{},[256,935,936],{},[25,937,938],{},"FeeTaken(pairId, fee, snipeTax)",[256,940,941],{},"Een trade tegen ETH betaalde zijn vergoeding",[232,943,944,946,951],{},[256,945,918],{},[256,947,948],{},[25,949,950],{},"SwitchFeeBurned(pairId, token, amount)",[256,952,953],{},"Een wissel verbrandde zijn vergoeding",[232,955,956,958,963],{},[256,957,918],{},[256,959,960],{},[25,961,962],{},"ArbitrageCaptured(pairId, profit)",[256,964,965],{},"De herschikking vulde de pot",[232,967,968,970,975],{},[256,969,918],{},[256,971,972],{},[25,973,974],{},"RoundSettled(pairId, roundIndex, averageTick, winner, ethSpent, tokensBurned)",[256,976,977],{},"Een ronde werd gesloten",[232,979,980,982,987],{},[256,981,918],{},[256,983,984],{},[25,985,986],{},"CreatorFeesClaimed(pairId, to, amount)",[256,988,989],{},"Een creator werd betaald",[232,991,992,994,999],{},[256,993,905],{},[256,995,996],{},[25,997,998],{},"CreatorTransferStarted(pairId, creator, newCreator)",[256,1000,1001],{},"Een creator bood zijn rol aan (aan het nuladres: aanbod ingetrokken)",[232,1003,1004,1006,1011],{},[256,1005,918],{},[256,1007,1008],{},[25,1009,1010],{},"CreatorChanged(pairId, from, to)",[256,1012,1013],{},"De creatorrol van een duel ging over in andere handen",[232,1015,1016,1018,1023],{},[256,1017,918],{},[256,1019,1020],{},[25,1021,1022],{},"CreatorFeesGivenUp(pairId, creator)",[256,1024,1025],{},"De maker heeft zijn aandeel van toekomstige kosten permanent naar de potten gestuurd",[232,1027,1028,1030,1035],{},[256,1029,918],{},[256,1031,1032],{},[25,1033,1034],{},"ProtocolFeesClaimed(to, amount)",[256,1036,1037],{},"De treasury werd betaald",[232,1039,1040,1042,1047],{},[256,1041,918],{},[256,1043,1044],{},[25,1045,1046],{},"ProtocolRateSet(rateBps)",[256,1048,1049,1050,1053],{},"Het deel van het protocol in de swapvergoeding van alle duels is meteen veranderd: het neemt er ",[25,1051,1052],{},"rateBps"," van (10.000 voor alles), de rest gaat naar de pots",[232,1055,1056,1058,1069],{},[256,1057,905],{},[256,1059,1060,152,1063,152,1066],{},[25,1061,1062],{},"ConfigProposed(config, eta)",[25,1064,1065],{},"ConfigApplied(config)",[25,1067,1068],{},"ConfigCancelled()",[256,1070,1071],{},"Lanceringsvoorwaarden voorgesteld voor over 48 uur, toegepast, ingetrokken",[232,1073,1074,1076,1081],{},[256,1075,905],{},[256,1077,1078],{},[25,1079,1080],{},"PausedSet(paused)",[256,1082,1083],{},"Lanceringen gepauzeerd of hervat",[232,1085,1086,1089,1094],{},[256,1087,1088],{},"PoolManager",[256,1090,1091],{},[25,1092,1093],{},"Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee)",[256,1095,1096,1097,1100],{},"Elke trade, inclusief de eigen herschikking van de hook (zijn ",[25,1098,1099],{},"sender"," is de hook)",[14,1102,1103,1104,1107],{},"Tradelijsten lezen swaps uit alle drie de pools; de prijs- en verdelingsgrafieken lezen alleen de twee ETH-pools. Holderlijsten gebruiken de ",[25,1105,1106],{},"Transfer","-events van de tokens. De subgraph indexeert swaps, saldi, holders en afgerekende rondes, zodat de app de geschiedenis kan laden zonder de chain vanaf de lancering opnieuw af te spelen.",[18,1109,1111],{"id":1110},"afrekenen-en-opeisen","Afrekenen en opeisen",[1113,1114,1115,1122,1132,1150],"ul",{},[1116,1117,1118,1121],"li",{},[25,1119,1120],{},"settle(pairId)"," rekent een afgelopen ronde af. Iedereen kan die aanroepen.",[1116,1123,1124,1127,1128,1131],{},[25,1125,1126],{},"claimCreatorFees(pairId)"," betaalt alleen de creator van het duel, de wallet die het lanceerde of het adres waaraan die zijn rol overdroeg; ",[25,1129,1130],{},"claimProtocolFees()"," betaalt de treasury die is ingesteld op het moment van opeisen. Iedereen kan beide opeisingen starten. De treasury kan veranderen na de wachttijd van 48 uur van de factory; een aanroeper kan geen andere ontvanger kiezen.",[1116,1133,1134,1137,1138,1141,1142,1145,1146,1149],{},[25,1135,1136],{},"transferCreator(pairId, newCreator)"," op de factory biedt de creatorrol van een duel aan, die ",[25,1139,1140],{},"acceptCreator(pairId)"," vanuit ",[25,1143,1144],{},"newCreator"," overneemt; ",[25,1147,1148],{},"pendingCreator(pairId)"," leest het aanbod. Alleen de creator biedt hem aan, en alleen het aangeboden adres neemt hem over.",[1116,1151,1152,1155],{},[25,1153,1154],{},"giveUpCreatorFees(pairId)"," op de hook stuurt het makersaandeel van toekomstige kosten permanent naar de rondepotten. Alleen de huidige maker kan de functie aanroepen. De maker kan al opgebouwde kosten nog steeds opeisen en de makersrol kan nog steeds worden overgedragen.",[1157,1158,1159],"style",{},"html pre.shiki code .s5TCs, html code.shiki .s5TCs{--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s_xSY, html code.shiki .s_xSY{--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .si6no, html code.shiki .si6no{--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s_NWU, html code.shiki .s_NWU{--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .s9nN2, html code.shiki .s9nN2{--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sTPum, html code.shiki .sTPum{--shiki-default:#1E754F;--shiki-dark:#4D9375}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s8w-G, html code.shiki .s8w-G{--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}",{"title":35,"searchDepth":90,"depth":381,"links":1161},[1162,1163,1164,1165,1166],{"id":20,"depth":90,"text":21},{"id":217,"depth":90,"text":218},{"id":801,"depth":90,"text":802},{"id":882,"depth":90,"text":883},{"id":1110,"depth":90,"text":1111},null,"Lees duels met DuelLens, verhandel hun pools met DuelRouter of elke Uniswap V4-router en volg de events van de hook: een gids voor bots en aggregators.","md",{},true,"\u002Fnl\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate",{"title":5,"description":1168},"nl\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","aOBhke70yvtbazxXppWF22NqXVY5zqMgSSXV9Ir5k44",1791232794259]