[{"data":1,"prerenderedAt":1175},["ShallowReactive",2],{"docs:ro:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate":3},{"id":4,"title":5,"body":6,"cover":1166,"description":1167,"extension":1168,"meta":1169,"navigation":1170,"path":1171,"seo":1172,"stem":1173,"__hash__":1174},"docs\u002Fro\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate.md","Construiește pe Duel",{"type":7,"value":8,"toc":1159},"minimark",[9,13,17,22,29,131,187,216,220,226,307,314,340,346,352,452,455,537,560,567,660,696,699,719,780,798,802,860,879,883,1100,1107,1111,1155],[10,11,5],"h1",{"id":12},"construiește-pe-duel",[14,15,16],"p",{},"Poolurile Duel sunt pooluri Uniswap V4 standard, cu un hook, iar fiecare cifră pe care o arată aplicația vine din\nvizualizări și evenimente publice. Boții, terminalele, dashboardurile și agregatoarele pot construi pe el fără să\nceară voie.",[18,19,21],"h2",{"id":20},"citirea-unui-duel","Citirea unui duel",[14,23,24,28],{},[25,26,27],"code",{},"DuelLens"," adună totul despre un duel într-un singur apel:",[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],{}," conține ID-ul duelului, creatorul și URI-ul metadatelor, ambele tabere (token, nume, simbol, ofertă,\nprețul și tickul poolului, ETH pe token, ETH-ul real din pool), cele trei chei de pool, repartiția live (",[25,138,139],{},"gaugeBps",",\npartea taberei A în puncte de bază), media rundei de până acum (",[25,142,143],{},"roundGaugeBps","), potul, comisioanele de creator,\nvolumul și răscumpărările all-time, taxa anti-snipe curentă, indexul, începutul și sfârșitul rundei și dacă s-a\ntranzacționat în ea (",[25,146,147],{},"roundTraded","), momentul și tickul lansării (",[25,150,151],{},"launchTime",", ",[25,154,155],{},"startTick","), dacă este un duel\nsusținător, categoria lui (",[25,158,159],{},"category",", după numerotarea aplicației, 0 pentru niciuna), condițiile lui de comision\n(",[25,162,163],{},"fees",") și cât din partea sa ia protocolul acum (",[25,166,167],{},"protocolRateBps",", din 10.000): protocolul primește\n",[25,170,171],{},"fees.protocolShareBps × protocolRateBps \u002F 10.000"," din comisionul de swap, iar potul restul acelei părți. În contracte\nși în ABI-urile lor, tabăra B se numește ",[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,202,203,152,206,152,209,212,213,186],{},"Hookul are vizualizări mai mici: ",[25,191,192],{},"pairCount()",[25,194,195],{},"getPair(pairId)",[25,197,198],{},"poolKeys(pairId)",[25,200,201],{},"gaugeBps(pairId)",",\n",[25,204,205],{},"snipeTaxBps(pairId)",[25,207,208],{},"protocolRateBps()",[25,210,211],{},"protocolFees()"," și ",[25,214,215],{},"firstRoundEnd(launchTime)",[18,217,219],{"id":218},"tranzacționarea","Tranzacționarea",[14,221,222,223,225],{},"Orice router Uniswap V4 poate tranzacționa poolurile unui duel. Construiește cheile de pool din ",[25,224,198],{},":",[227,228,229,251],"table",{},[230,231,232],"thead",{},[233,234,235,239,242,245,248],"tr",{},[236,237,238],"th",{},"Pool",[236,240,241],{},"currency0",[236,243,244],{},"currency1",[236,246,247],{},"fee",[236,249,250],{},"tickSpacing",[252,253,254,275,291],"tbody",{},[233,255,256,260,266,269,272],{},[257,258,259],"td",{},"ETH \u002F A",[257,261,262,263,65],{},"ETH (",[25,264,265],{},"address(0)",[257,267,268],{},"tokenul A",[257,270,271],{},"0",[257,273,274],{},"200",[233,276,277,280,284,287,289],{},[257,278,279],{},"ETH \u002F B",[257,281,262,282,65],{},[25,283,265],{},[257,285,286],{},"tokenul B",[257,288,271],{},[257,290,274],{},[233,292,293,296,299,302,304],{},[257,294,295],{},"A \u002F B",[257,297,298],{},"adresa de token mai mică",[257,300,301],{},"cea mai mare",[257,303,271],{},[257,305,306],{},"60",[14,308,309,310,313],{},"Hookul își ia comisioanele prin return deltas, așa că cotează cu V4 Quoter: răspunsurile lui includ fiecare comision și\nfiecare taxă. O schimbare de tabără prin ETH înseamnă ",[25,311,312],{},"quoteExactInput"," pe drumul token → ETH → celălalt token.",[14,315,316,317,320,321,323,324,327,328,331,332,335,336,339],{},"Un swap căruia hookul îi ia comisionul înainte să ruleze (o cumpărare sau o schimbare de tabără cu intrare exactă, o\nvânzare cu ieșire exactă) trebuie să se execute integral: unul pe care limita lui de preț, sau un pool ETH fără destul\nETH, l-ar opri mai devreme e anulat cu ",[25,318,319],{},"PartialFill",". PoolManager împachetează eroarea unui hook: ",[25,322,319],{}," și\n",[25,325,326],{},"ArbitrageStarved"," sosesc în ",[25,329,330],{},"WrappedError(address target, bytes4 selector, bytes reason, bytes details)",", iar în\n",[25,333,334],{},"UnexpectedRevertBytes(bytes revertData)"," când le raportează V4 Quoter. Decodează ",[25,337,338],{},"reason"," ca să citești eroarea hookului.",[14,341,342,343,345],{},"Fiecare tranzacție se încheie cu realinierea hookului, care are nevoie de gaz propriu: un swap care îi lasă prea puțin se anulează cu ",[25,344,326],{}," în loc să o sară. Trimite swapurile cu gazul dat de o estimare, niciodată mai puțin, și cu o marjă: primul swap de după închiderea unei runde decontează și runda (răscumpărarea ei, apoi o realiniere, cam 170.000 de gaz în plus), ceea ce o estimare făcută înainte de închidere nu socotește. Aplicația adaugă 500.000 de gaz la fiecare estimare.",[14,347,348,351],{},[25,349,350],{},"DuelRouter"," oferă un apel pentru un swap într-un singur pool:",[30,353,355],{"className":32,"code":354,"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,356,357,367,380,391,402,412,423,431],{"__ignoreMap":35},[39,358,359,361,364],{"class":41,"line":42},[39,360,46],{"class":45},[39,362,363],{"class":49}," swapExactIn",[39,365,366],{"class":53},"(\n",[39,368,369,372,375,378],{"class":41,"line":90},[39,370,371],{"class":45},"    PoolKey",[39,373,374],{"class":45}," calldata",[39,376,377],{"class":61}," key",[39,379,202],{"class":53},[39,381,383,386,389],{"class":41,"line":382},3,[39,384,385],{"class":57},"    bool",[39,387,388],{"class":61}," zeroForOne",[39,390,202],{"class":53},[39,392,394,397,400],{"class":41,"line":393},4,[39,395,396],{"class":57},"    uint256",[39,398,399],{"class":61}," amountIn",[39,401,202],{"class":53},[39,403,405,407,410],{"class":41,"line":404},5,[39,406,396],{"class":57},[39,408,409],{"class":61}," minAmountOut",[39,411,202],{"class":53},[39,413,415,418,421],{"class":41,"line":414},6,[39,416,417],{"class":57},"    address",[39,419,420],{"class":61}," recipient",[39,422,202],{"class":53},[39,424,426,428],{"class":41,"line":425},7,[39,427,396],{"class":57},[39,429,430],{"class":61}," deadline\n",[39,432,434,436,438,441,443,445,447,450],{"class":41,"line":433},8,[39,435,65],{"class":53},[39,437,68],{"class":45},[39,439,440],{"class":45}," payable",[39,442,75],{"class":74},[39,444,78],{"class":53},[39,446,58],{"class":57},[39,448,449],{"class":61}," amountOut",[39,451,87],{"class":53},[14,453,454],{},"și unul pentru o schimbare de tabără prin ETH, tabăra vândută în poolul ei ETH și tot ETH-ul obținut cheltuit în\npoolul celeilalte:",[30,456,458],{"className":32,"code":457,"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,459,460,469,480,491,499,507,515,521],{"__ignoreMap":35},[39,461,462,464,467],{"class":41,"line":42},[39,463,46],{"class":45},[39,465,466],{"class":49}," swapThroughEth",[39,468,366],{"class":53},[39,470,471,473,475,478],{"class":41,"line":90},[39,472,371],{"class":45},[39,474,374],{"class":45},[39,476,477],{"class":61}," keyIn",[39,479,202],{"class":53},[39,481,482,484,486,489],{"class":41,"line":382},[39,483,371],{"class":45},[39,485,374],{"class":45},[39,487,488],{"class":61}," keyOut",[39,490,202],{"class":53},[39,492,493,495,497],{"class":41,"line":393},[39,494,396],{"class":57},[39,496,399],{"class":61},[39,498,202],{"class":53},[39,500,501,503,505],{"class":41,"line":404},[39,502,396],{"class":57},[39,504,409],{"class":61},[39,506,202],{"class":53},[39,508,509,511,513],{"class":41,"line":414},[39,510,417],{"class":57},[39,512,420],{"class":61},[39,514,202],{"class":53},[39,516,517,519],{"class":41,"line":425},[39,518,396],{"class":57},[39,520,430],{"class":61},[39,522,523,525,527,529,531,533,535],{"class":41,"line":433},[39,524,65],{"class":53},[39,526,68],{"class":45},[39,528,75],{"class":74},[39,530,78],{"class":53},[39,532,58],{"class":57},[39,534,449],{"class":61},[39,536,87],{"class":53},[14,538,539,540,543,544,547,548,551,552,555,556,559],{},"O vânzare într-un pool ETH Duel care se oprește la prețul de lansare al poolului, cu ETH-ul epuizat, este trimisă din nou pentru rest în același apel, după ce realinierea hookului a răscumpărat din pool ceea ce preia poolul dintre tabere: până la ",[25,541,542],{},"SALE_PASSES()"," (8) swapuri, cât timp prețul poolului rămâne sub limita swapurilor. Fiecare plătește comisionul hookului pe propriul ETH, iar ",[25,545,546],{},"minAmountOut"," le numără pe toate. V4 Quoter de la Uniswap cotează un singur swap: dincolo de ce execută acesta, răspunde ",[25,549,550],{},"NotEnoughLiquidity",". Aplicația cotează o asemenea vânzare rulând routerul în locul traderului (un ",[25,553,554],{},"eth_call"," cu state override, ",[25,557,558],{},"DuelSimulator",").",[14,561,562,563,566],{},"Ce realinierea nu mai poate răscumpăra, ",[25,564,565],{},"sell"," duce mai departe prin poolul dintre tabere, până în poolul ETH al celeilalte tabere, unde realinierile au mutat ETH-ul care îl plătește:",[30,568,570],{"className":32,"code":569,"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,571,572,581,591,602,613,621,629,637,643],{"__ignoreMap":35},[39,573,574,576,579],{"class":41,"line":42},[39,575,46],{"class":45},[39,577,578],{"class":49}," sell",[39,580,366],{"class":53},[39,582,583,585,587,589],{"class":41,"line":90},[39,584,371],{"class":45},[39,586,374],{"class":45},[39,588,477],{"class":61},[39,590,202],{"class":53},[39,592,593,595,597,600],{"class":41,"line":382},[39,594,371],{"class":45},[39,596,374],{"class":45},[39,598,599],{"class":61}," keyCross",[39,601,202],{"class":53},[39,603,604,606,608,611],{"class":41,"line":393},[39,605,371],{"class":45},[39,607,374],{"class":45},[39,609,610],{"class":61}," keyOther",[39,612,202],{"class":53},[39,614,615,617,619],{"class":41,"line":404},[39,616,396],{"class":57},[39,618,399],{"class":61},[39,620,202],{"class":53},[39,622,623,625,627],{"class":41,"line":414},[39,624,396],{"class":57},[39,626,409],{"class":61},[39,628,202],{"class":53},[39,630,631,633,635],{"class":41,"line":425},[39,632,417],{"class":57},[39,634,420],{"class":61},[39,636,202],{"class":53},[39,638,639,641],{"class":41,"line":433},[39,640,396],{"class":57},[39,642,430],{"class":61},[39,644,646,648,650,652,654,656,658],{"class":41,"line":645},9,[39,647,65],{"class":53},[39,649,68],{"class":45},[39,651,75],{"class":74},[39,653,78],{"class":53},[39,655,58],{"class":57},[39,657,449],{"class":61},[39,659,87],{"class":53},[14,661,662,663,666,667,670,671,674,675,678,679,681,682,684,685,688,689,691,692,695],{},"Vinde în ",[25,664,665],{},"keyIn"," la fel ca ",[25,668,669],{},"swapExactIn",", apoi ce rămâne prin ",[25,672,673],{},"keyCross",", care preia tot (comisionul lui de schimbare a taberei se arde, ca la orice schimbare de tabără), și în ",[25,676,677],{},"keyOther",", tot în mai multe treceri. ",[25,680,546],{}," numără ETH-ul ambelor pooluri. Ce nu poate răscumpăra nici ",[25,683,677],{}," este plătit către ",[25,686,687],{},"recipient"," în tokenul acelui pool, în afara sumei minime. Aplicația vinde prin ",[25,690,565],{}," când V4 Quoter refuză o vânzare și ",[25,693,694],{},"DuelSimulator.simulateSale"," arată că astfel se vinde totul pe ETH.",[14,697,698],{},"Un alt router V4 face un singur swap. Hookul nu refuză o vânzare cu intrare exactă care trece de ce plătește ETH-ul poolului (comisionul lui se ia după swap, din ETH-ul plătit): vânzarea se execută în parte, până la prețul de lansare al poolului, iar restul rămâne la vânzător. Setează suma minimă primită pentru ce se poate executa și vinde restul într-o tranzacție ulterioară, în ce a răscumpărat realinierea.",[14,700,701,702,704,705,152,708,212,711,714,715,718],{},"Trimite ETH cu ",[25,703,669],{}," ca să cumperi. Ca să vinzi sau să schimbi, aprobă routerul pentru token sau lasă un permit\n(EIP-2612) să-l aprobe în aceeași tranzacție: ",[25,706,707],{},"swapExactInWithPermit",[25,709,710],{},"swapThroughEthWithPermit",[25,712,713],{},"sellWithPermit","\nprimesc aceleași argumente, plus permitul apelantului pentru exact ",[25,716,717],{},"amountIn",", semnat pentru router:",[30,720,722],{"className":32,"code":721,"language":34,"meta":35,"style":35},"struct Permit {\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n}\n",[25,723,724,735,746,756,766,775],{"__ignoreMap":35},[39,725,726,729,732],{"class":41,"line":42},[39,727,728],{"class":45},"struct",[39,730,731],{"class":57}," Permit",[39,733,734],{"class":53}," {\n",[39,736,737,739,743],{"class":41,"line":90},[39,738,396],{"class":57},[39,740,742],{"class":741},"s8w-G"," deadline",[39,744,745],{"class":53},";\n",[39,747,748,751,754],{"class":41,"line":382},[39,749,750],{"class":57},"    uint8",[39,752,753],{"class":741}," v",[39,755,745],{"class":53},[39,757,758,761,764],{"class":41,"line":393},[39,759,760],{"class":57},"    bytes32",[39,762,763],{"class":741}," r",[39,765,745],{"class":53},[39,767,768,770,773],{"class":41,"line":404},[39,769,760],{"class":57},[39,771,772],{"class":741}," s",[39,774,745],{"class":53},[39,776,777],{"class":41,"line":414},[39,778,779],{"class":53},"}\n",[14,781,782,783,786,787,790,791,794,795,797],{},"Portofelul tău semnează permiturile unui token Duel în domeniul EIP-712 al tokenului, numit ",[25,784,785],{},"Duel",", versiunea ",[25,788,789],{},"1",", folosind adresa tokenului\n(",[25,792,793],{},"eip712Domain()","-ul său, ERC-5267, o spune). Routerul folosește întâi permitul și îi ignoră eșecul: unul trimis deja de\noricine a setat aprobarea, iar unul care eșuează nu schimbă nimic, swapul luând atunci cât acoperă aprobarea existentă și\neșuând dacă nu ajunge. Un swap executat doar în parte păstrează aprobarea neutilizată. Termenul permitului limitează momentul în\ncare poate fi prezentată semnătura, fără să expire aprobarea deja acordată. Ia tokenuri doar de la apelant.\nETH-ul unei schimbări de tabără rămâne în PoolManager ca să-l cheltuiască al doilea pool; un pool Duel îl cheltuiește în\nîntregime sau hookul anulează swapul (",[25,796,319],{},"), iar pe orice alt pool ce nu poate cheltui îi e returnat apelantului.",[18,799,801],{"id":800},"lansarea-unui-duel","Lansarea unui duel",[14,803,804,807,808,811,812,152,815,152,818,152,821,824,825,152,828,152,831,834,835,152,838,840,841,844,845,848,849,852,853,856,857,559],{},[25,805,806],{},"DuelFactory.createPair(CreateParams)"," lansează un duel; trimite odată cu apelul comisionul de lansare și cumpărările la lansare, orice surplus este returnat. ",[25,809,810],{},"CreateParams"," conține ",[25,813,814],{},"nameA",[25,816,817],{},"symbolA",[25,819,820],{},"nameD",[25,822,823],{},"symbolD"," (tabăra B), ",[25,826,827],{},"metadataURI",[25,829,830],{},"buyA",[25,832,833],{},"buyD"," (ETH-ul cheltuit pe fiecare tabără la lansare, fără taxa anti-snipe), ",[25,836,837],{},"supporter",[25,839,159],{}," (după numerotarea categoriilor din aplicație, 0 pentru niciuna) și ",[25,842,843],{},"config",", adică ",[25,846,847],{},"configHash()"," al factory-ului așa cum l-ai citit: lansarea se anulează cu ",[25,850,851],{},"ConfigChanged"," dacă între timp condițiile s-au schimbat. Un nume are între 1 și 128 de octeți, un ticker între 1 și 40, iar URI-ul metadatelor cel mult 4096 (",[25,854,855],{},"InvalidMetadata","); o cumpărare la lansare de peste 5% din oferta unei tabere se anulează (",[25,858,859],{},"CreatorBuyTooLarge",[14,861,862,863,866,867,870,871,874,875,878],{},"Fabrica pornește cu lansările suspendate. Cât timp ",[25,864,865],{},"paused()"," este true, doar ",[25,868,869],{},"owner()"," poate lansa un duel; apelurile celorlalți sunt anulate cu ",[25,872,873],{},"CreationPaused",". Proprietarul deschide lansările prin ",[25,876,877],{},"setPaused(false)",". Duelurile existente se tranzacționează în continuare.",[18,880,882],{"id":881},"evenimente","Evenimente",[227,884,885,898],{},[230,886,887],{},[233,888,889,892,895],{},[236,890,891],{},"Contract",[236,893,894],{},"Eveniment",[236,896,897],{},"Când",[252,899,900,913,929,941,953,965,977,989,1001,1013,1025,1037,1053,1071,1083],{},[233,901,902,905,910],{},[257,903,904],{},"DuelFactory",[257,906,907],{},[25,908,909],{},"PairCreated(pairId, creator, tokenA, tokenD)",[257,911,912],{},"S-a lansat un duel",[233,914,915,918,923],{},[257,916,917],{},"DuelHook",[257,919,920],{},[25,921,922],{},"PairRegistered(pairId, tokenA, tokenD, creator, category)",[257,924,925,926,928],{},"Poolurile lui s-au înregistrat la hook, în aceeași tranzacție; ",[25,927,159],{}," este tema lui, după numerotarea categoriilor din aplicație (0 pentru niciuna)",[233,930,931,933,938],{},[257,932,917],{},[257,934,935],{},[25,936,937],{},"FeeTaken(pairId, fee, snipeTax)",[257,939,940],{},"O tranzacție contra ETH și-a plătit comisionul",[233,942,943,945,950],{},[257,944,917],{},[257,946,947],{},[25,948,949],{},"SwitchFeeBurned(pairId, token, amount)",[257,951,952],{},"O schimbare de tabără și-a ars comisionul",[233,954,955,957,962],{},[257,956,917],{},[257,958,959],{},[25,960,961],{},"ArbitrageCaptured(pairId, profit)",[257,963,964],{},"Realinierea a alimentat potul",[233,966,967,969,974],{},[257,968,917],{},[257,970,971],{},[25,972,973],{},"RoundSettled(pairId, roundIndex, averageTick, winner, ethSpent, tokensBurned)",[257,975,976],{},"S-a închis o rundă",[233,978,979,981,986],{},[257,980,917],{},[257,982,983],{},[25,984,985],{},"CreatorFeesClaimed(pairId, to, amount)",[257,987,988],{},"Un creator a fost plătit",[233,990,991,993,998],{},[257,992,904],{},[257,994,995],{},[25,996,997],{},"CreatorTransferStarted(pairId, creator, newCreator)",[257,999,1000],{},"Un creator și-a oferit rolul (adresei zero: oferta retrasă)",[233,1002,1003,1005,1010],{},[257,1004,917],{},[257,1006,1007],{},[25,1008,1009],{},"CreatorChanged(pairId, from, to)",[257,1011,1012],{},"Rolul de creator al unui duel a schimbat mâinile",[233,1014,1015,1017,1022],{},[257,1016,917],{},[257,1018,1019],{},[25,1020,1021],{},"CreatorFeesGivenUp(pairId, creator)",[257,1023,1024],{},"Creatorul și-a redirecționat definitiv partea din taxele viitoare către fonduri",[233,1026,1027,1029,1034],{},[257,1028,917],{},[257,1030,1031],{},[25,1032,1033],{},"ProtocolFeesClaimed(to, amount)",[257,1035,1036],{},"Trezoreria a fost plătită",[233,1038,1039,1041,1046],{},[257,1040,917],{},[257,1042,1043],{},[25,1044,1045],{},"ProtocolRateSet(rateBps)",[257,1047,1048,1049,1052],{},"Partea protocolului din comisionul de swap al tuturor duelurilor s-a schimbat imediat: ia ",[25,1050,1051],{},"rateBps"," din ea (10.000 pentru toată), restul merge în poturi",[233,1054,1055,1057,1068],{},[257,1056,904],{},[257,1058,1059,152,1062,152,1065],{},[25,1060,1061],{},"ConfigProposed(config, eta)",[25,1063,1064],{},"ConfigApplied(config)",[25,1066,1067],{},"ConfigCancelled()",[257,1069,1070],{},"Condiții de lansare propuse pentru peste 48 de ore, aplicate, retrase",[233,1072,1073,1075,1080],{},[257,1074,904],{},[257,1076,1077],{},[25,1078,1079],{},"PausedSet(paused)",[257,1081,1082],{},"Lansări suspendate sau reluate",[233,1084,1085,1088,1093],{},[257,1086,1087],{},"PoolManager",[257,1089,1090],{},[25,1091,1092],{},"Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee)",[257,1094,1095,1096,1099],{},"Fiecare tranzacție, inclusiv realinierea făcută de hook (",[25,1097,1098],{},"sender","-ul ei e hookul)",[14,1101,1102,1103,1106],{},"Listele de tranzacții citesc swapurile tuturor celor trei pooluri; graficele prețurilor și repartiției citesc numai cele două pooluri ETH. Listele de deținători folosesc evenimentele ",[25,1104,1105],{},"Transfer"," ale tokenurilor. Subgraphul indexează swapurile, soldurile, deținătorii și rundele decontate pentru a încărca istoricul fără reluarea lanțului de la lansare.",[18,1108,1110],{"id":1109},"decontarea-și-revendicarea","Decontarea și revendicarea",[1112,1113,1114,1121,1131,1149],"ul",{},[1115,1116,1117,1120],"li",{},[25,1118,1119],{},"settle(pairId)"," decontează o rundă încheiată. Oricine o poate apela.",[1115,1122,1123,1126,1127,1130],{},[25,1124,1125],{},"claimCreatorFees(pairId)"," plătește numai creatorul duelului, portofelul care l-a lansat sau adresa căreia i-a cedat rolul; ",[25,1128,1129],{},"claimProtocolFees()"," plătește trezoreria configurată la revendicare. Oricine poate declanșa apelurile. Trezoreria se poate schimba după termenul de 48 de ore al factory-ului; apelantul nu poate alege alt beneficiar.",[1115,1132,1133,1136,1137,1140,1141,1144,1145,1148],{},[25,1134,1135],{},"transferCreator(pairId, newCreator)"," pe factory oferă rolul de creator al unui duel, pe care ",[25,1138,1139],{},"acceptCreator(pairId)"," apelat de ",[25,1142,1143],{},"newCreator"," îl preia; ",[25,1146,1147],{},"pendingCreator(pairId)"," citește oferta. Doar creatorul îl oferă și doar adresa căreia i s-a oferit îl preia.",[1115,1150,1151,1154],{},[25,1152,1153],{},"giveUpCreatorFees(pairId)"," pe hook trimite definitiv partea creatorului din taxele viitoare către fondurile rundelor. Doar creatorul actual poate apela funcția. Taxele deja acumulate pot fi revendicate în continuare de creator, iar rolul de creator poate fi în continuare transferat.",[1156,1157,1158],"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":382,"links":1160},[1161,1162,1163,1164,1165],{"id":20,"depth":90,"text":21},{"id":218,"depth":90,"text":219},{"id":800,"depth":90,"text":801},{"id":881,"depth":90,"text":882},{"id":1109,"depth":90,"text":1110},null,"Citirea duelurilor cu DuelLens, tranzacționarea poolurilor cu DuelRouter sau orice router V4, evenimentele hookului: ghid pentru boți și agregatoare.","md",{},true,"\u002Fro\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate",{"title":5,"description":1167},"ro\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","gSoli-yejDdRBDDfXLwZf2tu-VHjuB1_ZSNDz_3SEeM",1791232786208]