687 ریڈنگز
687 ریڈنگز

Into the Dark Forest: انجینئرنگ کام DeFi Arbitrage

کی طرف سے Simone Convertini45m2025/05/31
Read on Terminal Reader

بہت لمبا؛ پڑھنے کے لئے

AMMs کے درمیان قیمت اختلافات کا استعمال کرتے ہوئے ایک کام کرنے والے DeFi تبادلہ خیال بٹن کی تعمیر کیسے کریں.
featured image - Into the Dark Forest: انجینئرنگ کام DeFi Arbitrage
Simone Convertini HackerNoon profile picture

1. Introduction —تاریک جنگل میں

1۔ انضمام -

ایک رات کے اختتام پر، ڈین روبنسن، سرمایہ کاری کمپنی Paradigm میں ایک محقق نے Uniswap Discord چینل میں ایک مصیبت کال دیکھا.دوایک اور صارف، لیکن Uniswap معاہدے کے لئے، جہاں وہ ناپسندیدہ طور پر کھو چکے تھے.

روبنسن، تاہم، امید کی ایک چمک دیکھتا تھا. وہ سمجھتا تھا کہ کوئی بھی اس کی وجہ سے شروع کر سکتا ہے.burnمعاہدے پر کام کرتا ہے، ایک عوامی فرمان ہے جو معاہدے کو اس شخص کو آزاد کرنے کے لئے مجبور کرے گا جو اسے کال کرتا ہے.

ایک سفید ہتھیار ہیرو بننے کا ایک موقع کو تسلیم کرتے ہوئے، روبنسن نے نجات کے معاملے کو تیار کیا. لیکن وہ جانتا تھا کہ وہ اکیلا نہیں ہے. Ethereum mempool - انتظار کرنے والے معاملات کے لئے عوامی منتظر کمرے - "جمع شدہ frontrunners" کے طور پر جانا جاتا ہے جس کے لئے پیچیدہ بوٹس کے لئے شکار کا میدان ہے.

ان سے بڑھنے کے لئے، روبنسن نے ایک ذہین دو حصوں کی ٹرانسمیشن کو ڈیزائن کیا، دونوں حصوں کو ایک ہی وقت میں نکالنے کی امید کرتے ہوئے، چھپانے کے لئے کوئی ونڈو نہیں چھوڑتے. یہ کام نہیں کیا. اس وقت جب اس کا پہلا ٹرانسمیشن ظاہر ہوا، ایک بوٹ اسے پتہ چلا، پورے حکمت عملی کو متعارف کرایا، اور روبنسن کا دوسرا ٹرانسمیشن بھی تصدیق کیا جا سکتا ہے سے پہلے 12،000 ڈالر نکالا.

اس واقعے کے بارے میں ایک حال ہی میں مشہور سسٹم میں، روبنسن نے اس دشمنی، نامعلوم اکیسسٹم کو ایک نام دیا.Ethereum is a Dark Forest.

اس مضمون میں، ہم ایک نظام کے ڈیزائن میں ڈالیں گے جو حقیقی وقت کے آپریشنز اور blockchain ٹرانسمیشنز سے اعداد و شمار کو پڑھنے کے قابل ہے، اس مقصد کے ساتھ تبادلہ خیال.mathematical models underlying AMM pricingاس کے اندر ڈبلalgorithms for opportunity detection and optimal price entrydefines کے لئےarchitectural componentsہم سے بات کرتے ہیں اور ہم سے بات کرتے ہیںcritical strategiesیہ ضروری ہے کہ اس اعلی شرط کے ماحول میں تبادلہ خیال کو کامیاب اور محفوظ طریقے سے انجام دیں.


The DeFi Landscape: AMMs, Liquidity, and Arbitration Opportunities: ڈیفائی پرچم: AMMs, Liquidity, and Arbitration امکانات

ہمارے انٹرویو میں بیان کردہ "ڈاک جنگل" صرف ایک دشمنی کے ماحول نہیں ہے؛ یہ ایک نئی مالیاتی پیرامیٹ پر تعمیر شدہ ایک حیاتیاتی ایشیائی نظام ہے: decentralized Finance (DeFi). اس کے بنیادی طور پر، DeFi blockchain نیٹ ورک پر روایتی مالیاتی خدمات کو دوبارہ تخلیق کرنے کا مقصد ہے، خود کار طریقے سے سمارٹ معاہدوں کا استعمال کرتے ہوئے منتظمین کی ضرورت کو ہٹا دیتا ہے. اس منظر کی بنیادی تعمیروں کو سمجھنے کے لئے اہم ہے کہ تبادلے کے امکانات کیسے پیدا ہوتے ہیں اور کیوں وہ اتنی سختی سے جھگڑا کیا جاتا ہے.

Automated Market Makers (AMMs): decentralized exchange کی بنیاد

روایتی تبادلے آرڈر کتابوں پر انحصار کرتے ہیں، جہاں خریدار اور فروخت کرنے والے پیشکش اور پوچھتے ہیں، اور ایک مرکزی موازنہ انجن ٹریڈنگ کو آسان بناتا ہے. ڈیفائی ایک بالکل مختلف ماڈل پیش کرتا ہے: آٹو مارکیٹ مینجمنٹ (AMM). خریداروں اور فروخت کرنے والوں کو براہ راست موازنہ کرنے کے بجائے، AMMs likidity pools - دو یا زیادہ tokens کے ذخائر رکھنے والے سمارٹ معاہدوں - ٹریڈز کو آسان بنانے کے لئے. صارفین، likidity providers (LPs) کے طور پر جانا جاتا ہے، token pairs کے برابر قیمتوں کو ان pools میں جمع کرتے ہیں، بدلے میں ٹریڈنگ فیس کا ایک حصہ حاصل کرتے ہیں.

ایک AMM بیل کے اندر اثاثوں کی قیمت algorithmicly کی طرف سے مقرر کیا جاتا ہےconstant product formulaUniswap کی طرف سے پیشہ ورانہ:

یہاں، x اور y likvidity pool میں دو tokens کی مقداروں کو نمائندگی کرتے ہیں، اور k ایک مستحکم ہے. جب ایک صارف ایک token کے لئے ایک دوسرے کے لئے تجارت کرتا ہے تو، pool میں x اور y کی مقداروں میں تبدیلی ہوتی ہے، لیکن ان کی مصنوعات k مستحکم رہنا چاہئے. یہ میکانیزم تیزی سے قیمت کو ایڈجسٹ کرتا ہے: token A کے زیادہ خریدنے میں اس کی مقدار میں کمی ہوگی، اس طرح token B کے مقابلے میں اس کی قیمت میں اضافہ ہوتا ہے، اور برعکس.bonding curve, جس میں تجارت کے لئے دستیاب قیمت پوائنٹس کو مقرر کرتا ہے.

اس ماڈل سے، یہ ایک سوپ سے پیداوار کی رقم (dy) کا تعین کرنے کے لئے ممکن ہے، انٹرویو کی رقم (dx) اور دو ٹوکنز (x اور y) کے پہلے سوپ کے ذخائر کی طرف سے:

Key characteristics of AMMs:

  • ہمیشہ لچکدار: حکم کتابوں کے برعکس جو ٹھنڈا ہوسکتے ہیں، AMMs ہمیشہ لچکدار پیش کرتے ہیں جب تک پول میں ٹوکن موجود ہیں.
  • اجازت کے بغیر: کسی بھی شخص کو اجازت کی ضرورت کے بغیر ایک لچکدار فراہم کنندہ بن سکتے ہیں یا ایک AMM پر تجارت کر سکتے ہیں.
  • قیمت کا پتہ لگانا: قیمتوں کو پول کے اندر اثاثوں کی شرح کی طرف سے مقرر کیا جاتا ہے، ہر تجارت کے ساتھ ترمیم.
  • Slippage: بڑے ٹریڈز ایک پول کے اندر قیمت کو قابل قدر طور پر منتقل کرسکتے ہیں، جس میں ایک واقعہ کو slippage کے طور پر جانا جاتا ہے، جہاں عملدرآمد قیمت کی قیمت کی قیمت سے بدتر ہے.

جبکہ x⋅y=k ماڈل (ایک بار Uniswap V2 کے طور پر کہا جاتا ہے) بنیادی بنیاد بناتا ہے، AMMs ترقی کر چکے ہیں. مثال کے طور پر، Uniswap V3 نے "کٹراٹڈ لیکیوٹی" (CLAMM) کو متعارف کرایا ہے، جس سے LPs کو اپنی سرمایہ کاری کو مخصوص قیمتوں میں تقسیم کرنے کی اجازت دیتا ہے. اس نے سرمایہ کاری کی کارکردگی کو اہمیت سے بہتر کیا لیکن LPs اور اس کے نتیجے میں مختلف رینجز پر لیکیوٹی کی پیروی کرنے کی ضرورت ہے.we will primarily focus on AMMsمسلسل مصنوعات فارمول کا استعمال کرتے ہوئے (مثال کے طور پر Uniswap V2 سٹائل پاؤنڈ) ، کیونکہ وہ زیادہ پیچیدہ ماڈل سے نمٹنے سے پہلے بنیادی سمجھ فراہم کرتے ہیں.

The Essence of Arbitrage in DeFi

تفتیش، اس کی سب سے پاک شکل میں، ایک ہی وقت میں مختلف مارکیٹوں میں ایک اثاثہ کی خریداری اور فروخت ہے کہ اس کی قیمت میں ایک فرق سے فائدہ اٹھانے کے لئے. DeFi میں، یہ مختلف AMM پولز کے درمیان یا ایک AMM اور ایک سینٹرل سائیکل (CEX) کے درمیان قیمت کے اختلافات کو استعمال کرنے کے لئے ترجمہ کرتا ہے. DeFi کی منفرد اجازت نامہ نوعیت اور مختلف پروٹوکولز کے درمیان تفریق شدہ likvidity ان امکانات کے لئے ایک فائدہ مند زمین بناتا ہے. اس پیدا ہونے والے مالی جگہ میں اعلی متغیریت اور غیر منظمات کی کمی اکثر قیمتوں میں اہم اختلافات کا باعث بناتا ہے، جو تفتیش کرنے والوں کی زندگی کا خون ہے.

DeFi میں Arbitrage کے امکانات کے اقسام

  • مثال کے طور پر، اگر 1 ETH Uniswap A پر 2000 DAI کے لئے ٹریڈنگ کرتا ہے، لیکن 1 ETH Uniswap B پر 2010 DAI کے لئے ٹریڈنگ کرتا ہے، تو ایک ہائیڈریٹر ایک DAI کے ساتھ Uniswap A پر ETH خرید سکتا ہے، اور فوری طور پر Uniswap B پر DAI کے لئے ETH کو فروخت کر سکتا ہے، 10 DAI فرق (جیسے گیس کی فیس اور سلیپنگ) کی جیب میں ڈالتا ہے.
  • Triangular Arbitration (Multi-Leg): اس قسم کے تبادلہ خیال میں ایک ہی تبادلے (یا کئی تبادلے کے ذریعے) کے اندر تین یا زیادہ اثاثوں کو منسلک کرنے کے لئے ایک منافع بخش سائیکل بناتا ہے. مثال کے طور پر، ایک تبادلہ خیال Token A کے ساتھ شروع کر سکتا ہے، Token B کے لئے اس کا تبادلہ، پھر Token B کو Token C کے لئے، اور آخر میں Token C کو Token A میں واپس، جو ان کے ساتھ شروع ہونے سے زیادہ Token A کے ساتھ ختم ہوسکتا ہے. Uniswap پر ایک عام مثال ہوسکتا ہے: WETH -> DAI -> USDC -> WETH. ہمارا بنیادی مقصد مختلف DEX AMMs کے درمیان Multi-Leg تبادلہ کو قائم کرنے اور چلانے کے لئے ہے.
  • فلیش کریڈٹ ایڈریٹریج: ڈیفائی کے ایک طاقتور اور منفرد پہلو، فلیش کریڈٹ صارفین کو غیر ذاتی اثاثوں کو قرض دینے کی اجازت دیتا ہے، ان کو ایک سلسلے کے معاملات کے لئے استعمال کرتے ہیں (جیسا کہ ایک ایڈریٹریج) اور قرض کی واپسی - سب کچھ ایک ہی blockchain ٹرانسمیشن کے اندر اندر اندر. اگر تمام آپریٹنگ کے سلسلے (بھی، ٹریڈنگ، واپسی) اس واحد ٹرانسمیشن کے اندر کامیابی سے مکمل نہیں کیا جا سکتا ہے تو، پوری ٹرانسمیشن واپس کی جاتی ہے، جیسے کہ یہ کبھی نہیں ہوا. یہ اہم پیشہ ورانہ سرمایہ کاری کی ضرورت کو ختم کرتا ہے اور بڑے پیمانے پر ایڈریٹریجنگ کے لئے داخل ہونے کے لئے حراست کو اہمیت سے کم کرتا ہے، لیکن اس کا

فائدہ کے لئے مقابلہ: چیلنجز اور مقابلہ

DeFi پرچم ایک انتہائی مؤثر مارکیٹ ہے. قیمت اختلافات غیر متوقع ہیں، اکثر پیچیدہ بوٹز کی طرف سے استعمال ہونے سے پہلے صرف ملیس سیکنڈ کے لئے موجود ہیں.

  • Gas Fees: Every interaction with a smart contract incurs a transaction fee (gas), which can vary significantly based on network congestion. A profitable arbitrage opportunity must yield enough profit to cover these costs.

  • Slippage: The larger the trade relative to the pool’s liquidity, the greater the slippage, eroding potential profits. Accurately modeling slippage is crucial for calculating true profitability.

  • Latency: The speed at which an arbitrage bot can detect an opportunity, calculate the optimal trade, construct a transaction, and submit it to the network is paramount. Even milliseconds can make the difference between profit and loss.

  • Frontrunning and MEV: As discussed in the introduction, the “Dark Forest” is dominated by generalized frontrunners. These bots actively monitor the mempool for pending profitable transactions, replicate them, and submit their own transaction with a higher gas price to ensure their transaction is included in a block before the original one. This phenomenon falls under the umbrella of Maximal Extractable Value (MEV), representing the total value that can be extracted from block production in excess of the standard block reward and gas fees by arbitraging, liquidating, or reordering transactions within a block. Successfully navigating this environment often requires advanced strategies like leveraging MEV-Boost relays or private transaction pools. To mitigate the risk of being intercepted in public mempools, our implementation will primarily operate on Base, an EVM-compatible Layer 2 (L2) blockchain. Base’s architecture, which currently does not expose a public mempool in the same manner as Ethereum’s Layer 1, offers a different environment for transaction submission, potentially reducing traditional frontrunning risks.

  • Complexity of AMMs: As AMMs evolve (e.g., Uniswap V3’s concentrated liquidity), the mathematical modeling and state tracking required for accurate arbitrage calculations become significantly more complex.

    Understanding these foundational elements of DeFi, from the mechanics of AMMs to the cut-throat nature of arbitrage competition, sets the stage for designing a robust and effective arbitrage bot. In the next chapter, we will begin to lay out the architectural blueprint for such a system.

آرکیٹیکل ڈیزائن: Arbitrage Bot Infrastructure کی تعمیر

DeFi کے "ڈاک جنگل" میں ایک فائدہ مند تبادلے بٹ کی تعمیر کے لئے ایک آرکیٹیکل کی ضرورت ہوتی ہے جو تیزی، قابل اعتماد اور درستگی کو ترجیح دیتی ہے. ہر ملیس سیکنڈ کا حساب ہے، اور حقیقی وقت کے اعداد و شمار کو پروسیسنگ کرنے کی صلاحیت، موقعوں کی شناخت اور ٹریڈز کو تیزی سے انجام دینے کی صلاحیت اہم ہے. ہمارا نظام ان ضروریات کے ساتھ بنیادی طور پر ڈیزائن کیا جاتا ہے، Go کے متبادل ماڈل اور ایک ماڈیولر، واقعات ڈیزائن کا استعمال کرتے ہوئے.

Go کو بنیادی ترقی کی زبان کے طور پر منتخب کیا گیا تھا کیونکہ اس کی غیر معمولی کارکردگی، مضبوط مطابقت کے ابتدائی (گوروتینز اور چینلز) اور نیٹ ورک پروگرامنگ اور کم سطح کے نظام کے تعامل کے لئے مضبوط ایکو سسٹم. یہ خصوصیات بلاکچین ڈیٹا کی اعلی ٹرانسپورٹ کا انتظام کرنے کے لئے اہم ہیں اور ایک حقیقی وقت کے ہتھیارنگ کے نظام میں paralel پروسیسنگ کی ضرورت ہے.go-ethereumبنیادی Ethereum کلائنٹ

بوٹ کی آرکیٹیکل ایک کے طور پر تشکیل دیا گیا ہےevent-driven systemکئی انفرادی خدمات (ماڈیولز) سے تشکیل دیا گیا ہے، ہر ایک parallel processes (goroutines) میں چلتا ہے.These services communicate asynchronously by sending messages through Go channels, ensuring a loosely coupled and highly responsive design.This approach allows for efficient resource utilization, simplifies fault isolation, and enables seamless scaling of individual components.

پورے نظام کی آرکیٹیکل

تفتیش بٹن کی انٹرفیس کو ایک پائپ لائن کے طور پر تصور کیا جا سکتا ہے، جہاں ڈیٹا بلاکچین سے چلا جاتا ہے، پروسیسنگ اور تجزیہ کیا جاتا ہے، اور منافع بخش تجارتوں کے عملدرآمد میں ختم ہوتا ہے.

  • Blockchain Data Reader Service: Responsible for real-time ingestion of blockchain events data.

  • Market Graph Service: Maintains an in-memory representation of the DeFi market and identifies arbitrage paths.

  • Arbitrage Strategy Service: Evaluates detected opportunities for profitability and prepares trade instructions.

  • Transaction Builder Service: Constructs and dispatches blockchain transactions.

  • Honeywall Service: A post-execution checker that enhances security and maintains market integrity by identifying and blacklisting malicious pools.

    This modularity allows each service to focus on a specific task, minimizing dependencies and optimizing performance for its particular workload. Communication between services is strictly asynchronous, leveraging Go’s channels for message passing, which naturally facilitates a non-blocking and highly concurrent operation.

Blockchain ڈیٹا لیڈر سروس: ڈیٹا اسٹریم میں ہمارے بوٹ کی آنکھوں اور کانوں

یہ سروس بلاٹ کے بنیادی انٹرفیس کے طور پر کام کرتا ہے جس میں خام، حقیقی وقت کے اعداد و شمار بلاکچین کے ذریعے چلے جاتے ہیں. "ڈارک جنگل" میں، معلومات کرنسی ہے، اور فوری طور پر اور درست طریقے سے ان کو کھولنے کی ہماری صلاحیت اہم ہے.extract crucial financial data pointsیہ ہمارے فیصلے کے آلے کو فروغ دے گا.

  • کنکشن اور ڈیٹا انجیکشن: Reader WebSockets کے ذریعے ایک بلاکچینڈ نڈوز سے منسلک کرتا ہے. یہ مستحکم، دو طرفہ کنکشن نئے بلاک ہیڈر کی فوری وصولی کی اجازت دیتا ہے اور اس سے زیادہ اہم بات یہ ہے کہ سمارٹ معاہدوں کی طرف سے جاری ہونے والے واقعات کے لوگ. سروس کو خاص طور پر سننے کے لئے ترتیب دیا گیا ہے Swap، Mint، Burn، اور Sync واقعات سے Decentralized Exchange (DEX) سمارٹ معاہدوں. یہ واقعات اہم ہیں کیونکہ وہ likvidity pool کے ذخائر میں تبدیلیوں کا اشارہ کرتے ہیں، ٹوکن کی قیمتوں کو براہ راست متاثر کرتے ہیں.
  • نئے بلاک ہیڈرز: نئے بلاک ہیڈرز کے لئے سائن اپ کرتے ہوئے، ہم اسٹیٹ میں تبدیلیوں کی فوری اطلاع حاصل کرتے ہیں. ہر نئے بلاک بلاک کی موجودہ حقیقت کی تصدیق شدہ snapshot کی نمائندگی کرتا ہے، نئے ٹرانسمیشنز، اپ ڈیٹ سوئچز، اور نئے likidity pool اعداد و شمار.
func (er *EthereumReader) SubscribePairs() error {

	parsedABI := constants.PairAbi

	// Set up the filter
	query := ethereum.FilterQuery{
		Topics: [][]common.Hash{
			{
				parsedABI.Events["Swap"].ID,
				parsedABI.Events["Mint"].ID,
				parsedABI.Events["Burn"].ID,
				parsedABI.Events["Sync"].ID,
			},
		},
	}

	logs := make(chan types.Log)

	sub, err := er.ethClient.SubscribeFilterLogs(context.Background(), query, logs)
	if err != nil {
		return err
	}

	// Start Routine to read swaps events
	log.Println("[READING SWAPS...]")
	go func() {
		for {
			select {
			case err = <-sub.Err():
				log.Println("[RESET CONNECTION...] Subscription error: ", err)
				pairInfo := GraphMessage{
					Ok: false,
				}
				*er.pairChan <- pairInfo

				time.Sleep(5 * time.Minute)
				er.ethClient = clients.ResetConnection()
				er.SubscribePairs()

				return
			case vLog := <-logs:
				start := time.Now()

				pairAddress := vLog.Address
				if er.filter.IsPairBlackListed(pairAddress.Hex()) {
					continue
				}

				blockNumber := vLog.BlockNumber
				if blockNumber > er.currentBlockNumber {
					// New block detected, reset cache
					er.lastUpdatedBlock = nil
					er.lastUpdatedBlock = make(map[common.Address]uint64)
					er.currentBlockNumber = blockNumber
				}

				// Check if already updated for this pair in current block
				if _, exists := er.lastUpdatedBlock[pairAddress]; exists {
					continue
				}

				t0, t1, f, r0, r1, err := er.getPairDataFromHelper(pairAddress)
				if err != nil {
					continue
				}

				dex := f.String()
				router, err := constants.GetRouterAddressFromFactory(dex)
				if err != nil {
					continue
				}

				// Update cache
				er.lastUpdatedBlock[pairAddress] = blockNumber
				elapsed := time.Until(start)

				pairInfo := GraphMessage{
					Ok:       true,
					DexCheck: true,
					Pair:     pairAddress.Hex(),
					Token0:   Token{Address: t0.Hex()},
					Token1:   Token{Address: t1.Hex()},
					Reserve0: r0,
					Reserve1: r1,
					Dex:      router,
					GetTime:  elapsed,
				}

				*er.pairChan <- pairInfo
			}
		}
	}()

	return nil
}
  • ڈیٹا جمع کرنے اور پری فلٹرنگ کے لئے اپنی مرضی کے مطابق سمارٹ معاہدہ: کارکردگی کو بہتر بنانے اور ریڈنڈینٹ انچ کالز کو کم کرنے کے لئے، Reader ایک اپنی مرضی کے مطابق سمارٹ معاہدہ کا استعمال کرتا ہے، جو خاص طور پر اس مقصد کے لئے لکھا گیا ہے. یہ معاہدہ ایک جمع کرنے کے طور پر کام کرتا ہے، ایک واحد، بہتر طریقہ کار کو فراہم کرتا ہے کہ اس کے ذخائر اور دیگر مجموعی معلومات کو کئی کرنسی کے جوڑوں کے لئے حاصل کرنے کے لئے. اس اپنی مرضی کے معاہدے کا ایک اہم افعال یہ ہے کہ یہ ڈیٹا کو واپس کرنے سے پہلے ایک بیل میں عام دھوکہ دہی کی خصوصیات یا اضافی ٹریڈنگ ٹیکسوں کے لئے اس میں داخلہ ہے. اس ابتدائی فلٹرنگ کو نقصان دہ معاہدوں کے ساتھ مداخلت کے خطرے
  • مندرجہ ذیل میں اس مددگار معاہدے کی مضبوطی کی پیروی ہے۔ مرکزی منطق checkPair طریقہ کار میں ہے، جس میں ایک ٹوکن جوڑے کی حفاظت کا اندازہ ہوتا ہے اور مجموعی ڈیٹا واپس کرتا ہے.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract ArbHelperMap {
    mapping(address => address) public factoryToRouter;
    address public owner;
    
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }
    
    constructor() {
        owner = msg.sender;
        // Pre-populate known mappings
        factoryToRouter[0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6] = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        factoryToRouter[0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E] = 0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb;
        factoryToRouter[0xFDa619b6d20975be80A10332cD39b9a4b0FAa8BB] = 0x327Df1E6de05895d2ab08513aaDD9313Fe505d86;
        factoryToRouter[0x71524B4f93c58fcbF659783284E38825f0622859] = 0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891;
        factoryToRouter[0x3E84D913803b02A4a7f027165E8cA42C14C0FdE7] = 0x8c1A3cF8f83074169FE5D7aD50B978e1cD6b37c7;
        factoryToRouter[0x9A9A171c69cC811dc6B59bB2f9990E34a22Fc971] = 0x1b7655aa64b7BD54077dE56B64a0f92BCba05b85;
    }
    
    function addFactoryRouter(address factory, address router) external onlyOwner {
        require(factory != address(0) && router != address(0), "Zero address");
        factoryToRouter[factory] = router;
    }
    
    struct Result {
        bool success;
        address token0;
        address token1;
        address factory;
        uint112 reserve0;
        uint112 reserve1;
    }
    
    // Helper function to get pair data
    function _getPairData(address pairAddress) private view returns (
        bool success,
        address token0,
        address token1,
        address factory,
        uint112 reserve0,
        uint112 reserve1,
        address router
    ) {
        success = false;
        
        try IPair(pairAddress).token0() returns (address _token0) {
            token0 = _token0;
            
            try IPair(pairAddress).token1() returns (address _token1) {
                token1 = _token1;
                
                try IPair(pairAddress).factory() returns (address _factory) {
                    factory = _factory;
                    
                    try IPair(pairAddress).getReserves() returns (uint112 r0, uint112 r1, uint32) {
                        reserve0 = r0;
                        reserve1 = r1;
                        
                        router = factoryToRouter[factory];
                        if (router != address(0)) {
                            success = true;
                        }
                    } catch {}
                } catch {}
            } catch {}
        } catch {}
    }
    
    // Helper function to check if pair passes tax limit
    function _checkTaxLimit(
        address router,
        address token0,
        address token1,
        uint amountIn,
        uint maxTaxPermille
    ) private view returns (bool) {
        address[] memory path = new address[](2);
        path[0] = token0;
        path[1] = token1;
        
        try IRouter(router).getAmountsOut(amountIn, path) returns (uint[] memory buyOuts) {
            if (buyOuts.length < 2) return false;
            
            address[] memory reversePath = new address[](2);
            reversePath[0] = token1;
            reversePath[1] = token0;
            
            try IRouter(router).getAmountsOut(buyOuts[1], reversePath) returns (uint[] memory sellOuts) {
                if (sellOuts.length < 2) return false;
                
                uint minReturn = amountIn - (amountIn * maxTaxPermille / 1000);
                return sellOuts[1] >= minReturn;
            } catch {
                return false;
            }
        } catch {
            return false;
        }
    }
    
    function checkPair(address pairAddress, uint amountIn, uint maxTaxPermille) external view returns (Result memory r) {        
        // Initialize result with default values
        r.success = false;
        
        // Skip processing if pair address is zero
        if (pairAddress == address(0)) return r;
        
        // Get pair data
        bool success;
        address token0;
        address token1;
        address factory;
        uint112 reserve0;
        uint112 reserve1;
        address router;
        
        (success, token0, token1, factory, reserve0, reserve1, router) = _getPairData(pairAddress);
        
        // If we couldn't get pair data or there's no router, return early
        if (!success) return r;
        
        // Check tax limits
        bool passedTaxCheck = _checkTaxLimit(router, token0, token1, amountIn, maxTaxPermille);
        
        // Populate result if tax check passed
        if (passedTaxCheck) {
            r.success = true;
            r.token0 = token0;
            r.token1 = token1;
            r.factory = factory;
            r.reserve0 = reserve0;
            r.reserve1 = reserve1;
        }
        
        return r;
    }
}
  • Event-driven Communication: ان واقعات کو وصول کرنے اور پروسیسنگ کرنے کے بعد، Reader اعداد و شمار کو معمول بناتا ہے اور مارکیٹ گراف سروس کو ایک Go چینل کے ذریعے پیغامات کے طور پر اپ ڈیٹس (مثال کے طور پر، ایک مخصوص پوزیشن کے لئے نئے محفوظ اقدار) بھیجتا ہے.This ensures that the market's in-memory representation is updated almost instantly.

مارکیٹ گراف سروس: DeFi مارکیٹ کا نقشہ

مارکیٹ گراف سروس مرکزی اطلاعاتی یونٹ ہے، جو DeFi مارکیٹ کی ایک حقیقی وقت، میموری میں نمائندگی برقرار رکھتا ہے.directed graphکہاں ہے:

  • نڈوز: انفرادی cryptocurrencies کی نمائندگی کرتے ہیں (مثال کے طور پر، WETH، USDC، DAI).
  • Edge: مختلف DEXes (مثال کے طور پر، Uniswap V2 ETH / DAI پوزیشن، SushiSwap USDC / WETH پوزیشن) پر likvidity pools کی نمائندگی کرتا ہے.
  • ڈیٹا ساخت اور اپ ڈیٹس: اس سروس کو چینلز کے ذریعے Blockchain ڈیٹا ریڈر سروس سے اپ ڈیٹس ملتے ہیں. ایک پول کے لئے نیا محفوظ ڈیٹا حاصل کرنے کے بعد، یہ گراف میں متعلقہ کنڈا کو اپ ڈیٹ کرتا ہے.
  • BigInt کے ساتھ درستگی: ٹوکن کی رقموں اور تبادلے کی شرحوں سے متعلق تمام محاسبات Go کی ریاضی / بڑے پیکج (BigInt یا BigFloat) کا استعمال کرتے ہیں. یہ عمدہ درستگی کو برقرار رکھنے کے لئے اہم ہے، پلٹنے والے پوائنٹس کی غلطیوں کو روکنے کے لئے جو ناکامی کے مواقع یا غلط فائدہ کی محاسبات کی وجہ سے ہوسکتا ہے. یہ خاص طور پر اہم ہے ڈیفائی میں رقموں کی مختلف قسم کی وجہ سے، جو 8 سے 18 (یا اس سے زیادہ) اہم اعداد و شمار تک پہنچ سکتے ہیں، معیاری پلٹنے والے پوائنٹس کے اعداد و شمار کو غیر مناسب بنا سکتے ہیں.
  • Arbitrage Path Detection: Bellman-Ford Algorithm: اس سروس کے دل میں FindArbitrage تقریب ہے، جس میں ایک گراف ٹرانسپورٹ الگورتھم کا استعمال کرتا ہے، خاص طور پر Bellman-Ford. یہ الگورتھم ایک گراف میں منفی سائیکلوں کو تلاش کرنے کے لئے منفرد طور پر قابل ہے، جو ہمارے مارکیٹ کے ماڈل میں ایک arbitrage کے موقع کے مطابق ہے (جس میں لگا رینج وزن کے طور پر استعمال کیا جاتا ہے). بہت سے دیگر گراف نظریاتی الگورتھموں کے برعکس جو سب سے زیادہ مؤثر راستہ تلاش کرنے پر توجہ مرکوز کرتے ہیں، Bellman-Ford کے منفی سائیکلوں کو پتہ کرنے کی صلاحیت یہ DeFi اور مقدار کی مالیاتی ایپلی کیشنز دونوں کے لئے غیر معمولی موثر بناتا ہے جہاں

Arbitration Strategy Service: منافع کی شناخت اور بہتر بنانے

اپ ڈیٹ کے واقعات کے لئے سائن اپMarket Graph Serviceتبادلے کی حکمت عملی سروس مسلسل نئے پتہ چلانے والے تبادلے کے راستوں کے لئے مارکیٹ گراف کی نگرانی کرتا ہے.

  • موقع کا تجزیہ: ہر بار جب گراف اپ ڈیٹ کیا جاتا ہے یا FindArbitrage کی طرف سے ممکنہ تبادلے کی راہ کی شناخت کی جاتی ہے تو، یہ سروس کارروائی میں آتا ہے. یہ منفی سائیکل (تبادلے کی راہ) مارکیٹ گراف سروس کی طرف سے پایا جاتا ہے اور ایک جامع منافع بخش حساب شروع کرتا ہے.
  • بہترین ان پٹ کی مقدار کا اندازہ (Convex Optimization): ایک اہم قدم تبادلہ خیال کے سلسلے کے لئے بہترین ان پٹ کی مقدار (dx) کا تعین کرنا ہے. یہ ایک غیر مختصر مسئلہ ہے، کیونکہ منافع کو ان پٹ کی مقدار کا ایک غیر لائن کردار ہے، جیسا کہ "Uniswap مارکیٹوں کا تجزیہ" میں دکھایا گیا ہے. یہ کئی سوئپوں کے ذریعے سلاپنگ اور فیسوں کی طرف سے متاثر ہوتا ہے. سروس اس کو ایک کنوکس آپٹمیشن کے مسئلے کے طور پر حل کرتا ہے، Go کے گونم / آپٹمی پیکیج کا استعمال کرتے ہوئے. اس بات کو یقینی بناتا ہے کہ منتخب کردہ ان پٹ کی مقدار تمام متغیروں کے لئے حساب کرنے کے بعد نیٹ منافع کو زیادہ سے زیادہ کرتا ہے.
  • سائیپ سمیلیشن: ایک ٹرانسمیشن پر عملدرآمد کرنے سے پہلے، سروس کو موجودہ مصنوعات کے فارمول کا استعمال کرتے ہوئے پتہ چلتا ہے کہ تبادلے کے راستے کے اندر تمام سائیپز کی ایک سمیلیشن کی عملدرآمد کی جاتی ہے اور اس سمیلیشن کے دوران، کم از کم پیداوار کی رقم بھی ہر بین الاقوامی سائیپ مرحلے کے لئے مقرر کی جاتی ہے. یہ اس بات کو یقینی بناتا ہے کہ غیر متوقع طور پر کم حقیقی پیداواروں کی صورت میں (مثال کے طور پر، ناخوشگوار قیمتوں یا زنجیر پر اعلی چڑھنے کی وجہ سے)، ٹرانسمیشن کو کم سے کم گیس کے نقصان کے ساتھ واپس آ جائے گا، غیر منافع بخش یا کھونے والی تجارت کے ساتھ آگے بڑھنے کے بجائے.
  • تمام فیسیں: DEX ٹریڈنگ فیسوں سمیت (مثال کے طور پر، Uniswap V2 کے لئے 0.3٪).
  • Slippage: ترتیب کے اندر اندر ہر تجارت کی قیمت کے اثرات کی درست ماڈلنگ.
  • گیس کی لاگت: کل ٹرانسپورٹ کے لئے ضروری گیس کی لاگت کا اندازہ، زنجیر (باس) اور موجودہ نیٹ ورک کے حالات پر غور کرتے ہوئے.
  • Profit Thresholding: صرف اگر محاسبہ شدہ خالص منافع ابتدائی ان پٹ رقم (یا ایک ترتیب کے حد) کے کم از کم 0.5٪ ہے تو، یہ موقع قابل قبول سمجھا جاتا ہے.
  • عملدرآمد کے لئے نوٹس: اگر ایک منافع بخش موقع معیاروں کو پورا کرتا ہے تو، تبادلے کی حکمت عملی سروس تمام ضروری تفصیلات جمع کرتا ہے - سواپز (جنگز) کی سفارش کی ترتیب، بہترین ان پٹ کی رقم، اور کسی بھی دیگر متعلقہ پیرامیٹرز - اور ایک Go چینل کے ذریعے ٹرانسمیشن بنڈر سروس کو ایک نوٹس بھیجتا ہے.

ٹرانسمیشن بنڈر سروس: Swift Execution

ٹرانسمیشن بلڈر سروس بوٹ کے عملدرآمد کے ہاتھ ہے، جس کا کام جلد ہی تعمیر اور بلاکچین میں تبادلہ خیال ٹرانسمیشن کو پیش کرنے کے لئے ہے.

  • ٹرانسمیشن کی تعمیر: Arbitrage Strategy Service سے ایک موقع حاصل کرنے کے بعد، اس سروس کو فوری طور پر ایٹمی blockchain ٹرانسمیشن کی تعمیر شروع ہوتی ہے.
  • Smart Contract Interaction (Atomic Swaps): یہ سروس ایک اپنی مرضی کے مطابق سمارٹ معاہدے کے ساتھ بات چیت کرتا ہے جو خاص طور پر ایک ہی ایٹمی ٹرانسمیشن کے اندر تمام تبادلے (multiple swaps) کو انجام دینے کے لئے ڈیزائن کیا گیا ہے. یہ معاہدہ بھی ایک ہی ٹرانسمیشن فلائٹ کے اندر token کی منظوریوں کا انتظام کرتا ہے. یہ منطق تبادلے کے سلسلے کے وسط میں frontrunning یا backkrunning کو روکنے کے لئے اہم ہے، کیونکہ پوری کارروائی ایک یونٹ کے طور پر کامیاب یا ناکام ہوتی ہے.
  • یہاں Solidity فیکٹری ہے جو ایک فلش قرض کے بغیر تبادلہ خیال کا انتظام کرتی ہے، جس میں مالکان (بوٹ) کو ابتدائی رقم کی ادائیگی کرنے کی ضرورت ہوتی ہے:
struct SwapStep {
      address router;
      address[] path;
      uint minOut;
}

function executeArb(
    address inputToken,
    uint amountIn,
    SwapStep[] calldata steps,
    uint minFinalOut
) external onlyOwner returns (uint finalAmountOut) {
    require(steps.length > 0, "No steps");

    // Transfer tokens from msg.sender to contract
    require(IERC20(inputToken).transferFrom(msg.sender, address(this), amountIn), "Transfer in failed");

    address currentToken = inputToken;
    uint currentAmount = amountIn;

    for (uint i = 0; i < steps.length; i++) {
        SwapStep calldata step = steps[i];
        require(step.path[0] == currentToken, "Path mismatch");

        address outputToken = step.path[step.path.length - 1];

        // Save balance before swap
        uint balanceBefore = IERC20(outputToken).balanceOf(address(this));

        // Safe approve
        require(IERC20(currentToken).approve(step.router, 0), "Reset approve failed");
        require(IERC20(currentToken).approve(step.router, currentAmount), "Approve failed");

        IUniswapV2Router(step.router).swapExactTokensForTokens(
            currentAmount,
            step.minOut,
            step.path,
            address(this),
            block.timestamp
        );

        uint balanceAfter = IERC20(outputToken).balanceOf(address(this));
        uint received = balanceAfter - balanceBefore;

        require(received >= step.minOut, "Slippage too high");

        currentToken = outputToken;
        currentAmount = received;
    }

    require(currentAmount >= minFinalOut, "Final output too low");

    require(IERC20(currentToken).transfer(owner, currentAmount), "Final transfer failed");

    return currentAmount;
}
  • فلیش کریڈٹ انٹرویو: اگر ہتھیار کے لئے بہترین رقم ایک فلیش کریڈٹ کی ضرورت ہوتی ہے تو، ڈویلپر فلیش کریڈٹ منطق کو ایک واحد، ناقابل توازن ٹرانسمیشن میں شامل کرتا ہے، ایک اپنی مرضی کے معاہدے کا استعمال کرتے ہوئے جو Aave کی FlashLoanSimple انٹرفیس کے ذریعے اس اتمی عمل کو آسان بناتا ہے.
  • Here is the Solidity contract function executeOperation (part of a larger FlashLoanReceiver contract) that gets called by the Aave Pool and contains the arbitrage logic using the borrowed funds:
function startArbitrage(
      address token,
      uint256 amount,
      SwapStep[] calldata steps,
      uint256 minFinalOut
) external onlyOwner {
    bytes memory params = abi.encode(steps, minFinalOut);
    POOL.flashLoanSimple(address(this), token, amount, params, 0);
}

function executeOperation(
    address asset,
    uint256 amount,
    uint256 premium,
    address initiator,
    bytes calldata params
) external override returns (bool) {
    require(msg.sender == address(POOL), "Untrusted lender");
    require(initiator == address(this), "Unauthorized initiator");

    (SwapStep[] memory steps, uint256 minFinalOut) = abi.decode(params, (SwapStep[], uint256));

    // Execute the arbitrage
    address currentToken = asset;
    uint currentAmount = amount;

    for (uint i = 0; i < steps.length; i++) {
        SwapStep memory step = steps[i];
        require(step.path[0] == currentToken, "Path mismatch");

        address outputToken = step.path[step.path.length - 1];

        // Save balance before swap
        uint balanceBefore = IERC20(outputToken).balanceOf(address(this));

        // Safe approve
        require(IERC20(currentToken).approve(step.router, 0), "Reset approve failed");
        require(IERC20(currentToken).approve(step.router, currentAmount), "Approve failed");

        IUniswapV2Router(step.router).swapExactTokensForTokens(
            currentAmount,
            step.minOut,
            step.path,
            address(this),
            block.timestamp
        );

        uint balanceAfter = IERC20(outputToken).balanceOf(address(this));
        uint received = balanceAfter - balanceBefore;

        require(received >= step.minOut, "Slippage too high");

        currentToken = outputToken;
        currentAmount = received;
    }

    require(currentAmount >= amount + premium, "Insufficient profit");
    require(currentAmount >= minFinalOut, "Final output too low");

    // Repay the loan
    require(IERC20(asset).approve(address(POOL), amount + premium), "Approval failed");
    
    // Transfer profits to owner
    uint profit = IERC20(asset).balanceOf(address(this)) - (amount + premium);
    if (profit > 0) {
        require(IERC20(asset).transfer(owner, profit), "Profit transfer failed");
    }

    return true;
}
  • گیس کا اندازہ اور قیمت: ٹرانزیکشن کے لئے ضروری گیس کی تیاری اور ایک مناسب گیس کی قیمت (یا بنیادی طور پر L2s پر ترجیح کی فیس) کو مقرر کرنے کے لئے وقت میں ایک بلاک میں شامل ہونے کی ضمانت.
  • ٹرانسمیشن ڈسپلے: ایک بار تعمیر کیا گیا ہے، دستخط شدہ ٹرانسمیشن بیس بلاکچینڈ نڈو کو بھیج دیا جاتا ہے. بیس کا انتخاب حکمت عملی ہے: ایتریوم L1 کے برعکس، بیس کی موجودہ آرکیٹیکل پر روایتی معنی میں ایک عام طور پر ظاہر میپول نہیں ہے. اس کا مطلب یہ ہے کہ ٹرانسمیشنز میپول کو اسکرین کرنے والے بوٹس کی طرف سے عام طور پر پیشہ ورانہ frontrunning کی طرف سے کم حساس ہیں. جبکہ زیادہ سے زیادہ نکالنے کے قابل قدر قیمت (MEV) اب بھی L2s پر موجود ہے، اس کی نکالنے کے لئے میپول کے میکانیزم L1 سے مختلف ہیں، اور براہ راست میپول sniping قابل قدر سے کم ہوتا ہے، وکیلروں کے لئے ایک زیادہ پیشہ
  • Asynchronous Feedback: ٹرانسمیشن کو بھیجنے کے بعد، سروس Honeywall سروس کو پیغام بھیجتا ہے کہ ایک ٹرانسمیشن شروع کیا گیا ہے اور نگرانی کی ضرورت ہے.

Honeywall سروس: عملدرآمد کی تصدیق اور سیکورٹی

Honeywall سروس ایک اہم پیچھے عملدرآمد چیکر کے طور پر کام کرتا ہے اور تبادلہ خیال بٹن کے لئے ایک مضبوط سیکورٹی layer کے طور پر.

  • Transaction Outcome Monitoring: After the Transaction Builder dispatches a transaction, the Honeywall Service monitors its inclusion in a block and its outcome.
  • Profit Logging: If the transaction is successful and yields a profit (as expected from the simulation), the profit details are logged for performance tracking and analysis.
  • ناکامی کا تجزیہ: ایک ٹرانسمیشن کی ناکامی کی صورت میں، Honeywall واپسی کی وجہ کا تجزیہ کرتا ہے.
  • Honeypot / Scam Detection اور Blacklisting: ایک اہم سیکورٹی خصوصیت یہ ہے کہ "Honeypot" ٹوکن یا پولز کی شناخت کرنے کی صلاحیت ہے جو دھوکہ دہی کی منطق کو لاگو کرتی ہے (مثال کے طور پر، خریداری کی اجازت دیتا ہے لیکن فروخت کو روکتا ہے، یا فروخت پر غیر معمولی چھپے ہوئے ٹیکس کا تعین کرتا ہے).
  • بیرونی سپلائر انٹرویو: یہ غیر ملکی سپلائر یا جانا جاتا ہے کے معاہدوں کے ایک ڈیٹا بیس کے ساتھ انٹرویو کرتا ہے کہ ناکام معاملات میں استعمال ہونے والے جوڑوں کو cross-reference کرنے کے لئے، اس طرح ممکنہ دھوکہ دہیوں کی شناخت.
  • ڈینمک سیاہ فہرست: اگر ایک مخصوص جوڑے یا پول کو غیر متوقع اعلی ٹیکس کی وجہ سے ایک میڈل ٹاپ یا مسئلہ کے طور پر شناخت کیا جاتا ہے تو، یہ فوری طور پر ایک ڈیٹا بیس کی حمایت کی سیاہ فہرست میں شامل کیا جاتا ہے.
  • بلوم فلٹر انضمام: اس سیاہ فہرست کو ایک بلوم فلٹر میکانیزم کے ذریعے مؤثر طریقے سے منظم کیا جاتا ہے. اس کی اجازت دیتا ہے کہ بلاکچین ڈیٹا لیڈر سروس نے فوری طور پر نئے طور پر دیکھا گیا جوڑے کو سیاہ فہرست کے خلاف چیک کرنے سے پہلے بھی ان کے ذخائر کو حاصل کرنے یا مارکیٹ گراف میں شامل کرنے سے پہلے.

آرٹیکل ڈیزائن کے اختتام

Go میں ایونٹ ڈیزائن شدہ ماڈیولر آرکیٹیکل، ڈیٹا انجننگ، مارکیٹ ماڈلنگ، موقعی کے تعین، تیزی سے عملدرآمد، اور مضبوط سیکورٹی کے لئے مہارت کی خدمات کے ساتھ مل کر، ہمارے اعلی کارکردگی ایوارڈریجنگ بوٹ کی بنیاد بناتا ہے. یہ ڈیزائن اس بات کو یقینی بناتا ہے کہ نظام مارکیٹ کے اختتام کے مواقع پر غیر متوقع رفتار کے ساتھ ردعمل کرسکتا ہے جبکہ DeFi "ڈارک جنگل" کے متعلق اہم خطرات کو کم کرتا ہے.

فرصت کی تشخیص اور بہترین عملدرآمد: بوٹ کے دماغ

ایک تفتیش بٹن کا حقیقی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہنی ذہین ذہنی ذہنی ذہنی

ایک گراف کے طور پر DeFi مارکیٹ کی ماڈلنگ

آرکیٹیکل کی وضاحت میں پیش کیا گیا ہے کے طور پر، ہماری مارکیٹ گراف سروس ایک ہدف گراف کے طور پر DeFi پر مبنی ہے. اس ماڈل میں، انفرادی ٹوکن (مثلا، WETH، DAI، USDC) کے طور پر کام کرتے ہیں.nodes، جبکہ مختلف ڈسٹرکٹیکل بیس (DEXs) پر likvidity pools کے طور پر کام کرتے ہیںedgesان ٹکینز کو منسلک کرنے کے لئے. ہر کنج کے وزن اس پول کے ذریعے ٹریڈنگ کی قیمت کی نمائندگی کرتا ہے.

To efficiently detect arbitrage opportunities, which manifest as profitable cycles, we transform the problem of finding a profitable sequence of trades into finding a negative cycleہمارے گراف میں. یہ تبدیلی ایک لگارٹمی فہرست کے تبادلے کی شرح پر لاگو کرتے ہوئے حاصل کی جاتی ہے.

Cycle Detection کے لئے Logarithms کی ضرورت

تبادلہ خیال کے پیچھے بنیادی خیال ایک ابتدائی رقم کی ایک سیریز کے مقابلے کی شرح کے ساتھ متغیر کرنے کے لئے ابتدائی اثاثہ سے زیادہ ختم کرنے کے لئے ہے.TokenXاس کے لئے تجارت کریںTokenYپھرTokenYکے لئےTokenZاور آخر میںTokenZواپسTokenXہمارا آخری رقم ہوگا:

گراف کے الگورتھم میں مصنوعات کے ساتھ کام کرنا مشکل ہے. کمپیوٹر فنڈز میں کثیر مسائل کو اضافی مسائل میں تبدیل کرنے کے لئے ایک عام تکنیک ایک لگوارتم کو لاگو کرنا ہے. ہر تبادلے کی شرح کا قدرتی لگوارتم لے کر، مصنوعات ایک مجموعہ بن جاتا ہے:

اب، ایک منافع بخش سائیکل کے لئے، ہمیں ضرورت ہے‫‪ (‪ )۱‬مکمل‬ ‫‪ (‪ )۱‬مکمل‬‬ ‫‪ (‪ )۱‬مکمل‬‬ ‫‪ (‪ )۱‬مکمل‬‬‬ ‫‪ (‪ )‬مکمل‬‬‬ ‫‪ (‪ )‬مکمل‬‬‬ ‫‪ (‪ )‬مکمل‬‬ ‫‪ (‪ )‬مکمل‬‬‬‬ ‫‪ (‪ )‬‪ )‬‬‬‪ (‪ )‬‪ )‬‪ )‬‬‬‬‬‬‪ (‪ )‬‪ )‬‪ )‬‬‬‬‬‪‬‬‬‬‬‪‬‬‬‬‬‬‬‪‬‬‬‬‬‬‬‪‬‬‬‬‬‬‬‪‬‬‬‬‬‬‬‪‬‬‬‬‬‬‪‬‬‬‬‬‬‬‬‪‬‬‬‬‬جس کا مطلب ہے(RateX→Y) + ln(RateY→Z) + ln(RateZ→X) > 0تاہم، عام طور پر مختصر ترین راستے کے الگورتھم (جیسے ہم Bellman-Ford کا استعمال کرتے ہیں) کم از کم راستوں کے ساتھ راستوں کو تلاش کرنے کے لئے ڈیزائن کیا جاتا ہے.sum کےایک منافع بخش سائیکل کو ہمارے گراف میں ایک "نجی سائیکل" کے طور پر ظاہر کرنے کے لئے، ہم صرف لاگ ان کی شرحوں کو منفی کرتے ہیں:

(RateX→Y) + ln(RateY→Z) + ln(RateZ→X) > 0

اس تبدیلی کے ساتھ، منفی وزنوں کا مجموعہ جو منفی قدر (مثلا، منفی سائیکل) کا نتیجہ بناتا ہے، براہ راست ایک منافع بخش تبادلے کا موقع بتاتا ہے.

درست طریقے سے کام کرنے کے لئےBigInt

DeFi میں ٹوکن کی مقدار بہت مختلف ہوسکتی ہے، چھوٹے حصوں سے (مثال کے طور پر، 18 ڈیزائنل سائٹس کے ساتھ ERC-20 ٹوکنوں کے لئے) بہت بڑی تعداد (مثال کے طور پر، stablecoins) تک. اس شدت کی یہ انتہائی تنوع، 18 قابل ذکر اعداد و شمار تک پہنچتی ہے، اس سے معیاری بھاگنے پوائنٹس کے اعداد و شمار کو درستگی کی غلطیوں کے لئے بہت حساس بناتا ہے.

اس سے بچنے کے لئے، ہماری مارکیٹ گراف سروس، اور بالکل ٹوکن کی رقموں اور بٹن کے اندر تبادلے کی شرحوں سے متعلق تمام محاسبات، Go کا استعمال کرتے ہیں.math/bigپیکج، خاص طور پرBigIntاعداد و شمار کے لئے اورBigFloatاستعمال کرنے کے لئے، اگر ضرورت ہو تو، جبBigFloatمطلوبہ دقت کی پیشکش، استعمال کرتے ہوئےlogدوBigIntیاBigFloatقیمتوں کو احتیاط سے کام کرنے کی ضرورت ہے، معیاری طور پرmath.LogNative پر کام کرتا ہےfloat64اپنی مرضی کے انضمام یا غیر ملکی لائبریریوں کو ہدایات کے طور پر ہدایات کی ضرورت ہے.Custom implementations or external libraries capable of arbitrary-precision logarithms are essential here.

func getLogRate(reserve0, reserve1 *big.Int) *big.Float {
	const prec = 1024
	resIn := new(big.Float).SetPrec(prec).SetInt(reserve0)
	resOut := new(big.Float).SetPrec(prec).SetInt(reserve1)

	// Effective Rate
	rate := new(big.Float).SetPrec(prec).Quo(resOut, resIn)
	logRate := bigfloat.Log(rate)

	return logRate.Neg(logRate)
}

فورڈ فورڈ الگورتھم Bellman-Ford Algorithm

ایک بار جب DeFi مارکیٹ کا درست طریقے سے ایک گراف کے طور پر ماڈل کیا جاتا ہے جس میں لوگریٹک منفی کنڈا وزن ہوتے ہیں، تفتیش کے مواقع کو تلاش کرنے کا کام شناخت کرنے کے لئے کم ہوتا ہے.negative cyclesاس فہرست میں، ہم اس کا استعمال کرتے ہیںBellman-Ford algorithm.

Richard Bellman اور Lester Ford Jr. کے نام کا نام دیا گیا، Bellman-Ford ایک وسیع پیمانے پر مختصر ترین راستہ الگورتھم ہے جس میں منفی رینج وزن کے ساتھ گراف استعمال کرنے کے قابل ہے. Dijkstra کے الگورتھم کے برعکس، جو منفی سائیکلوں کی موجودگی میں ناکام ہوتا ہے، Bellman-Ford کو ان کی تشخیص کرنے کے لئے خاص طور پر ڈیزائن کیا گیا ہے. اس کی تاریخی اہمیت نظریاتی کمپیوٹر سائنس سے زیادہ ہے؛ یہ نیٹ ورک روٹنگ سمیت مختلف شعبوں میں درخواستیں پایا ہے (جس میں یہ مختلف قیمتوں کے ساتھ سب سے سستا راستہ تلاش کرنے میں مدد کرتا ہے) اور، اہم طور پر، کرنسی مارکیٹ میں منافع بخش ٹریڈنگ کے مواقع کی شناخت کے لئے معیار مالیات میں.

اعداد و شمار ایک ذریعہ سے تمام نیٹ ورکوں کے لئے مختصر راستے کو تلاش کرنے کے طریقہ کار کے ذریعے کام کرتا ہے. اگر، ƐV Cliath−1 دوبارہ کرنے کے بعد (جیسا کہ ƐV Cliath اوسطوں کی تعداد ہے)، ایک اضافی N-th دوبارہ ایک راستہ تلاش کرتا ہے جو اب بھی "مستقیم" ہوسکتا ہے (جیسا کہ ایک مختصر راستہ پایا جا سکتا ہے)، یہ منفی سائیکل کی موجودگی کا اشارہ کرتا ہے. یہ خصوصیت یہ ہمارے استعمال کے معاملے کے لئے کامل بناتا ہے: منفی سائیکل ایک ٹریڈنگ سیڑھی کا مطلب ہے جو ایک نیٹ فائدہ کا نتیجہ بناتا ہے، بالکل یہ ہے کہ ایک ہتھیار بٹ کی تلاش کرتا ہے.


type Edge struct {
	Pair     string
	From     Token
	To       Token
	LogRate  *big.Float
	Reserve0 *big.Int
	Reserve1 *big.Int
	Dex      string
	MinOut   *big.Int
}

type Graph struct {
	nodes         map[string]Token
	Edges         map[string][]*Edge
	pairChan      *chan GraphMessage
	dexCheckChan  *chan DexDexMessage
	subscriptions []*chan time.Duration
	mu            sync.RWMutex
}

// Bellman-Ford algorithm to find arbitrage cycles
func (g *Graph) FindArbitrage(source Token) ([]*Edge, bool) {
	sourceKey := source.Address

	g.mu.RLock()
	defer g.mu.RUnlock()

	distance := make(map[string]*big.Float)
	predecessor := make(map[string]*Edge)

	// 1. Init
	for token := range g.nodes {
		distance[token] = new(big.Float).SetInf(false)
	}
	distance[sourceKey] = new(big.Float).SetFloat64(0)

	// 2. Relax edges V-1 times
	for i := 0; i < len(g.nodes)-1; i++ {
		for _, edgeList := range g.Edges {
			for _, e := range edgeList {
				from := e.From.Address
				to := e.To.Address

				if !distance[from].IsInf() && new(big.Float).Add(distance[from], e.LogRate).Cmp(distance[to]) < 0 {
					distance[to].Add(distance[from], e.LogRate)
					predecessor[to] = e
				}
			}
		}
	}

	// 3. Negative cycle detection
	var cycleStartToken string
	for _, edgeList := range g.Edges {
		for _, e := range edgeList {
			from := e.From.Address
			to := e.To.Address
			if !distance[from].IsInf() && new(big.Float).Add(distance[from], e.LogRate).Cmp(distance[to]) < 0 {
				cycleStartToken = to
				break
			}
		}
		if cycleStartToken != "" {
			break
		}
	}

	if cycleStartToken == "" {
		return nil, false // No Arbitrage
	}

	// 4. detect first cycle node
	visited := make(map[string]bool)
	current := cycleStartToken
	for !visited[current] {
		visited[current] = true
		edge := predecessor[current]
		if edge == nil {
			return nil, false // missing edge
		}
		current = edge.From.Address
	}

	// 5. Complete cycle
	cycleStart := current
	cycle := []*Edge{}
	for {
		edge := predecessor[current]
		if edge == nil {
			return nil, false // missing edge
		}
		cycle = append(cycle, edge)
		current = edge.From.Address
		if current == cycleStart {
			break
		}
	}

	// 6. Invert cycle
	for i, j := 0, len(cycle)-1; i < j; i, j = i+1, j-1 {
		cycle[i], cycle[j] = cycle[j], cycle[i]
	}

	return cycle, true
}

زیادہ سے زیادہ فائدہ: زیادہ سے زیادہ فائدہ

ایک بار ایک منفی سائیکل (تفتیش کے موقع) کی شناخت کی جاتی ہے، اگلے اہم قدم یہ ہے کہoptimal input amount(dx) سلسلے میں ابتدائی ٹریڈنگ کے لئے یہ عمدہ نہیں ہے؛ ایک تبادلے کا موقع کی منافع بخش خصوصیات کی وجہ سے ٹریڈنگ کی سائز کی ایک غیر لائن تقریب ہے AMM سوئپ کے ساتھ منسلک سلاپنگ اور فیس.

جیسا کہ "Uniswap مارکیٹوں کا تجزیہ" میں تفصیل سے بیان کیا گیا ہے، مستحکم مصنوعات کے فارمول بنیادی طور پر داخلہ اور پیداوار کی رقموں کے درمیان تعلقات میں کنوکسٹی کا مطلب ہے. خاص طور پر، ٹریڈنگ کی سائز میں اضافہ ہونے کے بعد، مؤثر کرنسی کی شرح بیل کی غیر متغیر کی وجہ سے بدتر ہو جاتی ہے. اس کا مطلب یہ ہے کہ ایک شیرین نقطہ ہے: بہت کم رقم گیس کی ادائیگی کو پورا نہیں کرسکتی ہے، جبکہ بہت بڑا رقم زیادہ سے زیادہ گزرنے، منافع کو ضائع کرسکتی ہے.

فائدہ کو زیادہ سے زیادہ حاصل کرنے کا مسئلہ ایکconvex optimization problemایک تبادلے کے راستے میں ایک سیریز کے N سوپ کے لئے، آخری پیداوار کی رقم (اور اس کے نتیجے میں فائدہ) ابتدائی داخلہ کی رقم (dx) کی ایک فہرست کے طور پر بیان کیا جا سکتا ہے. اگرچہ multi-leg تبادلے کے لئے درست تجزیاتی حل پیچیدہ ہوسکتا ہے، خاص طور پر مختلف AMMs کے درمیان مختلف فیس کی ساختوں اور چڑھنے کی کرنوں کے ساتھ، فہرست جو منافع منسوخ قیمتوں (جیسے گیس سمیت) کی نمائندگی کرتا ہے عام طور پر کنوکس ہے.

ہمارا تبادلے کی حکمت عملی سروس Go’s سے ایک آپریٹنگ حلگر کا استعمال کرتے ہوئے اس کا حل کرتا ہےgonum/optimizeپیکیج. یہ حل کرنے والا ایک فہرست لیتا ہے جو خالص منافع کی نمائندگی کرتا ہے (سائپز سے منافع منسوخ کر دی گیس کی شرح اور کسی بھی فلش قرض کی فیس) اور انٹرویو کی رقم تلاش کرتا ہے جو اس قیمت کو زیادہ سے زیادہ کرتا ہے.amountOutفارمولاdy = (x + dx) / (dx⋅ y)arbitrage pathway کے ہر مرحلے کے لئے، مندرجہ ذیل ذخائر، فیس، اور ہر مرحلے میں چیلنج کا حساب.

func getOptimalAmoutIn(edges []*Edge, decimals int) (*float64, error) {
	factor := math.Pow10(decimals)
	intMax, _ := constants.GetRouterReserveFromToken(edges[0].From.Address)

	maxCapital := new(big.Float).Mul(new(big.Float).SetInt64(intMax), big.NewFloat(factor))
	fee := big.NewFloat(0.997)

	problem := optimize.Problem{
		Func: func(x []float64) float64 {
			delta := big.NewFloat(x[0])
			if delta.Cmp(big.NewFloat(0)) < 0 || delta.Cmp(maxCapital) > 0 {
				return math.Inf(1)
			}

			delta_i := new(big.Float).Set(delta)
			for _, edge := range edges {
				effectiveIn := new(big.Float).Mul(delta_i, fee)
				reserveIn := new(big.Float).SetInt(edge.Reserve0)
				reserveOut := new(big.Float).SetInt(edge.Reserve1)

				num := new(big.Float).Mul(reserveOut, effectiveIn)
				denom := new(big.Float).Add(reserveIn, effectiveIn)
				delta_i = new(big.Float).Quo(num, denom)
			}

			profit := new(big.Float).Sub(delta_i, delta)
			result, _ := profit.Float64()
			return -result
		},
	}

	result, err := optimize.Minimize(problem, []float64{1.0}, nil, nil)
	if err != nil {
		return nil, err
	}

	return &result.X[0], nil
}

swaps کے نمونے اور منافع کا اندازہ

کسی بھی ٹرانسمیشن کو بھیجنے سے پہلے، تبادلے کی حکمت عملی سروس ایک تفصیلی عمل کرتا ہے.simulated executionیہ مرحلہ حقیقی منافع بخشیت کی جانچ پڑتال کے لئے اہم ہے، حقیقی وقت مارکیٹ کی شرائط اور منصوبہ بندی شدہ تجارت کے درست پیرامیٹرز کو دیکھتے ہوئے.

اس نمونہ میں شامل likidity pool کے موجودہ ذخائر اور محاسبہ کردہ بہترین input amount کا استعمال کیا جاتا ہے.For each step in the multi-leg path, it applies the specific AMM formula (e.g., the constant product formula for Uniswap V2like pools) to calculate the expected output:

func (ab *ArbitrageBuilderV2) calculateProfitabilityWithSlippage(edges []*Edge, decimals int) (*big.Float, *big.Float, error) {
	opt, err := getOptimalAmoutIn(edges, decimals)
	if err != nil {
		return nil, nil, err
	}
	optBig := new(big.Float).SetFloat64(*opt)
	amount := new(big.Float).Set(optBig)

	fee := big.NewFloat(0.997)

	for _, edge := range edges {
		if edge.Reserve0 == nil || edge.Reserve1 == nil ||
			edge.Reserve0.Cmp(big.NewInt(0)) == 0 || edge.Reserve1.Cmp(big.NewInt(0)) == 0 {
			return nil, nil, errors.New("edge has invalid reserves")
		}

		reserveIn := new(big.Float).SetInt(edge.Reserve0)
		reserveOut := new(big.Float).SetInt(edge.Reserve1)

		amountInWithFee := new(big.Float).Mul(amount, fee)
		if amountInWithFee.Cmp(reserveIn) >= 0 {
			return big.NewFloat(-1.0), nil, errors.New("amount exceeds available reserves")
		}

		// "x * y = k"
		numerator := new(big.Float).Mul(reserveOut, amountInWithFee)
		denominator := new(big.Float).Add(reserveIn, amountInWithFee)
		amountOut := new(big.Float).Quo(numerator, denominator)

		amount = amountOut
	}

	profit := new(big.Float).Sub(amount, optBig)
	profit.Sub(profit, ab.EstimateGasCost(len(edges)))
	profit.Sub(profit, new(big.Float).Mul(optBig, big.NewFloat(0.005)))

	normalizedProfit := new(big.Float).Quo(profit, new(big.Float).SetFloat64(math.Pow10(decimals)))
	return normalizedProfit, optBig, nil
}

اہم بات یہ ہے کہ نمونہ بھی شامل ہےminimum output amount (minOut)ہر مرحلے کے لئے چیک کریں، یہminOutاعداد و شمار غیر متوقع مارکیٹ کی حالتوں کی وجہ سے، ایک حقیقی swap on chain کی واپسی اس کی وضاحت سے کم ہے.minOutیہ میکانیزم ایک اہم تحفظ ہے، بوٹ کو غیر منافع بخش ٹریڈنگ کے سلسلے کو مکمل کرنے سے روکتا ہے اور نقصان کو صرف منفی ٹریڈنگ پر خرچ ہونے والی گیس تک محدود کرتا ہے.

صرف اگر آخر میں خالص منافع، تمام فیس، گیس، گیس کی لاگت، اور فلیش کریڈٹ پریمیمز کے بعد، پہلے سے طے شدہ ایک سے زیادہ ہے.profit threshold(مثال کے طور پر، ابتدائی داخلے کی مقدار کے 0.5٪) ممکنہ طور پر سمجھا جاتا ہے اور ٹرانسمیشن بلڈر سروس کو عملدرآمد کرنے کے لئے منتقل کیا جاتا ہے. یہ درجہ بندی اس بات کو یقینی بناتا ہے کہ بوٹ صرف امکانات کی پیروی کرتا ہے جس میں کمپیوٹرنگ اور کیٹنگ کی لاگتوں کی ضمانت کرنے کے لئے کافی اہم درجہ بندی ہے.

5. Transaction Engineering: Swift Execution in the Dark Forest

ایک فائدہ مند تبادلے کے موقع کی شناخت صرف نصف لڑائی ہے؛ دوسرا، شاید زیادہ اہم، نصف غیر معمولی رفتار اور قابل اعتماد طریقے سے ٹریڈنگ کو انجام دینے کی صلاحیت میں ہے. DeFi کے ہیرر مقابلہ "ڈیک جنگل" میں، جہاں موقعیں غیر معمولی ہیں اور پیچیدہ بوٹ ہر ملیس سیکنڈ کے لئے رہتے ہیں، ٹرانسمیشن انجینئرنگ ایک آرٹ فارم بن جاتا ہے.Transaction Builder Serviceفوری اور محفوظ عمل کو یقینی بنانے کے لئے ڈیزائن کیا گیا.

تیزی کی ضروریات

decentralized exchanges پر تبادلے کے مواقع کے لئے منافع بخش فائنل اکثر ملیس سیکنڈ میں موازنہ کیا جاتا ہے. قیمت اختلافات تیزی سے پتہ لگانے اور بہت سے خود کار طریقے سے سسٹمز کی طرف سے استعمال کیا جاتا ہے، ایک نئے بلاک میں ایک منافع بخش ٹرانسمیشن کو شامل کرنے کے لئے سب سے پہلے ہونے کے لئے ایک شدید رکاوٹ بناتا ہے. کسی بھی تاخیر، اگرچہ چھوٹا سا، ایک تنازعہ کی طرف سے کاٹنے کا نتیجہ ہوسکتا ہے، ایک ناکام ٹرانسمیشن اور گیس کی لاگت کی وجہ سے. اس وجہ سے، ٹرانسمیشن بنڈر سروس میں ہر ڈیزائن کا فیصلہ ہر ممکن مرحلے میں تاخیر کو کم کرنے کی ہدایت کی جاتی ہے، ٹرانسمیشن کی تعمیر سے نیٹ

Instant Transaction Building کے لئے In-Memory Optimization

ضروری رفتار کو حاصل کرنے کے لئے، ہمارے نظام کو تمام اہم ٹرانسمیشن اجزاء کو ذہن میں آسانی سے دستیاب رکھنے کی ترجیح دیتا ہے، اہم ٹرانسمیشن کی تعمیر کے مرحلے میں مہنگی I / O آپریشن یا پر چینل کالز کو روکتا ہے.

  • Pre-Parted and Packed ABIs: Smart Contract Application Binary Interfaces (ABIs) معاہدوں کے ساتھ بات چیت کرنے کا طریقہ بیان کرتے ہیں. ABI کی تعریفوں اور ہر ٹرانسمیشن کے لئے کرایہ پر کوڈنگ فورم کالز کو پیسنے کے بجائے، ہمارے نظام ضروری ABI ڈیٹا ڈھانچے اور فائل Selectors کو خام بائٹ[] سیریزوں میں پیسہ اور پیک کرتا ہے. عام معاہدوں کے بات چیت کے لئے یہ پیشہ ورانہ بائٹ سیریزز (مثال کے طور پر، swapExactTokensForTokens، flashLoanSimple، transferFrom) میموری میں ذخیرہ کیے جاتے ہیں. جب ایک ہتھیار کے موقع کی شناخت کی جاتی ہے تو، ٹرانسمیشن بلڈر کو فوری طور پر کال ڈیٹا کو جمع
  • ٹرانسمیشن فیلڈز کے لئے کیچ ڈیٹا: ٹرانسمیشن میٹا ڈیٹا کے لئے ریڈنڈینٹ کی کالز کو روکنے کے لئے، بٹن کے اندر ایک خاص فائدہ مند ساخت میموری میں اہم، اکثر اپ ڈیٹ کردہ اقدار کو برقرار رکھتا ہے:
  • اکاؤنٹ انونس: انونس (ایڈریس سے بھیجے گئے ٹرانسمیشنوں کی تعداد) دوبارہ کھیلنے کے حملوں کو روکنے اور ٹرانسمیشن کے آرڈر کو یقینی بنانے کے لئے اہم ہے. یہ ایک بار پکڑ لیا جاتا ہے اور پھر یادداشت میں بڑھتی ہوئی طور پر انتظام کیا جاتا ہے، اگر ایک ٹرانسمیشن ناکام ہو یا غیر معمولی طور پر آرڈر میں شامل کیا جاتا ہے تو دوبارہ سائنچ کرنے کے لئے مضبوط غلطی کے ساتھ.
  • بہترین گیس پیرامیٹرز: ہر ٹرانسمیشن کے لئے نیٹ ورک کو گیس کی قیمتوں (یا EIP-1559 سلسلے پر بنیادی فیس / ترجیحات کی فیس) کے لئے پوچھنے کے بجائے، بوٹ طویل عرصے سے بہترین گیس پیرامیٹرز حاصل کرتا ہے. ان اقدار کو ذہن میں اپ ڈیٹ کیا جاتا ہے اور تیزی سے ٹرانسمیشن کی تعمیر کے لئے استعمال کیا جاتا ہے، اس بات کو یقینی بناتا ہے کہ ٹرانسمیشن کو وقت پر شامل کرنے کے لئے مسابقتی طور پر قیمت دی جائے.
  • سائنر کی معلومات: بٹن کے پول کی نجی کلید اور متعلقہ سائنر اشیاء (جیسے تجارتی دستخط کے لئے استعمال کیا جاتا ہے) ابتدائیشن کے وقت میموری میں لوڈ کیا جاتا ہے. یہ اہم عملدرآمد مرحلے کے دوران کسی بھی ڈسک I/O یا کلید کی پیداوار کو روکتا ہے، اس بات کو یقینی بناتا ہے کہ تجارتی تقریبا فوری طور پر دستخط کیا جا سکتا ہے.

ان اہم اجزاء کو ذہن میں رکھ کر، ٹرانسمیشن بلڈر سروس صرف مائیکرو سیکنڈ میں مکمل blockchain ٹرانسمیشن کی تعمیر اور دستخط کر سکتا ہے، فوری ترسیل کے لئے تیار.

Dynamic Smart Contract Selection: فلیش قرضے vs. براہ راست سوئپ

تبادلے کی حکمت عملی سروس ایک بہتر تبادلے کا راستہ اور محاسبہ کرنے کے لئے بہترین انٹرویو کی رقم کو ٹرانسمیشن بلڈر کو منتقل کرتا ہے.amountInاور اگر یہ ایک پہلے سے مقرر کردہ رقم کی حد سے زیادہ ہے (یا اگر استراتيجیت واضح طور پر اس کی ضرورت ہوتی ہے) تو، ٹرانسمیشن بلڈر دو بنیادی سمارٹ معاہدوں کے درمیان فعال طور پر منتخب کرتا ہے:

  • Direct Swap Execution Contract: فرصتوں کے لئے جو بلاٹ کے مالک کی سرمایہ کاری سے براہ راست فنڈز حاصل کرسکتے ہیں، ڈیزائنر ایک اپنی مرضی کے مطابق Multi-swap پروسیس معاہدے پر executeArb تقریب (یا اسی طرح) کا استعمال کرتا ہے. جیسا کہ باب 3 میں دکھایا گیا ہے، یہ معاہدہ بٹ کے پول سے input tokens لے جاتا ہے اور ایک ہی، ایٹمی ٹرانسمیشن کے اندر swaps کے پورے سلسلے کو executes کرتا ہے.
  • فلیش کریڈٹ انٹرویو معاہدہ: جب ایک تبادلہ خیال کے لئے معائنہ کے لئے سب سے بہترین رقم، بٹن کے دستیاب سرمایہ کاری سے زیادہ ہے، تو بٹن کی طرف سے ایک منفرد، اپنی مرضی کے مطابق سمارٹ معاہدہ شروع کرنے اور فلیش کریڈٹ کا انتظام کرنے کے لئے ڈیزائن کیا جاتا ہے. اس معاہدے کے شروعArbitrage تقریب (جیسا کہ باب 3 میں تفصیلات میں) Aave کی طرح ایک پروٹوکول سے فلیش کریڈٹ کی درخواست کرتا ہے، جس میں اس کے بعد معاہدے کی کارروائی کی تقریب کو دوبارہ کال کرتا ہے. executeOperation کے اندر، تمام تبادلہ خیال کے سلسلے کو قرضے والے فنڈز کا استعمال کرتے ہوئے کیا جاتا ہے، اور فلیش کریڈٹ (مزید ایک چھوٹا سا پریمیم) کی واپسی

اس متحرک انتخاب کو یقینی بناتا ہے کہ ہر پتہ لگانے والے موقع کی خصوصیات پر مبنی مؤثر سرمایہ کاری اور بہترین حکمت عملی کی پیروی کی جائے.

Mempool Dynamics: Ethereum L1 vs. Layer 2 چیلنجز کو چلانے

تبادلے کی عملدرآمد کا ایک اہم پہلو blockchain کے ٹرانسمیشن پھیلاؤ کے میکانیزم کو سمجھنا ہے، خاص طور پر.mempool.

  • Ethereum L1 Mempool: On Ethereum’s Layer 1, the mempool is a public, transparent waiting room for all pending transactions. Transactions broadcasted by users or bots are relayed to various nodes across the network, becoming visible to anyone monitoring the mempool. This transparency is the breeding ground for generalized frontrunning bots (often referred to as “searchers” or “MEV bots”). These sophisticated entities continuously scan the mempool for profitable transactions (e.g., large swaps that cause significant price impact, liquidations, or other arbitrage attempts). Upon detecting such a transaction, they quickly construct an identical or similar transaction, replace the original recipient address with their own, and submit it with a higher gas price (or higher priority fee in EIP-1559) to ensure their transaction is included in the block before the original, thereby stealing the profit. This competitive landscape makes direct arbitrage on L1 highly challenging without leveraging specialized MEV relays.

  • Layer 2 (L2) Chains and Reduced Mempool Visibility (e.g., Base): Our bot strategically operates on Base, an EVM-compatible Layer 2 blockchain. The architecture of many L2s, including Base, fundamentally alters the traditional L1 mempool dynamic. Base does not currently expose a publicly visible mempool in the same manner as Ethereum Layer 1. Instead, transactions are typically sent directly to a centralized sequencer or a private mempool before being batched and committed to the L1.

    This architectural difference significantly reduces the direct threat of generalized frontrunning. While MEV still exists on L2s (e.g., through sequencer-controlled ordering or other means), the immediate, public visibility of pending transactions that enables L1 frontrunning is largely absent. This provides a more predictable and secure execution environment for our arbitrage transactions, as the bot’s crafted atomic operations are less likely to be “sniped” before they even reach a block producer. This improved execution predictability contributes directly to higher success rates for profitable arbitrages.

نڈو رفتار اور سیکورٹی: قابل اعتماد عمل کی بنیاد

بلاکچین نڈو سے کنکشن تمام اعداد و شمار اور ٹرانسمیشنوں کے لئے واحد داخلہ اور باہر جانے کا نقطہ ہے.

  • High-Performance Node Connection: Transaction Builder Service ایک خاص، اعلی کارکردگی کے نیچے فراہم کرنے والے (مثال کے طور پر، Alchemy، Infura، یا ایک خود میزبان نیچے) سے منسلک کرتا ہے. ایک تیز رفتار اور کم تاخیر کنکشن ایک ٹرانسمیشن کی دستخط اور نیٹ ورک میں اس کی پھیلاؤ کے درمیان وقت کو کم کرنے کے لئے ضروری ہے.
  • Node Security and Integrity: Connected node’s security is equally vital.Using reputable node providers or ensuring a highly secure self-hosted node is crucial to prevent man-in-the-middle attacks or data tampering.A compromised node could potentially leak private keys, inject malicious transactions, or manipulate data, leading to catastrophic losses.Our system’s reliance on private RPC endpoints (if available from providers) and secure communication channels (https for HTTP, wss for WebSockets) strengthens this security posture.

ہر سطح پر رفتار کے لئے متنازعہ طور پر آپریٹنگ کی طرف سے، ان میموری ڈیٹا ڈھانچے اور پہلے سے ہی کمپیوٹرنگ سے استراتيجی چیلنج کا انتخاب اور مضبوط نائٹ انٹرفیس تک، ہمارے arbitrage bot کو مقابلہ کرنے کے لئے ڈیزائن کیا گیا ہے اور محفوظ طریقے سے ڈیف ایچ پی کے ماحول کے اندر متحرک امکانات سے فائدہ اٹھانے کے لئے.

6۔ سیاہ جنگل پر چلنا: چیلنجز، اخلاقیات اور مستقبل کے امکانات

ڈارک جنگل میں ایک تبادلہ خیال بٹن کی تعمیر اور کارکردگی ڈیفی میں ڈارک جنگل کی طاقت کا ثبوت ہے، لیکن یہ بھی اہم چیلنجوں اور اخلاقی سوچوں کی روشنی میں لاتا ہے. جبکہ ہمارے نظام خود کار طریقے سے تبادلہ خیال کی نظریاتی اور عملی قابل قدر ثابت ہوتا ہے، یہ دشمنی کے میدان اور اس کے وسیع اثر کو تسلیم کرنا اہم ہے.

The Constant Battle Against Malicious Actors: The Role of Bloom کے ساتھ مسلسل لڑائی

DeFi کی اجازت کے بغیر فطرت کے ارد گرد ابتدائی خوشحالی، بدقسمتی سے، براہ راست شرکاء کی فراہمی کی طرف سے کم کیا گیا ہے.Honeywall Serviceیہ ایک اہم دفاع کی آخری لائن کے طور پر کام کرتا ہے، لیکن ان برا کھلاڑیوں کی تخلیق ہمیشہ ترقی کی خلاف ورزی کی ضرورت ہے.

اس دفاع کا ایک اہم عنصر یہ ہے کہBloom filterایک بلوم فلٹر ایک احتمالی اعداد و شمار کی ساخت ہے جو تیزی سے اور مؤثر طریقے سے ٹیسٹ کرسکتا ہے کہ ایک عنصر ایک سیٹ کے رکن ہے یا نہیں ہے. یہ بہت جگہ کا مؤثر ہے لیکن ایک چھوٹا سا امکان ہے کہ "فیصلہ غلط" (جیسا کہ ایک عنصر سیٹ میں ہے جب یہ نہیں ہے) ہے، اگرچہ کبھی بھی "فیصلہ غلط منفی" نہیں ہے. ہمارے کنٹیکٹ میں، بلوم فلٹر کو بلاکچین ڈیٹا ریڈر سروس سے داخل ہونے والے واقعات کے اعداد و شمار کے اعداد و شمار سے پہلے فلٹر کرنے کے لئے استعمال کیا جاتا ہے. اس میں جانا جاتا ہے کہ بدعنوانی یا اعلی ٹیکس کی لاگت کے جوڑے کے ایڈریس ہچز شامل ہیں. کسی بھی تفصیلی پروسیسنگ یا ریکارڈ حاصل کرنے سے پہلے، بل

ہمارے معمول میں implemented pre-checks کے باوجودArbHelperMapسمارٹ معاہدے (خاص طور پر_checkTaxLimitمالیات کا اندازہ کرنے کے لئے ایک راؤنڈ ٹریپ سوپ کی نمائش کرنے والی منطق کے مطابق، کچھ بدعنوانی جوڑے اب بھی ان ابتدائی آن لائن تصدیقوں کو دور کرنے میں کامیاب ہوسکتے ہیں.getAmountsOutفہرست (بس قیمت کے سوالات کے لئے استعمال کیا جاتا ہے) لگتا ہے کہ معمول، کم ٹیکس کی پیداوار کو واپس کرنے کے لئے.swapExactTokensForTokensیا بنیادیtransferیہ خصوصیات فروخت کے آپریشن پر بہت زیادہ چھپے ٹیکس (مثال کے طور پر، 99٪) عائد کرسکتے ہیں، یا یہاں تک کہ فروخت کو مکمل طور پر محدود کرسکتے ہیں، مؤثر طریقے سے فنڈز پکڑتے ہیں.

ہمارے ٹیسٹ کے مرحلے کے دوران، ہم نے اس طرح کے دھوکہ دہی جوڑوں کی ایک اہم تعداد سے ملاقات کی. میں نے ذاتی طور پر کچھ جوڑوں کے ایڈریس کو جمع کیا ہے جو ابتدائی کامیابی سے گزر گیا ہے.getAmountsOutاس db فائل کو پروجیکٹ کے GitHub ریپیوٹر پر عام طور پر دستیاب کیا جائے گا، جو دوسروں کو ان پھوپھڑوں سے بچنے میں مدد کرنے کے لئے ایک کمیونٹی وسائل کے طور پر کام کرتا ہے. یہ جاری گھوڑے اور ماؤس کھیل مسلسل نگرانی، تیزی سے سیاہ فہرست، اور ایک multi-layered دفاع کی حکمت عملی کی ضروریات کو ظاہر کرتا ہے.

اخلاقی اثرات اور سیاہ جنگل کے سایہ

"ڈاک جنگل" نمونہ نہ صرف بوتلوں کے درمیان کاٹنے والے مقابلہ کے لئے مناسب ہے بلکہ DeFi کے وسیع اخلاقی ماحول کے لئے بھی. تبادلہ خیال کی کارکردگی، مارکیٹ کی صحت اور قیمتوں کی دریافت کے لئے اہم ہے، ایک سخت حقیقت کے ساتھ آتا ہے: تبادلہ خیال کاروں کی طرف سے پیدا کردہ منافع اکثر کم پیچیدہ مارکیٹ کے شرکاء سے نکالنے والی قدر کا اظہار کرتے ہیں.

ثقافت کے مترادفاتFOMO (Fear Of Missing Out)بلاکچین کے بنیادی میکانیزم اور مالی آلات کے بارے میں عام سمجھنے کی کمی کے ساتھ مل کر، بہت سے خریدار صارفین کو اس ماحول میں آسانی سے شکار بناتے ہیں. وہ انتہائی غیر متوازن مارکیٹوں میں داخل ہوتے ہیں، نئے پروٹوکولز کے ساتھ بات چیت کرتے ہیں، اور اس طرح کے خیالات کی مکمل پہچان کے بغیر تجارت کرتے ہیں، MEV، یا خفیہ معاہدے کے مالیات.

ترقی یافتہ اوزار کے ساتھ ان لوگوں کے لئے اقتصادی طور پر منطقی ہے، لیکن یہ ڈینمیکس ڈسٹرکٹ ٹیکنالوجی کی خوشبو پر سایہ ڈالتا ہے. کہانی تیزی سے "نیکی توانائی" سے "مذہبی رویے" میں منتقل ہوسکتا ہے، جس میں غیر معمولی طور پر بہت زیادہ وعدہ رکھتا ہے جس میں ایک جگہ میں اعتماد کو ضائع کرتا ہے. ڈیفائی، اس کے بنیادی مقصد کے طور پر، مالیات کو جمہوری کرنے کے لئے ہے، اجازت کے بغیر رسائی اور شفافیت فراہم کرتا ہے. تاہم، MEV کی پیچیدہ نوعیت اور دھوکہ دہی کی فراہمی غیر معمولی طور پر ان احکامات کو نقصان پہنچا سکتا ہے، جس میں ایک دو سطح کے نظام پیدا ہوتا ہے جہاں صرف تکنیکی ماہرین واقعی محفوظ طریقے سے چل سکتے ہیں. یہ ضروری ہے کہ، ڈیزائنرز کے

نتیجہ: اب بھی اندھیرے جنگل میں سوار

ڈیفائی پرچم کی منفرد پیچیدگیوں اور مسلسل چیلنجوں کے باوجود، اس arbitrage bot کی انجینئرنگ کا دورہ نظریاتی اصولوں کی ایک حیرت انگیز تصدیق ہے جو عملی طور پر لاگو ہوتا ہے.speed, precision, and data-driven insights, شناخت اور multi-leg arbitration کے مواقع کو عملدرآمد کرنے کے قابل.

ابتدائی طور پر، "ارک جنگل" کے اندر ایک عام توقع تھی کہ تبادلے کی قیمت کی بڑی اکثریت فوری طور پر بڑے، اچھی طرح سے وسائل کے کھلاڑیوں کی طرف سے قبضہ کیا جائے گا، خود میزبان کرنسیوں اور بلاک مینوفیکچررز کے ساتھ براہ راست رسائی کا استعمال کرتے ہوئے.

اگرچہ پرانے AMM ماڈل پر فائدہ مند تبادلے جیسے Uniswap V2 (جو بنیادی طور پر مستحکم پروڈکٹ بیگ پر منحصر ہیں) کو طویل مدتی طور پر برقرار رکھنے کے لئے مشکل ہوسکتا ہے کیونکہ گیس کی قیمتوں کی بڑھتی ہوئی اور بڑھتی ہوئی تنازعہ کی وجہ سے، "ڈیک جنگل" ترقی جاری رکھتا ہے. تازہ تبادلے، جیسے Uniswap V3 کے مرکب لکیوڈٹی AMMs (CLAMMs)، نئے تبادلے کے ویکٹرز کی پیشکش کرتے ہیں جو زیادہ پیچیدہ ماڈلنگ کی ضرورت ہوتی ہے لیکن اکثر بڑھتی ہوئی سرمایہ کاری کی کارکردگی کی وجہ سے زیادہ واپسی پیدا کرتی ہے. اس کے علاوہ، کرایہ چینج تبادلے کی بڑھتی ہوئی میدان، پلگ ان اور بین بلاکچین موا

لہذا، اگرچہ میں اب بھی غریب ہوں، میں یقین سے کہہ سکتا ہوں کہ میں نے ایک اچھا جنگلی نائجیریٹر بن چکا ہوں.My compass is sharper, my map more detailed, and I understand the whispers of the canopy.

پروجیکٹ Repository

ان لوگوں کے لئے جو عملی تنصیب اور ہم نے بحث کی ہے کہ کچھ "گھوڑے" کے پیچھے بہت حقیقی اعداد و شمار میں زیادہ گہری جانا چاہتے ہیں، ہمارے کوڈ بیس کا ایک صاف ورژن اور جانا جاتا ہے کہ زبردست ٹوکن جوڑوں کے ساتھ ایک ڈیٹا بیس دستیاب ہے.GitHub کے ذخائریہ 85 مخصوص جوڑوں، اگرچہ تعداد میں چھوٹے، ایک غیر متوازن طور پر اہم ٹرانسمیشن حجم پیدا کرتے ہیں کیونکہ وہ مسلسل ناخوشگوار بوٹس کو غیر منافع بخش تجارتوں میں لانے کی کوشش کرتے ہیں.

GitHub کے ذخائر

References کے

  • Dan Robinson، Georgios Konstantopoulos. "Ethereum ایک اندھیرے جنگل ہے."
  • Guillermo Angeris، Hsien-Tang Kao، Rei Chiang، Charlie Noyes، اور Tarun Chitra.
  • Claudio Gebbia. “Analysis and Implementation of Arbitration Bots in Centralized and Decentralized Finance” ، زوریچ یونیورسٹی.
  • Y. Zhang، Z. Li، T. Yan، Q. Liu، N. Vallarano، اور C. J. Tessone، “توازن کے کورس میں منافع کی زیادہ سے زیادہ”.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks