[{"data":1,"prerenderedAt":1177},["ShallowReactive",2],{"docs:hi:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate":3},{"id":4,"title":5,"body":6,"cover":1168,"description":1169,"extension":1170,"meta":1171,"navigation":1172,"path":1173,"seo":1174,"stem":1175,"__hash__":1176},"docs\u002Fhi\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate.md","Duel पर बनाएँ",{"type":7,"value":8,"toc":1161},"minimark",[9,13,17,22,29,131,187,215,219,225,306,313,337,343,349,450,453,535,557,564,657,698,701,721,782,800,804,862,881,884,1100,1107,1111,1157],[10,11,5],"h1",{"id":12},"duel-पर-बनाएँ",[14,15,16],"p",{},"Duel के पूल hook वाले मानक Uniswap V4 पूल हैं, और ऐप जो भी संख्या दिखाता है वह सार्वजनिक व्यू और इवेंट से आती है। बॉट, टर्मिनल, डैशबोर्ड और एग्रीगेटर बिना इजाज़त माँगे इस पर बना सकते हैं।",[18,19,21],"h2",{"id":20},"मुक़ाबला-पढ़ना","मुक़ाबला पढ़ना",[14,23,24,28],{},[25,26,27],"code",{},"DuelLens"," एक ही कॉल में किसी मुक़ाबले की हर जानकारी इकट्ठा करता है:",[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],{},"एक ",[25,135,81],{}," में मुक़ाबले की ID, क्रिएटर और मेटाडेटा URI, दोनों पक्ष (टोकन, नाम, सिंबल, सप्लाई, पूल क़ीमत और tick, प्रति टोकन ETH, पूल में असली ETH), तीनों पूल की, लाइव अनुपात (",[25,138,139],{},"gaugeBps",", बेसिस पॉइंट में पक्ष A का हिस्सा), अब तक का राउंड औसत (",[25,142,143],{},"roundGaugeBps","), पॉट, क्रिएटर फ़ीस, अब तक का कुल वॉल्यूम और बायबैक, मौजूदा एंटी-स्नाइप टैक्स, राउंड का क्रमांक, शुरुआत और अंत और उसमें ट्रेड हुआ या नहीं (",[25,146,147],{},"roundTraded","), लॉन्च का समय और tick (",[25,150,151],{},"launchTime",", ",[25,154,155],{},"startTick","), वह समर्थक मुक़ाबला है या नहीं, उसकी श्रेणी (",[25,158,159],{},"category",", ऐप की दी हुई संख्या में, कोई न हो तो 0), उसकी फ़ीस शर्तें (",[25,162,163],{},"fees",") और अपने हिस्से का वह भाग जो प्रोटोकॉल अभी लेता है (",[25,166,167],{},"protocolRateBps",", 10,000 में से) होता है: प्रोटोकॉल को स्वैप फ़ीस का ",[25,170,171],{},"fees.protocolShareBps × protocolRateBps \u002F 10,000"," मिलता है, और उस हिस्से का बाक़ी भाग पॉट को। कॉन्ट्रैक्ट और उनके ABI में पक्ष 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],{},"hook के पास छोटे व्यू भी हैं: ",[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()"," और ",[25,213,214],{},"firstRoundEnd(launchTime)",[18,216,218],{"id":217},"ट्रेड-करना","ट्रेड करना",[14,220,221,222,224],{},"कोई भी Uniswap V4 राउटर किसी मुक़ाबले के पूलों में ट्रेड कर सकता है। पूल की ",[25,223,198],{}," से बनाएँ:",[226,227,228,250],"table",{},[229,230,231],"thead",{},[232,233,234,238,241,244,247],"tr",{},[235,236,237],"th",{},"पूल",[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],{},"टोकन 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],{},"टोकन B",[256,287,270],{},[256,289,273],{},[232,291,292,295,298,301,303],{},[256,293,294],{},"A \u002F B",[256,296,297],{},"छोटे पते वाला टोकन",[256,299,300],{},"बड़े पते वाला",[256,302,270],{},[256,304,305],{},"60",[14,307,308,309,312],{},"hook अपनी फ़ीस return delta के ज़रिए लेता है, इसलिए क्वोट V4 Quoter से लें: उसके जवाबों में हर फ़ीस और टैक्स शामिल होता है। ETH के ज़रिए बदलाव, टोकन → ETH → दूसरा टोकन रास्ते पर उसका ",[25,310,311],{},"quoteExactInput"," है।",[14,314,315,316,319,320,211,322,152,325,328,329,332,333,336],{},"जिस स्वैप की फ़ीस hook उसके चलने से पहले लेता है (तय इनपुट वाली ख़रीद या बदलाव, तय आउटपुट वाली बिक्री), उसे पूरा भरना होता है: जिसे उसकी क़ीमत सीमा, या ETH की कमी वाला ETH पूल, बीच में रोक दे, वह ",[25,317,318],{},"PartialFill"," के साथ रिवर्ट हो जाता है। PoolManager किसी hook की त्रुटि को लपेट देता है: ",[25,321,318],{},[25,323,324],{},"ArbitrageStarved",[25,326,327],{},"WrappedError(address target, bytes4 selector, bytes reason, bytes details)"," के अंदर आते हैं, और जब V4 Quoter इनकी सूचना देता है तो ",[25,330,331],{},"UnexpectedRevertBytes(bytes revertData)"," के अंदर। hook की त्रुटि पढ़ने के लिए ",[25,334,335],{},"reason"," को डिकोड करें।",[14,338,339,340,342],{},"हर ट्रेड hook के पुनर्संतुलन पर ख़त्म होता है, जिसे अपनी गैस चाहिए: जो स्वैप उसके लिए बहुत कम गैस छोड़ता है, वह उसे छोड़ने के बजाय ",[25,341,324],{}," के साथ रिवर्ट होता है। स्वैप अनुमान से मिली गैस के साथ भेजें, उससे कम कभी नहीं, और कुछ गुंजाइश रखकर: राउंड के क्लोज़ के बाद का पहला स्वैप राउंड को सेटल भी करता है (उसका बायबैक, फिर एक पुनर्संतुलन, यानी लगभग 170,000 गैस और), जिसे क्लोज़ से पहले लगाया गया अनुमान नहीं गिनता। ऐप हर अनुमान में 500,000 गैस जोड़ता है।",[14,344,345,348],{},[25,346,347],{},"DuelRouter"," एक पूल में स्वैप के लिए एक कॉल देता है:",[30,350,352],{"className":32,"code":351,"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,353,354,364,378,389,400,410,421,429],{"__ignoreMap":35},[39,355,356,358,361],{"class":41,"line":42},[39,357,46],{"class":45},[39,359,360],{"class":49}," swapExactIn",[39,362,363],{"class":53},"(\n",[39,365,366,369,372,375],{"class":41,"line":90},[39,367,368],{"class":45},"    PoolKey",[39,370,371],{"class":45}," calldata",[39,373,374],{"class":61}," key",[39,376,377],{"class":53},",\n",[39,379,381,384,387],{"class":41,"line":380},3,[39,382,383],{"class":57},"    bool",[39,385,386],{"class":61}," zeroForOne",[39,388,377],{"class":53},[39,390,392,395,398],{"class":41,"line":391},4,[39,393,394],{"class":57},"    uint256",[39,396,397],{"class":61}," amountIn",[39,399,377],{"class":53},[39,401,403,405,408],{"class":41,"line":402},5,[39,404,394],{"class":57},[39,406,407],{"class":61}," minAmountOut",[39,409,377],{"class":53},[39,411,413,416,419],{"class":41,"line":412},6,[39,414,415],{"class":57},"    address",[39,417,418],{"class":61}," recipient",[39,420,377],{"class":53},[39,422,424,426],{"class":41,"line":423},7,[39,425,394],{"class":57},[39,427,428],{"class":61}," deadline\n",[39,430,432,434,436,439,441,443,445,448],{"class":41,"line":431},8,[39,433,65],{"class":53},[39,435,68],{"class":45},[39,437,438],{"class":45}," payable",[39,440,75],{"class":74},[39,442,78],{"class":53},[39,444,58],{"class":57},[39,446,447],{"class":61}," amountOut",[39,449,87],{"class":53},[14,451,452],{},"और ETH के ज़रिए बदलाव के लिए एक, जिसमें छोड़ा जा रहा पक्ष अपने ETH पूल में बिकता है और मिला पूरा ETH दूसरे के पूल में ख़र्च होता है:",[30,454,456],{"className":32,"code":455,"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,457,458,467,478,489,497,505,513,519],{"__ignoreMap":35},[39,459,460,462,465],{"class":41,"line":42},[39,461,46],{"class":45},[39,463,464],{"class":49}," swapThroughEth",[39,466,363],{"class":53},[39,468,469,471,473,476],{"class":41,"line":90},[39,470,368],{"class":45},[39,472,371],{"class":45},[39,474,475],{"class":61}," keyIn",[39,477,377],{"class":53},[39,479,480,482,484,487],{"class":41,"line":380},[39,481,368],{"class":45},[39,483,371],{"class":45},[39,485,486],{"class":61}," keyOut",[39,488,377],{"class":53},[39,490,491,493,495],{"class":41,"line":391},[39,492,394],{"class":57},[39,494,397],{"class":61},[39,496,377],{"class":53},[39,498,499,501,503],{"class":41,"line":402},[39,500,394],{"class":57},[39,502,407],{"class":61},[39,504,377],{"class":53},[39,506,507,509,511],{"class":41,"line":412},[39,508,415],{"class":57},[39,510,418],{"class":61},[39,512,377],{"class":53},[39,514,515,517],{"class":41,"line":423},[39,516,394],{"class":57},[39,518,428],{"class":61},[39,520,521,523,525,527,529,531,533],{"class":41,"line":431},[39,522,65],{"class":53},[39,524,68],{"class":45},[39,526,75],{"class":74},[39,528,78],{"class":53},[39,530,58],{"class":57},[39,532,447],{"class":61},[39,534,87],{"class":53},[14,536,537,538,541,542,545,546,549,550,152,553,556],{},"Duel के ETH पूल में ऐसी बिक्री, जो पूल का ETH ख़त्म होने पर उसकी लॉन्च क़ीमत पर रुक जाती है, बाक़ी के लिए उसी कॉल में फिर भेजी जाती है, जब hook का पुनर्संतुलन पूल से वह वापस ख़रीद लेता है जो दोनों पक्षों के बीच वाला पूल लेता है: अधिकतम ",[25,539,540],{},"SALE_PASSES()"," (8) स्वैप, जब तक पूल की क़ीमत स्वैप की सीमा से नीचे रहे। हर स्वैप अपने ETH पर hook की फ़ीस देता है, और ",[25,543,544],{},"minAmountOut"," उन सबको गिनता है। Uniswap का V4 Quoter एक ही स्वैप का क्वोट देता है: उससे आगे, वह ",[25,547,548],{},"NotEnoughLiquidity"," लौटाता है। ऐप ऐसी बिक्री का क्वोट राउटर को ट्रेडर की तरह चलाकर निकालता है (स्टेट ओवरराइड वाला एक ",[25,551,552],{},"eth_call",[25,554,555],{},"DuelSimulator",")।",[14,558,559,560,563],{},"जिसे पुनर्संतुलन अब वापस नहीं ख़रीद सकता, उसकी बिक्री ",[25,561,562],{},"sell"," दोनों पक्षों के बीच वाले पूल से होकर दूसरे पक्ष के ETH पूल में जारी रखता है, जहाँ पुनर्संतुलनों ने वह ETH पहुँचा दिया है जो उसकी क़ीमत चुकाता है:",[30,565,567],{"className":32,"code":566,"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,568,569,578,588,599,610,618,626,634,640],{"__ignoreMap":35},[39,570,571,573,576],{"class":41,"line":42},[39,572,46],{"class":45},[39,574,575],{"class":49}," sell",[39,577,363],{"class":53},[39,579,580,582,584,586],{"class":41,"line":90},[39,581,368],{"class":45},[39,583,371],{"class":45},[39,585,475],{"class":61},[39,587,377],{"class":53},[39,589,590,592,594,597],{"class":41,"line":380},[39,591,368],{"class":45},[39,593,371],{"class":45},[39,595,596],{"class":61}," keyCross",[39,598,377],{"class":53},[39,600,601,603,605,608],{"class":41,"line":391},[39,602,368],{"class":45},[39,604,371],{"class":45},[39,606,607],{"class":61}," keyOther",[39,609,377],{"class":53},[39,611,612,614,616],{"class":41,"line":402},[39,613,394],{"class":57},[39,615,397],{"class":61},[39,617,377],{"class":53},[39,619,620,622,624],{"class":41,"line":412},[39,621,394],{"class":57},[39,623,407],{"class":61},[39,625,377],{"class":53},[39,627,628,630,632],{"class":41,"line":423},[39,629,415],{"class":57},[39,631,418],{"class":61},[39,633,377],{"class":53},[39,635,636,638],{"class":41,"line":431},[39,637,394],{"class":57},[39,639,428],{"class":61},[39,641,643,645,647,649,651,653,655],{"class":41,"line":642},9,[39,644,65],{"class":53},[39,646,68],{"class":45},[39,648,75],{"class":74},[39,650,78],{"class":53},[39,652,58],{"class":57},[39,654,447],{"class":61},[39,656,87],{"class":53},[14,658,659,661,662,665,666,669,670,673,674,677,678,680,681,683,684,687,688,690,691,694,695,697],{},[25,660,562],{}," पहले ",[25,663,664],{},"keyIn"," में वैसे ही बेचता है जैसे ",[25,667,668],{},"swapExactIn"," बेचता है, फिर जो बचा उसे ",[25,671,672],{},"keyCross"," से होकर भेजता है, जो वह सब ले लेता है (किसी भी बदलाव की तरह, उसकी बदलाव फ़ीस बर्न होती है), और फिर ",[25,675,676],{},"keyOther"," में बेचता है, यहाँ भी कई चरणों में। ",[25,679,544],{}," दोनों पूलों का ETH गिनता है। जिसे ",[25,682,676],{}," भी वापस नहीं ख़रीद सकता, वह ",[25,685,686],{},"recipient"," को उस पूल के टोकन में दिया जाता है, और न्यूनतम आउटपुट में नहीं गिना जाता। ऐप ",[25,689,562],{}," से तब बेचता है, जब V4 Quoter किसी बिक्री को ठुकरा देता है और ",[25,692,693],{},"DuelSimulator.simulateSale"," दिखाता है कि ",[25,696,562],{}," सब कुछ ETH के बदले बेच देता है।",[14,699,700],{},"कोई दूसरा V4 राउटर एक ही स्वैप करता है। hook तय इनपुट वाली ऐसी बिक्री को नहीं ठुकराता जो उतने से बड़ी हो जितना पूल का ETH चुका सकता है (उसकी फ़ीस स्वैप के बाद, चुकाए गए ETH पर ली जाती है): बिक्री आंशिक रूप से पूरी होती है, पूल की लॉन्च क़ीमत तक, और बाक़ी विक्रेता के पास रहता है। न्यूनतम आउटपुट उतना रखें जितना पूरा हो सकता है, और बाक़ी को बाद के किसी ट्रांज़ैक्शन में बेचें, उस हिस्से में जो पुनर्संतुलन ने वापस ख़रीदा है।",[14,702,703,704,706,707,152,710,211,713,716,717,720],{},"ख़रीदने के लिए ",[25,705,668],{}," के साथ ETH भेजें। बेचने या बदलने के लिए, राउटर को टोकन की अनुमति दें, या उसी ट्रांज़ैक्शन में किसी permit (EIP-2612) को यह अनुमति देने दें: ",[25,708,709],{},"swapExactInWithPermit",[25,711,712],{},"swapThroughEthWithPermit",[25,714,715],{},"sellWithPermit"," वही आर्ग्युमेंट लेते हैं, साथ में कॉल करने वाले का ठीक ",[25,718,719],{},"amountIn"," का permit, जो राउटर के लिए साइन हो:",[30,722,724],{"className":32,"code":723,"language":34,"meta":35,"style":35},"struct Permit {\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n}\n",[25,725,726,737,748,758,768,777],{"__ignoreMap":35},[39,727,728,731,734],{"class":41,"line":42},[39,729,730],{"class":45},"struct",[39,732,733],{"class":57}," Permit",[39,735,736],{"class":53}," {\n",[39,738,739,741,745],{"class":41,"line":90},[39,740,394],{"class":57},[39,742,744],{"class":743},"s8w-G"," deadline",[39,746,747],{"class":53},";\n",[39,749,750,753,756],{"class":41,"line":380},[39,751,752],{"class":57},"    uint8",[39,754,755],{"class":743}," v",[39,757,747],{"class":53},[39,759,760,763,766],{"class":41,"line":391},[39,761,762],{"class":57},"    bytes32",[39,764,765],{"class":743}," r",[39,767,747],{"class":53},[39,769,770,772,775],{"class":41,"line":402},[39,771,762],{"class":57},[39,773,774],{"class":743}," s",[39,776,747],{"class":53},[39,778,779],{"class":41,"line":412},[39,780,781],{"class":53},"}\n",[14,783,784,785,788,789,792,793,796,797,799],{},"यूज़र का वॉलेट हर Duel टोकन के permit को उस टोकन के पते वाले, ",[25,786,787],{},"Duel"," नाम और ",[25,790,791],{},"1"," वर्शन के EIP-712 डोमेन में साइन करता है (उसका ",[25,794,795],{},"eip712Domain()",", ERC-5267, यह बताता है)। राउटर पहले permit का इस्तेमाल करता है और उसकी नाकामी को अनदेखा करता है: किसी के पहले से भेजे गए permit ने अनुमति सेट कर दी होती है, और नाकाम permit कुछ नहीं बदलता; तब स्वैप उतना लेता है जितना पहले से मौजूद अनुमति कवर करती है, और कम पड़े तो रिवर्ट हो जाता है। आंशिक रूप से पूरा हुआ स्वैप अनुमति की बची हुई सीमा को बरक़रार रखता है। permit की डेडलाइन यह सीमित करती है कि उसका सिग्नेचर कब पेश किया जा सकता है; वह पहले से दी गई अनुमति को समाप्त नहीं करती। राउटर सिर्फ़ कॉल करने वाले से टोकन खींचता है। बदलाव का ETH दूसरे पूल के ख़र्च करने के लिए PoolManager में ही रहता है; Duel का पूल उसे पूरा ख़र्च करता है, वरना hook स्वैप को रिवर्ट कर देता है (",[25,798,318],{},"), और किसी दूसरे पूल पर जो वह ख़र्च नहीं कर पाता, वह कॉल करने वाले को लौटा दिया जाता है।",[18,801,803],{"id":802},"लॉन्च-करना","लॉन्च करना",[14,805,806,809,810,813,814,152,817,152,820,152,823,826,827,152,830,152,833,836,837,152,840,842,843,846,847,850,851,854,855,858,859,556],{},[25,807,808],{},"DuelFactory.createPair(CreateParams)"," एक मुक़ाबला लॉन्च करता है; इसके साथ लॉन्च फ़ीस और लॉन्च ख़रीद का ETH भेजें, जो ज़्यादा हो वह लौटा दिया जाता है। ",[25,811,812],{},"CreateParams"," में ",[25,815,816],{},"nameA",[25,818,819],{},"symbolA",[25,821,822],{},"nameD",[25,824,825],{},"symbolD"," (पक्ष B), ",[25,828,829],{},"metadataURI",[25,831,832],{},"buyA",[25,834,835],{},"buyD"," (लॉन्च पर हर पक्ष पर ख़र्च होने वाला ETH, एंटी-स्नाइप टैक्स से मुक्त), ",[25,838,839],{},"supporter",[25,841,159],{}," (उस संख्या के रूप में जो ऐप अपनी श्रेणियों को देता है, कोई न हो तो 0) और ",[25,844,845],{},"config"," होते हैं, यानी फ़ैक्टरी का ",[25,848,849],{},"configHash()",", जैसा आपने पढ़ा: अगर तब से शर्तें बदल गई हों, तो लॉन्च ",[25,852,853],{},"ConfigChanged"," के साथ रिवर्ट हो जाता है। नाम 1 से 128 बाइट का होता है, टिकर 1 से 40 का और मेटाडेटा URI अधिकतम 4,096 का (",[25,856,857],{},"InvalidMetadata","); किसी पक्ष की सप्लाई के 5% से ऊपर की लॉन्च ख़रीद रिवर्ट हो जाती है (",[25,860,861],{},"CreatorBuyTooLarge",[14,863,864,865,868,869,872,873,876,877,880],{},"फ़ैक्टरी लॉन्च रुके हुए होने की स्थिति में शुरू होती है। जब तक ",[25,866,867],{},"paused()"," true है, सिर्फ़ ",[25,870,871],{},"owner()"," मुक़ाबला लॉन्च कर सकता है; बाक़ी कॉल ",[25,874,875],{},"CreationPaused"," के साथ रिवर्ट होती हैं। मालिक ",[25,878,879],{},"setPaused(false)"," से लॉन्च खोलता है। मौजूदा मुक़ाबलों में ट्रेड जारी रहता है।",[18,882,883],{"id":883},"इवेंट",[226,885,886,898],{},[229,887,888],{},[232,889,890,893,895],{},[235,891,892],{},"कॉन्ट्रैक्ट",[235,894,883],{},[235,896,897],{},"कब",[251,899,900,913,929,941,953,965,977,989,1001,1013,1025,1037,1053,1071,1083],{},[232,901,902,905,910],{},[256,903,904],{},"DuelFactory",[256,906,907],{},[25,908,909],{},"PairCreated(pairId, creator, tokenA, tokenD)",[256,911,912],{},"कोई मुक़ाबला लॉन्च हुआ",[232,914,915,918,923],{},[256,916,917],{},"DuelHook",[256,919,920],{},[25,921,922],{},"PairRegistered(pairId, tokenA, tokenD, creator, category)",[256,924,925,926,928],{},"उसके पूल hook में रजिस्टर हुए, उसी ट्रांज़ैक्शन में; ",[25,927,159],{}," उसका विषय है, उस संख्या के रूप में जो ऐप अपनी श्रेणियों को देता है (कोई न हो तो 0)",[232,930,931,933,938],{},[256,932,917],{},[256,934,935],{},[25,936,937],{},"FeeTaken(pairId, fee, snipeTax)",[256,939,940],{},"ETH के बदले किसी ट्रेड ने अपनी फ़ीस चुकाई",[232,942,943,945,950],{},[256,944,917],{},[256,946,947],{},[25,948,949],{},"SwitchFeeBurned(pairId, token, amount)",[256,951,952],{},"किसी बदलाव ने अपनी फ़ीस बर्न की",[232,954,955,957,962],{},[256,956,917],{},[256,958,959],{},[25,960,961],{},"ArbitrageCaptured(pairId, profit)",[256,963,964],{},"पुनर्संतुलन ने पॉट भरा",[232,966,967,969,974],{},[256,968,917],{},[256,970,971],{},[25,972,973],{},"RoundSettled(pairId, roundIndex, averageTick, winner, ethSpent, tokensBurned)",[256,975,976],{},"कोई राउंड बंद हुआ",[232,978,979,981,986],{},[256,980,917],{},[256,982,983],{},[25,984,985],{},"CreatorFeesClaimed(pairId, to, amount)",[256,987,988],{},"किसी क्रिएटर को भुगतान हुआ",[232,990,991,993,998],{},[256,992,904],{},[256,994,995],{},[25,996,997],{},"CreatorTransferStarted(pairId, creator, newCreator)",[256,999,1000],{},"किसी क्रिएटर ने अपनी भूमिका ऑफ़र की (ज़ीरो पते को: ऑफ़र वापस लिया गया)",[232,1002,1003,1005,1010],{},[256,1004,917],{},[256,1006,1007],{},[25,1008,1009],{},"CreatorChanged(pairId, from, to)",[256,1011,1012],{},"किसी मुक़ाबले की क्रिएटर भूमिका दूसरे हाथ में गई",[232,1014,1015,1017,1022],{},[256,1016,917],{},[256,1018,1019],{},[25,1020,1021],{},"CreatorFeesGivenUp(pairId, creator)",[256,1023,1024],{},"क्रिएटर ने भविष्य की फ़ीस में अपना हिस्सा स्थायी रूप से पॉट को दे दिया",[232,1026,1027,1029,1034],{},[256,1028,917],{},[256,1030,1031],{},[25,1032,1033],{},"ProtocolFeesClaimed(to, amount)",[256,1035,1036],{},"ट्रेज़री को भुगतान हुआ",[232,1038,1039,1041,1046],{},[256,1040,917],{},[256,1042,1043],{},[25,1044,1045],{},"ProtocolRateSet(rateBps)",[256,1047,1048,1049,1052],{},"सभी मुक़ाबलों की स्वैप फ़ीस में प्रोटोकॉल का हिस्सा तुरंत बदला: वह उसका ",[25,1050,1051],{},"rateBps"," लेता है (पूरे के लिए 10,000), बाक़ी पॉट में जाता है",[232,1054,1055,1057,1068],{},[256,1056,904],{},[256,1058,1059,152,1062,152,1065],{},[25,1060,1061],{},"ConfigProposed(config, eta)",[25,1063,1064],{},"ConfigApplied(config)",[25,1066,1067],{},"ConfigCancelled()",[256,1069,1070],{},"लॉन्च की शर्तें 48 घंटे आगे के लिए प्रस्तावित हुईं, लागू हुईं, वापस ली गईं",[232,1072,1073,1075,1080],{},[256,1074,904],{},[256,1076,1077],{},[25,1078,1079],{},"PausedSet(paused)",[256,1081,1082],{},"लॉन्च रोके गए या फिर शुरू हुए",[232,1084,1085,1088,1093],{},[256,1086,1087],{},"PoolManager",[256,1089,1090],{},[25,1091,1092],{},"Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee)",[256,1094,1095,1096,1099],{},"हर ट्रेड, hook का अपना पुनर्संतुलन भी (उसका ",[25,1097,1098],{},"sender"," hook होता है)",[14,1101,1102,1103,1106],{},"ट्रेड की सूचियाँ तीनों पूलों से स्वैप पढ़ती हैं; क़ीमत और अनुपात के चार्ट सिर्फ़ दोनों ETH पूल पढ़ते हैं। होल्डर की सूचियाँ टोकन के ",[25,1104,1105],{},"Transfer"," इवेंट इस्तेमाल करती हैं। सबग्राफ़ स्वैप, बैलेंस, होल्डर और सेटल हुए राउंड इंडेक्स करता है, ताकि ऐप लॉन्च से चेन को दोबारा चलाए बिना इतिहास लोड कर सके।",[18,1108,1110],{"id":1109},"सेटल-और-क्लेम-करना","सेटल और क्लेम करना",[1112,1113,1114,1121,1131,1150],"ul",{},[1115,1116,1117,1120],"li",{},[25,1118,1119],{},"settle(pairId)"," ख़त्म हुआ राउंड सेटल करता है। इसे कोई भी कॉल कर सकता है।",[1115,1122,1123,1126,1127,1130],{},[25,1124,1125],{},"claimCreatorFees(pairId)"," सिर्फ़ मुक़ाबले के क्रिएटर को भुगतान करता है, यानी लॉन्च करने वाले वॉलेट को या उस पते को जिसे उसने अपनी भूमिका सौंपी; ",[25,1128,1129],{},"claimProtocolFees()"," क्लेम के समय सेट ट्रेज़री को भुगतान करता है। दोनों में से कोई भी क्लेम कोई भी शुरू कर सकता है। फ़ैक्टरी के 48 घंटे के इंतज़ार के बाद ट्रेज़री बदल सकती है; कॉल करने वाला कोई दूसरा पाने वाला नहीं चुन सकता।",[1115,1132,1133,1134,1137,1138,1141,1142,1145,1146,1149],{},"फ़ैक्टरी पर ",[25,1135,1136],{},"transferCreator(pairId, newCreator)"," किसी मुक़ाबले की क्रिएटर भूमिका ऑफ़र करता है, जिसे ",[25,1139,1140],{},"newCreator"," से कॉल किया गया ",[25,1143,1144],{},"acceptCreator(pairId)"," ले लेता है; ",[25,1147,1148],{},"pendingCreator(pairId)"," ऑफ़र पढ़ता है। इसे सिर्फ़ क्रिएटर ऑफ़र करता है, और सिर्फ़ ऑफ़र पाने वाला पता ही ले सकता है।",[1115,1151,1152,1153,1156],{},"hook पर ",[25,1154,1155],{},"giveUpCreatorFees(pairId)"," भविष्य की फ़ीस में क्रिएटर का हिस्सा स्थायी रूप से पॉट में भेजता है। सिर्फ़ मौजूदा क्रिएटर इसे कॉल कर सकता है। पहले से जमा फ़ीस क्रिएटर अब भी क्लेम कर सकता है, और क्रिएटर भूमिका अब भी सौंपी जा सकती है।",[1158,1159,1160],"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":380,"links":1162},[1163,1164,1165,1166,1167],{"id":20,"depth":90,"text":21},{"id":217,"depth":90,"text":218},{"id":802,"depth":90,"text":803},{"id":883,"depth":90,"text":883},{"id":1109,"depth":90,"text":1110},null,"DuelLens से मुक़ाबले पढ़ें, किसी भी V4 राउटर या DuelRouter से उनके Uniswap V4 पूलों में ट्रेड करें, hook के इवेंट फ़ॉलो करें: बॉट और एग्रीगेटर की गाइड।","md",{},true,"\u002Fhi\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate",{"title":5,"description":1169},"hi\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","MppU7ZUlEVy64rHGtvIQX10h-kEoXbvT4cbrjMy0Axs",1791232803409]