[{"data":1,"prerenderedAt":1174},["ShallowReactive",2],{"docs:it:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate":3},{"id":4,"title":5,"body":6,"cover":1165,"description":1166,"extension":1167,"meta":1168,"navigation":1169,"path":1170,"seo":1171,"stem":1172,"__hash__":1173},"docs\u002Fit\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate.md","Costruire su Duel",{"type":7,"value":8,"toc":1158},"minimark",[9,13,17,22,29,131,187,215,219,225,306,313,338,344,350,451,454,536,559,566,659,695,698,718,779,797,801,859,878,882,1099,1106,1110,1154],[10,11,5],"h1",{"id":12},"costruire-su-duel",[14,15,16],"p",{},"I pool di Duel sono pool Uniswap V4 standard con un hook, e ogni numero che l'app mostra viene da viste ed eventi pubblici. Bot, terminali, dashboard e aggregatori possono costruirci sopra senza chiedere permesso.",[18,19,21],"h2",{"id":20},"leggere-un-duello","Leggere un duello",[14,23,24,28],{},[25,26,27],"code",{},"DuelLens"," raccoglie tutto su un duello in una sola chiamata:",[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],{},"Un ",[25,135,81],{}," contiene l'id del duello, il suo creatore e l'URI dei suoi metadati, le due fazioni (token, nome, simbolo, offerta, prezzo e tick del pool, ETH per token, ETH reale nel pool), le tre chiavi dei pool, la ripartizione dal vivo (",[25,138,139],{},"gaugeBps",", la quota della fazione A in punti base), la media del round finora (",[25,142,143],{},"roundGaugeBps","), il piatto, le commissioni del creatore, il volume e i riacquisti totali, la tassa anti-snipe attuale, l'indice, l'inizio e la fine del round e se ha avuto operazioni (",[25,146,147],{},"roundTraded","), l'ora e il tick di lancio (",[25,150,151],{},"launchTime",", ",[25,154,155],{},"startTick","), se è un duello solidale, la sua categoria (",[25,158,159],{},"category",", secondo la numerazione dell'app, 0 per nessuna), i suoi termini di commissione (",[25,162,163],{},"fees",") e la parte della sua quota che il protocollo prende ora (",[25,166,167],{},"protocolRateBps",", su 10.000): il protocollo riceve ",[25,170,171],{},"fees.protocolShareBps × protocolRateBps \u002F 10.000"," della commissione di swap, e il piatto il resto di quella quota. Nei contratti e nelle loro ABI, la fazione 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],{},"L'hook ha viste più piccole: ",[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()"," e ",[25,213,214],{},"firstRoundEnd(launchTime)",[18,216,218],{"id":217},"fare-trading","Fare trading",[14,220,221,222,224],{},"Qualsiasi router Uniswap V4 può fare trading sui pool di un duello. Costruisci le chiavi dei pool a partire da ",[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],{},"l'indirizzo di token più basso",[256,299,300],{},"quello più alto",[256,302,270],{},[256,304,305],{},"60",[14,307,308,309,312],{},"L'hook preleva le sue commissioni tramite return delta, quindi quota con il V4 Quoter: le sue risposte includono ogni commissione e tassa. Un passaggio tramite ETH è il suo ",[25,310,311],{},"quoteExactInput"," lungo il percorso token → ETH → l'altro token.",[14,314,315,316,319,320,211,322,325,326,329,330,333,334,337],{},"Uno swap di cui l'hook preleva la commissione prima dell'esecuzione (un acquisto o un passaggio a input esatto, una vendita a output esatto) deve completarsi interamente: uno che il suo limite di prezzo, o un pool ETH a corto di ETH, fermerebbe prima fa revert con ",[25,317,318],{},"PartialFill",". Il PoolManager incapsula l'errore di un hook: ",[25,321,318],{},[25,323,324],{},"ArbitrageStarved"," arrivano dentro ",[25,327,328],{},"WrappedError(address target, bytes4 selector, bytes reason, bytes details)",", e dentro ",[25,331,332],{},"UnexpectedRevertBytes(bytes revertData)"," quando è il V4 Quoter a riportarli. Decodifica ",[25,335,336],{},"reason"," per leggere l'errore dell'hook.",[14,339,340,341,343],{},"Ogni operazione termina con il riallineamento dell'hook, che richiede gas proprio: uno swap che gliene lascia troppo poco fa revert con ",[25,342,324],{}," invece di saltarlo. Invia gli swap con il gas di una stima, mai meno, e con un margine: il primo swap dopo la chiusura di un round regola anche il round (il suo riacquisto, poi un riallineamento, circa 170.000 di gas in più), cosa che una stima fatta prima della chiusura non conta. L'app aggiunge 500.000 di gas a ogni stima.",[14,345,346,349],{},[25,347,348],{},"DuelRouter"," offre una chiamata per uno swap in un 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],{},"e una per un passaggio tramite ETH, in cui la fazione che lasci viene venduta nel suo pool ETH e tutto l'ETH ottenuto viene speso in quello dell'altra:",[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],{},"Una vendita in un pool ETH di Duel che si ferma al prezzo di lancio del pool, esaurito il suo ETH, viene inviata di nuovo per il resto nella stessa chiamata, una volta che il riallineamento dell'hook ha riacquistato dal pool ciò che assorbe il pool tra le fazioni: fino a ",[25,540,541],{},"SALE_PASSES()"," (8) swap, finché il prezzo del pool resta sotto il limite degli swap. Ognuno paga la commissione dell'hook sul proprio ETH, e ",[25,544,545],{},"minAmountOut"," li conta tutti. Il V4 Quoter di Uniswap quota un solo swap: oltre ciò che esegue, risponde ",[25,548,549],{},"NotEnoughLiquidity",". L'app quota una vendita simile eseguendo il router come il trader (una ",[25,552,553],{},"eth_call"," con uno state override, ",[25,556,557],{},"DuelSimulator",").",[14,560,561,562,565],{},"Ciò che il riallineamento non può più riacquistare, ",[25,563,564],{},"sell"," lo porta attraverso il pool tra le fazioni fino al pool ETH dell'altra fazione, dove i riallineamenti hanno spostato l'ETH che lo paga:",[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,662,665,666,669,670,673,674,677,678,680,681,683,684,687,688,690,691,694],{},"Vende in ",[25,663,664],{},"keyIn"," come fa ",[25,667,668],{},"swapExactIn",", poi ciò che resta attraverso ",[25,671,672],{},"keyCross",", che lo assorbe tutto (la sua commissione di passaggio viene bruciata, come in ogni passaggio), e in ",[25,675,676],{},"keyOther",", anche qui a più riprese. ",[25,679,545],{}," conta l'ETH di entrambi i pool. Ciò che nemmeno ",[25,682,676],{}," può riacquistare viene pagato a ",[25,685,686],{},"recipient"," nel token di quel pool, fuori dal minimo. L'app vende tramite ",[25,689,564],{}," quando il V4 Quoter rifiuta una vendita e ",[25,692,693],{},"DuelSimulator.simulateSale"," mostra che così si vende tutto contro ETH.",[14,696,697],{},"Un altro router V4 fa un solo swap. L'hook non rifiuta una vendita a input esatto che supera ciò che l'ETH del pool può pagare (la sua commissione è prelevata dopo lo swap, sull'ETH pagato): la vendita viene eseguita in parte, fino al prezzo di lancio del pool, e il resto rimane al venditore. Imposta il minimo ricevuto su ciò che può essere eseguito, e vendi il resto in una transazione successiva, contro ciò che il riallineamento ha riacquistato.",[14,699,700,701,703,704,152,707,211,710,713,714,717],{},"Invia ETH con ",[25,702,668],{}," per comprare. Per vendere o passare, approva il router per il token, oppure lascia che un permit (EIP-2612) lo approvi nella stessa transazione: ",[25,705,706],{},"swapExactInWithPermit",[25,708,709],{},"swapThroughEthWithPermit",[25,711,712],{},"sellWithPermit"," prendono gli stessi argomenti e il permit del chiamante per esattamente ",[25,715,716],{},"amountIn",", firmato per il router:",[30,719,721],{"className":32,"code":720,"language":34,"meta":35,"style":35},"struct Permit {\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n}\n",[25,722,723,734,745,755,765,774],{"__ignoreMap":35},[39,724,725,728,731],{"class":41,"line":42},[39,726,727],{"class":45},"struct",[39,729,730],{"class":57}," Permit",[39,732,733],{"class":53}," {\n",[39,735,736,738,742],{"class":41,"line":90},[39,737,395],{"class":57},[39,739,741],{"class":740},"s8w-G"," deadline",[39,743,744],{"class":53},";\n",[39,746,747,750,753],{"class":41,"line":381},[39,748,749],{"class":57},"    uint8",[39,751,752],{"class":740}," v",[39,754,744],{"class":53},[39,756,757,760,763],{"class":41,"line":392},[39,758,759],{"class":57},"    bytes32",[39,761,762],{"class":740}," r",[39,764,744],{"class":53},[39,766,767,769,772],{"class":41,"line":403},[39,768,759],{"class":57},[39,770,771],{"class":740}," s",[39,773,744],{"class":53},[39,775,776],{"class":41,"line":413},[39,777,778],{"class":53},"}\n",[14,780,781,782,785,786,789,790,793,794,796],{},"Il wallet dell'utente firma i permit per ogni token di Duel in un dominio EIP-712 chiamato ",[25,783,784],{},"Duel",", versione ",[25,787,788],{},"1",", con l'indirizzo del token (il suo ",[25,791,792],{},"eip712Domain()",", ERC-5267, lo dichiara). Il router usa prima il permit e ne ignora il fallimento: uno già inviato da chiunque ha impostato l'allowance, e uno che fallisce non cambia nulla; lo swap prende allora ciò che copre l'allowance già esistente e fa revert se non basta. Uno swap che si completa solo in parte lascia valida la quota non utilizzata dell'allowance. La scadenza del permit limita il termine entro cui la firma può essere presentata, ma non fa scadere l'allowance già concessa. Il router preleva token solo dal chiamante. L'ETH di un passaggio resta nel PoolManager perché lo spenda il secondo pool; un pool di Duel lo spende tutto o l'hook fa revert dello swap (",[25,795,318],{},"), e su qualsiasi altro pool ciò che non riesce a spendere viene restituito al chiamante.",[18,798,800],{"id":799},"lanciare-un-duello","Lanciare un duello",[14,802,803,806,807,810,811,152,814,152,817,152,820,823,824,152,827,152,830,833,834,152,837,839,840,843,844,847,848,851,852,855,856,558],{},[25,804,805],{},"DuelFactory.createPair(CreateParams)"," lancia un duello; invia con la chiamata la commissione di lancio e gli acquisti al lancio, l'eventuale eccedenza viene rimborsata. ",[25,808,809],{},"CreateParams"," contiene ",[25,812,813],{},"nameA",[25,815,816],{},"symbolA",[25,818,819],{},"nameD",[25,821,822],{},"symbolD"," (la fazione B), ",[25,825,826],{},"metadataURI",[25,828,829],{},"buyA",[25,831,832],{},"buyD"," (l'ETH speso su ogni fazione al lancio, senza la tassa anti-snipe), ",[25,835,836],{},"supporter",[25,838,159],{}," (secondo la numerazione delle categorie dell'app, 0 per nessuna) e ",[25,841,842],{},"config",", il ",[25,845,846],{},"configHash()"," della factory così come l'hai letto: il lancio fa revert con ",[25,849,850],{},"ConfigChanged"," se nel frattempo i termini sono cambiati. Un nome occupa da 1 a 128 byte, un ticker da 1 a 40 e l'URI dei metadati al massimo 4.096 (",[25,853,854],{},"InvalidMetadata","); un acquisto al lancio oltre il 5% dell'offerta di una fazione fa revert (",[25,857,858],{},"CreatorBuyTooLarge",[14,860,861,862,865,866,869,870,873,874,877],{},"La factory parte con i lanci in pausa. Finché ",[25,863,864],{},"paused()"," è true, solo ",[25,867,868],{},"owner()"," può lanciare un duello; le chiamate degli altri vengono annullate con ",[25,871,872],{},"CreationPaused",". Il proprietario apre i lanci con ",[25,875,876],{},"setPaused(false)",". I duelli esistenti continuano a essere scambiati.",[18,879,881],{"id":880},"eventi","Eventi",[226,883,884,897],{},[229,885,886],{},[232,887,888,891,894],{},[235,889,890],{},"Contratto",[235,892,893],{},"Evento",[235,895,896],{},"Quando",[251,898,899,912,928,940,952,964,976,988,1000,1012,1024,1036,1052,1070,1082],{},[232,900,901,904,909],{},[256,902,903],{},"DuelFactory",[256,905,906],{},[25,907,908],{},"PairCreated(pairId, creator, tokenA, tokenD)",[256,910,911],{},"È stato lanciato un duello",[232,913,914,917,922],{},[256,915,916],{},"DuelHook",[256,918,919],{},[25,920,921],{},"PairRegistered(pairId, tokenA, tokenD, creator, category)",[256,923,924,925,927],{},"I suoi pool sono stati registrati presso l'hook, nella stessa transazione; ",[25,926,159],{}," è il suo tema, secondo la numerazione delle categorie dell'app (0 per nessuna)",[232,929,930,932,937],{},[256,931,916],{},[256,933,934],{},[25,935,936],{},"FeeTaken(pairId, fee, snipeTax)",[256,938,939],{},"Un'operazione contro ETH ha pagato la sua commissione",[232,941,942,944,949],{},[256,943,916],{},[256,945,946],{},[25,947,948],{},"SwitchFeeBurned(pairId, token, amount)",[256,950,951],{},"Un passaggio ha bruciato la sua commissione",[232,953,954,956,961],{},[256,955,916],{},[256,957,958],{},[25,959,960],{},"ArbitrageCaptured(pairId, profit)",[256,962,963],{},"Il riallineamento ha riempito il piatto",[232,965,966,968,973],{},[256,967,916],{},[256,969,970],{},[25,971,972],{},"RoundSettled(pairId, roundIndex, averageTick, winner, ethSpent, tokensBurned)",[256,974,975],{},"Un round si è chiuso",[232,977,978,980,985],{},[256,979,916],{},[256,981,982],{},[25,983,984],{},"CreatorFeesClaimed(pairId, to, amount)",[256,986,987],{},"Un creatore è stato pagato",[232,989,990,992,997],{},[256,991,903],{},[256,993,994],{},[25,995,996],{},"CreatorTransferStarted(pairId, creator, newCreator)",[256,998,999],{},"Un creatore ha offerto il suo ruolo (all'indirizzo zero: offerta ritirata)",[232,1001,1002,1004,1009],{},[256,1003,916],{},[256,1005,1006],{},[25,1007,1008],{},"CreatorChanged(pairId, from, to)",[256,1010,1011],{},"Il ruolo di creatore di un duello è passato di mano",[232,1013,1014,1016,1021],{},[256,1015,916],{},[256,1017,1018],{},[25,1019,1020],{},"CreatorFeesGivenUp(pairId, creator)",[256,1022,1023],{},"Il creatore ha destinato definitivamente la propria quota delle commissioni future ai montepremi",[232,1025,1026,1028,1033],{},[256,1027,916],{},[256,1029,1030],{},[25,1031,1032],{},"ProtocolFeesClaimed(to, amount)",[256,1034,1035],{},"La tesoreria è stata pagata",[232,1037,1038,1040,1045],{},[256,1039,916],{},[256,1041,1042],{},[25,1043,1044],{},"ProtocolRateSet(rateBps)",[256,1046,1047,1048,1051],{},"La quota del protocollo sulla commissione di swap di tutti i duelli è cambiata subito: ne prende ",[25,1049,1050],{},"rateBps"," (10.000 per tutta), il resto va ai piatti",[232,1053,1054,1056,1067],{},[256,1055,903],{},[256,1057,1058,152,1061,152,1064],{},[25,1059,1060],{},"ConfigProposed(config, eta)",[25,1062,1063],{},"ConfigApplied(config)",[25,1065,1066],{},"ConfigCancelled()",[256,1068,1069],{},"Termini di lancio proposti con 48 ore di anticipo, applicati, ritirati",[232,1071,1072,1074,1079],{},[256,1073,903],{},[256,1075,1076],{},[25,1077,1078],{},"PausedSet(paused)",[256,1080,1081],{},"Lanci sospesi o ripresi",[232,1083,1084,1087,1092],{},[256,1085,1086],{},"PoolManager",[256,1088,1089],{},[25,1090,1091],{},"Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee)",[256,1093,1094,1095,1098],{},"Ogni operazione, compreso il riallineamento dell'hook stesso (il suo ",[25,1096,1097],{},"sender"," è l'hook)",[14,1100,1101,1102,1105],{},"Gli elenchi delle operazioni leggono gli swap di tutti e tre i pool; i grafici del prezzo e della ripartizione leggono solo i due pool ETH. Gli elenchi degli holder usano gli eventi ",[25,1103,1104],{},"Transfer"," dei token. Il subgraph indicizza swap, saldi, holder e round regolati, così l'app può caricare la storia senza rileggere la chain dal lancio.",[18,1107,1109],{"id":1108},"regolare-e-riscuotere","Regolare e riscuotere",[1111,1112,1113,1120,1130,1148],"ul",{},[1114,1115,1116,1119],"li",{},[25,1117,1118],{},"settle(pairId)"," regola un round finito. Chiunque può chiamarla.",[1114,1121,1122,1125,1126,1129],{},[25,1123,1124],{},"claimCreatorFees(pairId)"," paga solo il creatore del duello, il wallet che l'ha lanciato o l'indirizzo a cui ha ceduto il ruolo; ",[25,1127,1128],{},"claimProtocolFees()"," paga la tesoreria configurata al momento della riscossione. Chiunque può avviare l'una o l'altra riscossione. La tesoreria può cambiare dopo il periodo di 48 ore della factory; chi chiama non può scegliere un altro destinatario.",[1114,1131,1132,1135,1136,1139,1140,1143,1144,1147],{},[25,1133,1134],{},"transferCreator(pairId, newCreator)"," sulla factory offre il ruolo di creatore di un duello, che ",[25,1137,1138],{},"acceptCreator(pairId)"," chiamata da ",[25,1141,1142],{},"newCreator"," accetta; ",[25,1145,1146],{},"pendingCreator(pairId)"," legge l'offerta. Solo il creatore la offre, e solo l'indirizzo a cui è offerta la accetta.",[1114,1149,1150,1153],{},[25,1151,1152],{},"giveUpCreatorFees(pairId)"," sull’hook invia definitivamente la quota del creatore sulle commissioni future ai montepremi dei round. Solo il creatore attuale può chiamarla. Le commissioni già accumulate restano riscuotibili dal creatore e il ruolo di creatore può ancora essere trasferito.",[1155,1156,1157],"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":1159},[1160,1161,1162,1163,1164],{"id":20,"depth":90,"text":21},{"id":217,"depth":90,"text":218},{"id":799,"depth":90,"text":800},{"id":880,"depth":90,"text":881},{"id":1108,"depth":90,"text":1109},null,"Leggi i duelli con DuelLens, scambia i loro pool con DuelRouter o qualsiasi router Uniswap V4 e segui gli eventi dell'hook: la guida per bot e aggregatori.","md",{},true,"\u002Fit\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate",{"title":5,"description":1166},"it\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","ZxYkd289TREYf7oj6JntuGImkbgrWDbh-dHJQiPyKgA",1791232791726]