[{"data":1,"prerenderedAt":1182},["ShallowReactive",2],{"docs:ar:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate":3},{"id":4,"title":5,"body":6,"cover":1173,"description":1174,"extension":1175,"meta":1176,"navigation":1177,"path":1178,"seo":1179,"stem":1180,"__hash__":1181},"docs\u002Far\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate.md","البناء على Duel",{"type":7,"value":8,"toc":1166},"minimark",[9,13,17,22,30,132,189,216,219,225,306,313,338,344,351,452,455,537,560,567,660,702,705,725,786,804,807,866,885,888,1106,1113,1117,1162],[10,11,5],"h1",{"id":12},"البناء-على-duel",[14,15,16],"p",{},"مجمّعات Duel هي مجمّعات Uniswap V4 قياسية مزوّدة بـhook، وكل رقم يعرضه التطبيق يأتي من واجهات وأحداث عامة. ويمكن للروبوتات والمنصات ولوحات المعلومات ومجمّعات الأسعار البناء عليها دون استئذان.",[18,19,21],"h2",{"id":20},"قراءة-مبارزة","قراءة مبارزة",[14,23,24,25,29],{},"يجمع ",[26,27,28],"code",{},"DuelLens"," كل ما يخص المبارزة في استدعاء واحد:",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"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","",[26,38,39,89],{"__ignoreMap":36},[40,41,44,48,52,56,60,64,67,70,73,77,80,83,86],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"s5TCs","function",[40,49,51],{"class":50},"s_xSY"," getPair",[40,53,55],{"class":54},"si6no","(",[40,57,59],{"class":58},"s_NWU","uint256",[40,61,63],{"class":62},"s9nN2"," pairId",[40,65,66],{"class":54},")",[40,68,69],{"class":46}," external",[40,71,72],{"class":46}," view",[40,74,76],{"class":75},"sTPum"," returns",[40,78,79],{"class":54}," (",[40,81,82],{"class":46},"PairView",[40,84,85],{"class":46}," memory",[40,87,88],{"class":54},");\n",[40,90,92,94,97,99,101,104,107,110,113,115,117,119,121,123,125,128,130],{"class":42,"line":91},2,[40,93,47],{"class":46},[40,95,96],{"class":50}," getPairs",[40,98,55],{"class":54},[40,100,59],{"class":58},[40,102,103],{"class":62}," offset",[40,105,106],{"class":54},",",[40,108,109],{"class":58}," uint256",[40,111,112],{"class":62}," limit",[40,114,66],{"class":54},[40,116,69],{"class":46},[40,118,72],{"class":46},[40,120,76],{"class":75},[40,122,79],{"class":54},[40,124,82],{"class":46},[40,126,127],{"class":54},"[]",[40,129,85],{"class":46},[40,131,88],{"class":54},[14,133,134,135,137,138,141,142,145,146,149,150,153,154,157,158,161,162,165,166,169,170,173,174,177,178,181,182,181,185,188],{},"يحتوي ",[26,136,82],{}," على معرّف المبارزة ومنشئها وURI بياناتها الوصفية، والجانبين (الرمز، والاسم، والرمز المختصر، والمعروض، وسعر المجمّع والـtick الخاص به، والـETH لكل رمز، والـETH الحقيقي في المجمّع)، ومفاتيح المجمّعات الثلاثة، والنسبة الحية (",[26,139,140],{},"gaugeBps","، حصة الجانب A بنقاط الأساس)، ومتوسط الجولة حتى الآن (",[26,143,144],{},"roundGaugeBps",")، والصندوق، ورسوم المنشئ، والحجم وعمليات إعادة الشراء منذ البداية، وضريبة مكافحة القنص الحالية، ورقم الجولة وبدايتها ونهايتها وهل جرت فيها صفقات (",[26,147,148],{},"roundTraded",")، ووقت الإطلاق والـtick عنده (",[26,151,152],{},"launchTime","، ",[26,155,156],{},"startTick",")، وهل هي مبارزة داعمة، وفئتها (",[26,159,160],{},"category","، وفق ترقيم التطبيق، 0 لغير المصنفة)، وشروط رسومها (",[26,163,164],{},"fees",")، والجزء الذي يأخذه البروتوكول الآن من حصته (",[26,167,168],{},"protocolRateBps","، من أصل 10,000): يحصل البروتوكول على ",[26,171,172],{},"fees.protocolShareBps × protocolRateBps \u002F 10,000"," من رسوم المبادلة، ويحصل الصندوق على باقي تلك الحصة. وفي العقود وواجهات ABI الخاصة بها، يُسمّى الجانب B باسم ",[26,175,176],{},"D",": ",[26,179,180],{},"d"," و",[26,183,184],{},"tokenD",[26,186,187],{},"keyD",".",[14,190,191,192,181,195,181,198,181,201,181,204,181,207,181,210,181,213,188],{},"وللـhook واجهات أصغر: ",[26,193,194],{},"pairCount()",[26,196,197],{},"getPair(pairId)",[26,199,200],{},"poolKeys(pairId)",[26,202,203],{},"gaugeBps(pairId)",[26,205,206],{},"snipeTaxBps(pairId)",[26,208,209],{},"protocolRateBps()",[26,211,212],{},"protocolFees()",[26,214,215],{},"firstRoundEnd(launchTime)",[18,217,218],{"id":218},"التداول",[14,220,221,222,224],{},"يمكن لأي موجّه Uniswap V4 التداول في مجمّعات المبارزة. ابنِ مفاتيح المجمّعات من ",[26,223,200],{},":",[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,66],{},"ETH (",[26,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,66],{},[26,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 deltas، لذا سعّر باستخدام V4 Quoter: فإجاباته تشمل كل الرسوم والضرائب. والتبديل عبر ETH هو ",[26,310,311],{},"quoteExactInput"," الخاص به على المسار: الرمز ← ETH ← الرمز الآخر.",[14,314,315,316,319,320,181,322,325,326,329,330,333,334,337],{},"المبادلة التي يقتطع الـhook رسومها قبل تنفيذها (شراء أو تبديل بمدخل محدد، أو بيع بمخرج محدد) يجب أن تكتمل بالكامل: فالمبادلة التي قد يوقفها مبكرًا حدّ سعرها، أو مجمّع ETH ينقصه الـETH، تُلغى بالخطأ ",[26,317,318],{},"PartialFill",". ويغلّف الـPoolManager خطأ الـhook: فيصل ",[26,321,318],{},[26,323,324],{},"ArbitrageStarved"," داخل ",[26,327,328],{},"WrappedError(address target, bytes4 selector, bytes reason, bytes details)","، وداخل ",[26,331,332],{},"UnexpectedRevertBytes(bytes revertData)"," حين يبلّغ عنهما V4 Quoter. فكّ ترميز ",[26,335,336],{},"reason"," لقراءة خطأ الـhook.",[14,339,340,341,343],{},"تنتهي كل صفقة بإعادة موازنة الـhook، وهي تحتاج إلى غازها الخاص: فالمبادلة التي تترك لها غازًا أقل من اللازم تُلغى بالخطأ ",[26,342,324],{}," بدلًا من تخطّيها. أرسل المبادلات بالغاز الذي يعطيه التقدير، لا أقل منه أبدًا، ومع هامش إضافي: فأول مبادلة بعد إغلاق جولة تسوّي الجولة أيضًا (إعادة الشراء فيها، ثم إعادة موازنة، أي نحو 170,000 وحدة غاز إضافية)، وهو ما لا يحتسبه تقدير أُجري قبل الإغلاق. ويضيف التطبيق 500,000 وحدة غاز إلى كل تقدير.",[14,345,346,347,350],{},"يوفّر ",[26,348,349],{},"DuelRouter"," استدعاءً لمبادلة في مجمّع واحد:",[31,352,354],{"className":33,"code":353,"language":35,"meta":36,"style":36},"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",[26,355,356,366,380,391,402,412,423,431],{"__ignoreMap":36},[40,357,358,360,363],{"class":42,"line":43},[40,359,47],{"class":46},[40,361,362],{"class":50}," swapExactIn",[40,364,365],{"class":54},"(\n",[40,367,368,371,374,377],{"class":42,"line":91},[40,369,370],{"class":46},"    PoolKey",[40,372,373],{"class":46}," calldata",[40,375,376],{"class":62}," key",[40,378,379],{"class":54},",\n",[40,381,383,386,389],{"class":42,"line":382},3,[40,384,385],{"class":58},"    bool",[40,387,388],{"class":62}," zeroForOne",[40,390,379],{"class":54},[40,392,394,397,400],{"class":42,"line":393},4,[40,395,396],{"class":58},"    uint256",[40,398,399],{"class":62}," amountIn",[40,401,379],{"class":54},[40,403,405,407,410],{"class":42,"line":404},5,[40,406,396],{"class":58},[40,408,409],{"class":62}," minAmountOut",[40,411,379],{"class":54},[40,413,415,418,421],{"class":42,"line":414},6,[40,416,417],{"class":58},"    address",[40,419,420],{"class":62}," recipient",[40,422,379],{"class":54},[40,424,426,428],{"class":42,"line":425},7,[40,427,396],{"class":58},[40,429,430],{"class":62}," deadline\n",[40,432,434,436,438,441,443,445,447,450],{"class":42,"line":433},8,[40,435,66],{"class":54},[40,437,69],{"class":46},[40,439,440],{"class":46}," payable",[40,442,76],{"class":75},[40,444,79],{"class":54},[40,446,59],{"class":58},[40,448,449],{"class":62}," amountOut",[40,451,88],{"class":54},[14,453,454],{},"واستدعاءً آخر للتبديل عبر ETH، يُباع فيه الجانب الذي تغادره في مجمّع ETH الخاص به ويُنفق كل الـETH الناتج في مجمّع الجانب الآخر:",[31,456,458],{"className":33,"code":457,"language":35,"meta":36,"style":36},"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",[26,459,460,469,480,491,499,507,515,521],{"__ignoreMap":36},[40,461,462,464,467],{"class":42,"line":43},[40,463,47],{"class":46},[40,465,466],{"class":50}," swapThroughEth",[40,468,365],{"class":54},[40,470,471,473,475,478],{"class":42,"line":91},[40,472,370],{"class":46},[40,474,373],{"class":46},[40,476,477],{"class":62}," keyIn",[40,479,379],{"class":54},[40,481,482,484,486,489],{"class":42,"line":382},[40,483,370],{"class":46},[40,485,373],{"class":46},[40,487,488],{"class":62}," keyOut",[40,490,379],{"class":54},[40,492,493,495,497],{"class":42,"line":393},[40,494,396],{"class":58},[40,496,399],{"class":62},[40,498,379],{"class":54},[40,500,501,503,505],{"class":42,"line":404},[40,502,396],{"class":58},[40,504,409],{"class":62},[40,506,379],{"class":54},[40,508,509,511,513],{"class":42,"line":414},[40,510,417],{"class":58},[40,512,420],{"class":62},[40,514,379],{"class":54},[40,516,517,519],{"class":42,"line":425},[40,518,396],{"class":58},[40,520,430],{"class":62},[40,522,523,525,527,529,531,533,535],{"class":42,"line":433},[40,524,66],{"class":54},[40,526,69],{"class":46},[40,528,76],{"class":75},[40,530,79],{"class":54},[40,532,59],{"class":58},[40,534,449],{"class":62},[40,536,88],{"class":54},[14,538,539,540,543,544,547,548,551,552,555,556,559],{},"البيع في مجمّع ETH من Duel الذي يتوقف عند سعر إطلاق المجمّع بعد نفاد ETH فيه يُرسَل مجددًا لما تبقّى في الاستدعاء نفسه، بعد أن تعيد إعادةُ موازنة الـhook شراءَ ما يستوعبه المجمّع الواقع بين الجانبين من المجمّع: حتى ",[26,541,542],{},"SALE_PASSES()"," (8) مبادلات، ما دام سعر المجمّع دون حدّ المبادلات. تدفع كل منها رسوم الـhook على ETH الخاص بها، ويحتسب ",[26,545,546],{},"minAmountOut"," جميعها. يسعّر V4 Quoter من Uniswap مبادلة واحدة: وما تجاوز ما تنفّذه يجيب عنه بـ ",[26,549,550],{},"NotEnoughLiquidity",". ويسعّر التطبيق مثل هذا البيع بتشغيل الموجّه بصفة المتداول (",[26,553,554],{},"eth_call"," مع تجاوز للحالة، ",[26,557,558],{},"DuelSimulator",").",[14,561,562,563,566],{},"أما ما لم تعد إعادة الموازنة قادرة على إعادة شرائه، فيتولّى ",[26,564,565],{},"sell"," بيعه عبر المجمّع الواقع بين الجانبين إلى مجمّع ETH الخاص بالجانب الآخر، حيث نقلت عمليات إعادة الموازنة الـETH الذي يدفع ثمنه:",[31,568,570],{"className":33,"code":569,"language":35,"meta":36,"style":36},"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",[26,571,572,581,591,602,613,621,629,637,643],{"__ignoreMap":36},[40,573,574,576,579],{"class":42,"line":43},[40,575,47],{"class":46},[40,577,578],{"class":50}," sell",[40,580,365],{"class":54},[40,582,583,585,587,589],{"class":42,"line":91},[40,584,370],{"class":46},[40,586,373],{"class":46},[40,588,477],{"class":62},[40,590,379],{"class":54},[40,592,593,595,597,600],{"class":42,"line":382},[40,594,370],{"class":46},[40,596,373],{"class":46},[40,598,599],{"class":62}," keyCross",[40,601,379],{"class":54},[40,603,604,606,608,611],{"class":42,"line":393},[40,605,370],{"class":46},[40,607,373],{"class":46},[40,609,610],{"class":62}," keyOther",[40,612,379],{"class":54},[40,614,615,617,619],{"class":42,"line":404},[40,616,396],{"class":58},[40,618,399],{"class":62},[40,620,379],{"class":54},[40,622,623,625,627],{"class":42,"line":414},[40,624,396],{"class":58},[40,626,409],{"class":62},[40,628,379],{"class":54},[40,630,631,633,635],{"class":42,"line":425},[40,632,417],{"class":58},[40,634,420],{"class":62},[40,636,379],{"class":54},[40,638,639,641],{"class":42,"line":433},[40,640,396],{"class":58},[40,642,430],{"class":62},[40,644,646,648,650,652,654,656,658],{"class":42,"line":645},9,[40,647,66],{"class":54},[40,649,69],{"class":46},[40,651,76],{"class":75},[40,653,79],{"class":54},[40,655,59],{"class":58},[40,657,449],{"class":62},[40,659,88],{"class":54},[14,661,662,663,665,666,669,670,673,674,677,678,681,682,684,685,687,688,691,692,694,695,698,699,701],{},"يبيع ",[26,664,565],{}," في ",[26,667,668],{},"keyIn"," كما يفعل ",[26,671,672],{},"swapExactIn","، ثم يمرّر ما تبقّى عبر ",[26,675,676],{},"keyCross","، الذي يستوعبه كله (وتُحرق رسوم التبديل فيه، كما في أي تبديل)، ثم يبيعه في ",[26,679,680],{},"keyOther","، على عدة مراحل هنا أيضًا. ويحتسب ",[26,683,546],{}," الـETH من المجمّعين معًا. وما لا يستطيع ",[26,686,680],{}," بدوره إعادة شرائه يُدفع إلى ",[26,689,690],{},"recipient"," برمز ذلك المجمّع، دون أن يُحتسب في الحد الأدنى. ويبيع التطبيق عبر ",[26,693,565],{}," حين يرفض V4 Quoter تسعير البيع ويُظهر ",[26,696,697],{},"DuelSimulator.simulateSale"," أن ",[26,700,565],{}," يبيع كل شيء مقابل ETH.",[14,703,704],{},"أما أي موجّه V4 آخر فينفّذ مبادلة واحدة. ولا يرفض الـhook بيعًا بمدخل محدد يتجاوز ما يدفع ثمنه الـETH في المجمّع (فرسومه تُقتطع بعد المبادلة، من الـETH المدفوع): يُنفَّذ البيع جزئيًا، نزولًا حتى سعر إطلاق المجمّع، ويبقى الباقي لدى البائع. حدّد الحد الأدنى للمخرج بما يمكن تنفيذه، وبِع الباقي في معاملة لاحقة، مقابل ما أعادت إعادة الموازنة شراءه.",[14,706,707,708,710,711,181,714,181,717,720,721,724],{},"أرسل ETH مع ",[26,709,672],{}," للشراء. وللبيع أو التبديل، امنح الموجّه موافقة على الرمز، أو دع permit ‏(EIP-2612) يمنحها في المعاملة نفسها: يأخذ ",[26,712,713],{},"swapExactInWithPermit",[26,715,716],{},"swapThroughEthWithPermit",[26,718,719],{},"sellWithPermit"," الوسائط نفسها، إضافةً إلى permit المستدعي بقيمة ",[26,722,723],{},"amountIn"," بالضبط، موقّعًا للموجّه:",[31,726,728],{"className":33,"code":727,"language":35,"meta":36,"style":36},"struct Permit {\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n}\n",[26,729,730,741,752,762,772,781],{"__ignoreMap":36},[40,731,732,735,738],{"class":42,"line":43},[40,733,734],{"class":46},"struct",[40,736,737],{"class":58}," Permit",[40,739,740],{"class":54}," {\n",[40,742,743,745,749],{"class":42,"line":91},[40,744,396],{"class":58},[40,746,748],{"class":747},"s8w-G"," deadline",[40,750,751],{"class":54},";\n",[40,753,754,757,760],{"class":42,"line":382},[40,755,756],{"class":58},"    uint8",[40,758,759],{"class":747}," v",[40,761,751],{"class":54},[40,763,764,767,770],{"class":42,"line":393},[40,765,766],{"class":58},"    bytes32",[40,768,769],{"class":747}," r",[40,771,751],{"class":54},[40,773,774,776,779],{"class":42,"line":404},[40,775,766],{"class":58},[40,777,778],{"class":747}," s",[40,780,751],{"class":54},[40,782,783],{"class":42,"line":414},[40,784,785],{"class":54},"}\n",[14,787,788,789,792,793,796,797,800,801,803],{},"توقّع محفظة المستخدم تصاريح permit لكل رمز من رموز Duel ضمن نطاق EIP-712 الخاص بالرمز، واسمه ",[26,790,791],{},"Duel","، الإصدار ",[26,794,795],{},"1","، باستخدام عنوان الرمز (ويعلن ذلك ",[26,798,799],{},"eip712Domain()"," الخاص به، وفق ERC-5267). ويستخدم الموجّه الـpermit أولًا ويتجاهل فشله: فالـpermit الذي أرسله أي أحد من قبل قد ضبط الموافقة، والذي يفشل لا يغيّر شيئًا؛ وعندها تأخذ المبادلة ما تغطيه الموافقة القائمة وتُلغى إن لم تكفِ. والمبادلة التي لا تكتمل إلا جزئيًا تُبقي مقدار الموافقة غير المستخدم. وتحدد مهلة الـpermit متى يمكن تقديم توقيعه، ولا تنهي الموافقة التي مُنحت بالفعل. ولا يسحب الموجّه الرموز إلا من المستدعي. ويبقى ETH التبديل في الـPoolManager لينفقه المجمّع الثاني؛ فمجمّع Duel ينفقه كله وإلا ألغى الـhook المبادلة (",[26,802,318],{},")، وفي أي مجمّع آخر يُعاد إلى المستدعي ما لا يستطيع إنفاقه.",[18,805,806],{"id":806},"الإطلاق",[14,808,809,810,813,814,817,818,181,821,181,824,181,827,830,831,181,834,181,837,840,841,181,844,846,847,850,851,854,855,858,859,862,863,559],{},"تطلق ",[26,811,812],{},"DuelFactory.createPair(CreateParams)"," مبارزة؛ أرسل معها رسوم الإطلاق ومبالغ الشراء عند الإطلاق، ويُعاد أي فائض. ويتكوّن ",[26,815,816],{},"CreateParams"," من ",[26,819,820],{},"nameA",[26,822,823],{},"symbolA",[26,825,826],{},"nameD",[26,828,829],{},"symbolD"," (الجانب B) و",[26,832,833],{},"metadataURI",[26,835,836],{},"buyA",[26,838,839],{},"buyD"," (الـETH المُنفَق على كل جانب عند الإطلاق، معفى من ضريبة مكافحة القنص) و",[26,842,843],{},"supporter",[26,845,160],{}," (وفق ترقيم الفئات في التطبيق، 0 لغير المصنفة) و",[26,848,849],{},"config","، وهو ",[26,852,853],{},"configHash()"," الخاص بالمصنع كما قرأته: يُلغى الإطلاق بالخطأ ",[26,856,857],{},"ConfigChanged"," إذا تغيّرت الشروط بعد ذلك. يتكوّن الاسم من 1 إلى 128 بايت، والرمز المختصر من 1 إلى 40، وURI البيانات الوصفية من 4,096 بايت على الأكثر (",[26,860,861],{},"InvalidMetadata",")؛ ويُلغى الشراء عند الإطلاق إذا تجاوز 5% من معروض الجانب (",[26,864,865],{},"CreatorBuyTooLarge",[14,867,868,869,872,873,876,877,880,881,884],{},"يبدأ المصنع مع إيقاف عمليات الإطلاق مؤقتًا. ما دامت ",[26,870,871],{},"paused()"," تساوي true، لا يستطيع إطلاق مبارزة إلا ",[26,874,875],{},"owner()","؛ وتُلغى استدعاءات الآخرين بخطأ ",[26,878,879],{},"CreationPaused",". يفتح المالك عمليات الإطلاق باستخدام ",[26,882,883],{},"setPaused(false)",". يستمر تداول المبارزات القائمة.",[18,886,887],{"id":887},"الأحداث",[226,889,890,903],{},[229,891,892],{},[232,893,894,897,900],{},[235,895,896],{},"العقد",[235,898,899],{},"الحدث",[235,901,902],{},"متى",[251,904,905,918,934,946,958,970,982,994,1006,1018,1030,1042,1058,1077,1089],{},[232,906,907,910,915],{},[256,908,909],{},"DuelFactory",[256,911,912],{},[26,913,914],{},"PairCreated(pairId, creator, tokenA, tokenD)",[256,916,917],{},"أُطلقت مبارزة",[232,919,920,923,928],{},[256,921,922],{},"DuelHook",[256,924,925],{},[26,926,927],{},"PairRegistered(pairId, tokenA, tokenD, creator, category)",[256,929,930,931,933],{},"سُجّلت مجمّعاتها لدى الـhook، في المعاملة نفسها؛ و",[26,932,160],{}," موضوعها وفق ترقيم الفئات في التطبيق (0 لغير المصنفة)",[232,935,936,938,943],{},[256,937,922],{},[256,939,940],{},[26,941,942],{},"FeeTaken(pairId, fee, snipeTax)",[256,944,945],{},"دفعت صفقة مقابل ETH رسومها",[232,947,948,950,955],{},[256,949,922],{},[256,951,952],{},[26,953,954],{},"SwitchFeeBurned(pairId, token, amount)",[256,956,957],{},"أحرق تبديلٌ رسومه",[232,959,960,962,967],{},[256,961,922],{},[256,963,964],{},[26,965,966],{},"ArbitrageCaptured(pairId, profit)",[256,968,969],{},"ملأت إعادة الموازنة الصندوق",[232,971,972,974,979],{},[256,973,922],{},[256,975,976],{},[26,977,978],{},"RoundSettled(pairId, roundIndex, averageTick, winner, ethSpent, tokensBurned)",[256,980,981],{},"أُغلقت جولة",[232,983,984,986,991],{},[256,985,922],{},[256,987,988],{},[26,989,990],{},"CreatorFeesClaimed(pairId, to, amount)",[256,992,993],{},"دُفع لمنشئ",[232,995,996,998,1003],{},[256,997,909],{},[256,999,1000],{},[26,1001,1002],{},"CreatorTransferStarted(pairId, creator, newCreator)",[256,1004,1005],{},"عرض منشئ دوره (إلى العنوان الصفري: سُحب العرض)",[232,1007,1008,1010,1015],{},[256,1009,922],{},[256,1011,1012],{},[26,1013,1014],{},"CreatorChanged(pairId, from, to)",[256,1016,1017],{},"انتقل دور المنشئ في مبارزة إلى عنوان آخر",[232,1019,1020,1022,1027],{},[256,1021,922],{},[256,1023,1024],{},[26,1025,1026],{},"CreatorFeesGivenUp(pairId, creator)",[256,1028,1029],{},"حوّل المنشئ حصته من الرسوم المستقبلية إلى الصناديق نهائيًا",[232,1031,1032,1034,1039],{},[256,1033,922],{},[256,1035,1036],{},[26,1037,1038],{},"ProtocolFeesClaimed(to, amount)",[256,1040,1041],{},"دُفع للخزينة",[232,1043,1044,1046,1051],{},[256,1045,922],{},[256,1047,1048],{},[26,1049,1050],{},"ProtocolRateSet(rateBps)",[256,1052,1053,1054,1057],{},"تغيّرت حصة البروتوكول من رسوم المبادلة في كل المبارزات فورًا: يأخذ منها ",[26,1055,1056],{},"rateBps"," (10,000 للحصة كاملة)، ويذهب الباقي إلى الصناديق",[232,1059,1060,1062,1074],{},[256,1061,909],{},[256,1063,1064,1067,1068,1067,1071],{},[26,1065,1066],{},"ConfigProposed(config, eta)",", ",[26,1069,1070],{},"ConfigApplied(config)",[26,1072,1073],{},"ConfigCancelled()",[256,1075,1076],{},"شروط إطلاق اقتُرحت لما بعد 48 ساعة، أو طُبّقت، أو سُحبت",[232,1078,1079,1081,1086],{},[256,1080,909],{},[256,1082,1083],{},[26,1084,1085],{},"PausedSet(paused)",[256,1087,1088],{},"أُوقفت عمليات الإطلاق أو استُؤنفت",[232,1090,1091,1094,1099],{},[256,1092,1093],{},"PoolManager",[256,1095,1096],{},[26,1097,1098],{},"Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee)",[256,1100,1101,1102,1105],{},"كل صفقة، بما فيها إعادة الموازنة التي يجريها الـhook نفسه (وفيها يكون ",[26,1103,1104],{},"sender"," هو الـhook)",[14,1107,1108,1109,1112],{},"تقرأ قوائم الصفقات المبادلات من المجمّعات الثلاثة؛ أما مخططات السعر والنسبة فلا تقرأ إلا مجمّعَي ETH. وتستخدم قوائم الحائزين أحداث ",[26,1110,1111],{},"Transfer"," الخاصة بالرموز. ويفهرس الـsubgraph المبادلات والأرصدة والحائزين والجولات المسوّاة، كي يحمّل التطبيق التاريخ دون إعادة تشغيل الشبكة منذ الإطلاق.",[18,1114,1116],{"id":1115},"التسوية-والمطالبة","التسوية والمطالبة",[1118,1119,1120,1127,1137,1155],"ul",{},[1121,1122,1123,1126],"li",{},[26,1124,1125],{},"settle(pairId)"," تسوّي جولة منتهية. ويمكن لأي أحد استدعاؤها.",[1121,1128,1129,1132,1133,1136],{},[26,1130,1131],{},"claimCreatorFees(pairId)"," لا تدفع إلا لمنشئ المبارزة: المحفظة التي أطلقتها أو العنوان الذي سلّمته دورها؛ و",[26,1134,1135],{},"claimProtocolFees()"," تدفع للخزينة المضبوطة وقت المطالبة. ويمكن لأي أحد تشغيل أيٍّ من المطالبتين. وقد تتغير الخزينة بعد مهلة المصنع البالغة 48 ساعة؛ ولا يستطيع المستدعي اختيار مستلم آخر.",[1121,1138,1139,1142,1143,1146,1147,1150,1151,1154],{},[26,1140,1141],{},"transferCreator(pairId, newCreator)"," على المصنع تعرض دور المنشئ في مبارزة، ويتولاه ",[26,1144,1145],{},"acceptCreator(pairId)"," حين يستدعيه ",[26,1148,1149],{},"newCreator","؛ وتقرأ ",[26,1152,1153],{},"pendingCreator(pairId)"," العرض. ولا يعرضه إلا المنشئ، ولا يتولاه إلا العنوان المعروض عليه.",[1121,1156,1157,1158,1161],{},"تُحوّل ",[26,1159,1160],{},"giveUpCreatorFees(pairId)"," على الهوك حصة المنشئ من الرسوم المستقبلية إلى صناديق الجولات نهائيًا. لا يستطيع استدعاءها إلا المنشئ الحالي. تظل الرسوم المتراكمة قابلة للمطالبة من قِبل المنشئ، ويظل نقل دور المنشئ ممكنًا.",[1163,1164,1165],"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":36,"searchDepth":91,"depth":382,"links":1167},[1168,1169,1170,1171,1172],{"id":20,"depth":91,"text":21},{"id":218,"depth":91,"text":218},{"id":806,"depth":91,"text":806},{"id":887,"depth":91,"text":887},{"id":1115,"depth":91,"text":1116},null,"اقرأ المبارزات عبر DuelLens، وتداول في مجمّعاتها على Uniswap V4 بأي موجّه V4 أو عبر DuelRouter، وتابع أحداث الـhook: دليل للروبوتات ومجمّعات الأسعار.","md",{},true,"\u002Far\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate",{"title":5,"description":1174},"ar\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","c_qAOgsnaeA_Ht9G4X2bJJAkA82V0Qd4TEIQb_HldOc",1791232795672]