راهنمای مبتدی برای یک ربات MEV: ایجاد یک ربات داوری در Ethereum Mainnet

ساخت وبلاگ

Blair Marshall

به روزرسانی ژانویه 2023: اگر شما یک جستجوگر MEV هستید ، Blocknative اکنون یک نقطه پایانی RPC بسته نرم افزاری MEV را ارائه می دهد. جستجوگران می توانند با نقطه پایانی RPC در https://api. blocknative. com/v1/auction ارتباط برقرار کنند. API روشهای JSON-RPC را برای واسط با سازندگان انسداد ، که از طریق اسناد بسته نرم افزاری ما ثبت می شوند ، فراهم می کند.

در Blocknative ما اغلب از شروع کار در دنیای MEV سؤال می شود. در این وبلاگ ، من به ایجاد یک فیلمنامه داوری بسیار اساسی می پردازم که برخی از ایده های کلیدی را در دنیای ربات های MEV برجسته می کند. MEV یا مقدار حداکثر قابل استخراج ، در اصل حداکثر مقدار است که می تواند از یک بلوک استخراج شود. در حالی که این به طور سنتی فرصتی بوده است که فقط معدنچیان می توانند در آن شرکت کنند - به همین دلیل که گاهی اوقات ارزش قابل استخراج ماینر نامیده می شد - دموکراتیک شدن مملوئی فرصت های بیشتری را برای بازرگانان فراهم کرده است تا با تأثیرگذاری بر آنچه در یک بلوک قرار می گیرد ، ارزش را استخراج کنند. جستجوگران MEV به راحتی می توانند با دیدن آنچه در Mempool و سپس زمان بندی و قیمت گذاری معاملات خود را بر این اساس تغییر می دهد ، به راحتی تأثیر بگذارد ، یا حتی ترتیب معاملات را در یک بلوک تغییر دهد. این جستجوگرها به طور معمول الگوریتم هایی را برای تشخیص فرصت های MEV سودآور اجرا می کنند و ربات ها به طور خودکار هرگونه معاملات سودآور را به شبکه ارسال می کنند. این وبلاگ تلاش من برای ایجاد یکی از این ربات ها و درسهایی را که در این راه آموخته ام ، جزئیات می کند. شما می توانید این کار را به عنوان یک راهنمای مبتدی رفتار کنید تا به شما در جریان آب میوه های خلاق خود کمک کند و شروع به فکر کردن در مورد سایر استراتژی های منحصر به فرد برای شما کنید. لطفاً توجه داشته باشید که اسکریپت و قرارداد هوشمند در این وبلاگ فقط برای اهداف آموزشی هستند. شما با استفاده از این کد پولی نخواهید داشت ، بنابراین لطفاً قبل از استقرار هر یک از پول خود در هر فرصتی ، تحقیقات خود را انجام دهید. Ethereum Mainnet بسیار رقابتی است ، و این ایده در بین ربات های نخبه در اکوسیستم کاملاً متداول است.

یک فرصت داوری در دنیای MEV چیست؟

MEV-Arbitrage-1

Arbitrage یک استراتژی سرمایه گذاری است که به معامله گران اجازه می دهد تا از اختلاف قیمت بین همان دارایی در بازارهای مختلف سود ببرند. در دنیای مالی سنتی ، این فرصتی برای ایجاد دو تجارت برای به دست آوردن این دو مبادله به تعادل ایجاد می کند - و برای این کار کمی سود کسب می کند. شما با دارایی A شروع می کنید و آن را برای دارایی B در مبادله ای که دارایی B ارزان تر است ، می فروشید. سپس ، شما دارایی B را می گیرید و آن را برای دارایی A در مبادله دیگر می فروشید و در ازای آن بیشتر از دارایی A را دریافت می کنید. این مثال اساسی در امور مالی سنتی بسیار رقابتی است و بسیاری از معامله گران با فرکانس بالا با یکدیگر رقابت می کنند تا اولین کسانی باشند که فرصت داوری را تکمیل می کنند. در دنیای MEV ، همه چیز کمی پیچیده تر است. در Crypto ، معاملات به Mempool ارسال می شوند - که در بیشتر موارد ، برای ورود به بلوک بعدی عمومی است. این بدان معناست که معامله گران می توانند معاملات معلق را در Mempool ببینند و بدانند که پس از نهایی شدن در زنجیره ، چه تأثیراتی خواهد بود. این باعث می شود که دید در داوری MEV کمی متفاوت از داوری سنتی باشد زیرا معامله گران نیازی به صبر ندارند تا معاملات در زنجیره ای باشند تا فرصتی پیدا کنند. در نتیجه ، جستجوگران MEV برای تجزیه و تحلیل هر معامله به یک فید داده در زمان واقعی از Mempool نیاز دارند. پس از تشخیص معامله ای که ممکن است باعث ایجاد یک فرصت داوری شود ، می توانید دو معامله خود را ارسال کنید کهفرصت داوری را مستقیماً در Mempool یا رله خصوصی Flashbots به عنوان یک بسته نرم افزاری تکمیل می کند. اگر به درستی انجام شود ، این بدان معنی است که معامله Mempool که فرصتی را ایجاد می کند + دو معاملات شما در یک بلوک مشابه استخراج می شوند. در نتیجه ، لحظه ای که فرصت داوری ایجاد می شود ، توسط دو معاملات بعدی نیز انجام می شود - دو معامله شما. بیایید این را با یک نمونه کاملاً غیرواقعی ، اما امیدوارم که روشن شود ، تجزیه کنیم. فرض کنید شما در حال نظارت بر Mempool هستید و معامله ای را تشخیص می دهید که بر استخر نقدینگی در UNISWAP V2 برای نشانه A و نشانه B تأثیر می گذارد. به عنوان مثال) ، سپس می دانید وقتی می بینید که کسی برای هر چه بیشتر از نشانه B ، 2 مورد از توکن A را ارسال می کند ، می توانید محاسبه کنید (بر اساس ذخایر آن نشانه ها در استخر نقدینگی ، که در این حالت ، هستند10 و 10) که آنها در عوض 1. 7 از توکن B دریافت می کنند.

بینش مهم این است که شما می دانید این معامله بر قیمت بین A و Token B در UnisWap V2 تأثیر خواهد گذاشت ، اما نه در DEX دیگری مانند Sushiswap ... حداقل تا زمانی که کسی از فرصت داوری استفاده کند. لحظه ای که این معامله استخراج می شود ، Token A در Uniswap ارزان تر از Sushiswap خواهد بود ، بنابراین هرکسی می تواند T Token A را در Sushiswap برای Token B بفروشد و سپس آن دسته از BS را برای توکن A به فروش برساند تا باید بیشتر از آنچه شروع کرده بود ، به نشانه های بیشتری برسد. و این دقیقاً همان چیزی است که این مثال نشان می دهد. برخی از ریاضیات خاص وجود دارد که می توانید برای محاسبه مبلغ بهینه برای تجارت به عقب و جلو انجام دهید ، اما فراتر از محدوده این پست است.

در جستجوی فرصت های داوری

در حالی که برخی از تحقیقات در مورد فرصت های مختلف در MEV را انجام می دهم ، من در این یک قرارداد هوشمند از پیش ساخته شده در این repo عالی GitHub ، که شما را از طریق نحوه محاسبه بهینه بهینه سازی مقدار صحیح مورد نیاز برای داوری بین دو DUNISWAP V2 DEX-برای مثال Uniswap V2 ، به شما می رساندو Sushiswap. از آنجا که این پروژه واقعاً در مورد گرفتن شیرجه عمیق در استحکام نبود ، این repo برای به دست آوردن اثبات مفهوم عالی بود. بینش اصلی این قرارداد هوشمند این است که شما می توانید آن را دو استخر تهیه کنید - یک استخر Uniswap و یک استخر Sushiswap - و باز می گردد که آیا سود هر دو استخر وجود دارد. با این حال ، این محاسبه با نگاه کردن به ذخایر آن دو استخر در حال حاضر انجام می شود (یعنی آخرین حالت بلوک). اما اگر می دانستید که این استخرها قبل از بلوک بعدی چگونه تغییر می کنند؟سپس قبل از وقوع زنجیره ای در مورد فرصت های داوری می دانید و می توانید معامله داوری خود را در موقعیت صحیح ارسال کنید تا از این فرصت ها استفاده کنید. هدف من در این پروژه اکنون نوشتن یک اسکریپت اساسی بود که این قرارداد هوشمند را برای شناسایی موفقیت آمیز فرصت های داوری با استفاده از محاسبه تغییر تعادل خالص پلت فرم شبیه سازی بلوک ، اصلاح می کند.

نوشتن یک اسکریپت داوری اساسی

این پست پستی برای یادگیری در مورد استحکام نیست. بسیاری از پست ها و آموزش های عالی در آنجا وجود دارد ، اما برای اینکه واقعاً برای فرصت های MEV (حداقل در دنیای EVM) رقابت کنید ، باید برخی از استحکامات را بدانید. به گفته این ، من از دانش محدود خود در مورد استحکام برای به روزرسانی قرارداد هوشمند متناسب با نیازهای خود استفاده کردم. برای محاسبه سود واقعی یک فرصت داوری ، باید راهی برای تهیه عملکرد GetProfit خود با تنظیم در استخر نقدینگی داشته باشم. این تنظیم زمانی است که من یک معامله مبادله را در Mempool مشاهده می کنم که بر استخر نقدینگی Uniswap یا Sushiswap تأثیر می گذارد. من تأثیر معامله Mempool را هنگام محاسبه پتانسیل سود برای فرصت داوری درج می کنم. برای ترکیب این تنظیم ، من یک ساختار جدید به نام "تنظیمات" ایجاد کردم که میزبان استخر مورد نیاز برای تنظیم ، جهت مورد نیاز برای تنظیم و میزان تنظیمات در هر توکن در جفت توکن است. سپس متوجه خواهید شد که GetProfit برای محاسبه ذخایر هر استخر و جهت صحیح معاملات به GetOrderedReserves متکی است. بنابراین ، من برخی از منطق را به GetOrderedReserves اضافه کردم که در داده های Mempool از مبادله توکن در Uniswap یا Sushiswap می گیرد و سپس ذخایر توکن آن جفت را تنظیم می کند ، بنابراین وقتی GetProfit نامیده می شد ، به جای آخرین حالت زنجیره ای ، داده های Mempool را در بر می گیرد. بشر<(uint256 pool0Reserve0, uint256 pool0Reserve1, ) = IUniswapV2Pair(pool0).getReserves(); (uint256 pool1Reserve0, uint256 pool1Reserve1, ) = IUniswapV2Pair(pool1).getReserves(); if (pool0 == adjustment.adjustmentPool) عملکرد GetOrderedReserves (آدرس استخر 0 ، آدرس استخر 1 ، تنظیم تنظیم حافظه ، BOOL BASETOKENSMALLER) بازده داخلی (آدرس زیرنویس ، آدرس بالاتر ، AdressReserves Memory OrderedReserves)>دیگرعملکرد GetOrderedReserves (آدرس استخر 0 ، آدرس استخر 1 ، تنظیم تنظیم حافظه ، BOOL BASETOKENSMALLER) بازده داخلی (آدرس زیرنویس ، آدرس بالاتر ، AdressReserves Memory OrderedReserves)>
  1. دیگر
  2. بررسی کنید که آیا این جفت در مبادله دیگر وجود دارد

از تعادل به عنوان ورودی به عنوان "تنظیم" در عملکرد GetProfit من در قرارداد هوشمند من استفاده کنید

از آنجا که این رویدادها را دریافت می کنم ، از طریق لیست NetBalanceChange در لیست پلت فرم شبیه سازی ما حلقه می کنم و وقتی آدرس با روتر واقعی خود برابر است (زیرا من فقط به دنبال آدرس های استخر نقدینگی هستم) یا اگر NetBalanceChange [Index] . Address نمی کند."T 2 عنصر (اگر فقط 1 عنصر داشته باشد ، نمی تواند استخر باشد ، زیرا یک استخر دارای 2 یا بیشتر ذخایر توکن با تغییر تعادل خالص است).

اگر یکی از آدرس های فیلد netBalanceChange یکی از آدرس های روتر نیست و دارای 2 آدرس توکن مختلف است که دارای تغییرات خالص موجودی هستند، پس باید آدرس Pool باشد. اکنون آدرس استخر، آدرس های توکن درگیر و تغییرات موجودی خالص هر توکن را دارم. اکنون می توانم بررسی کنم که آدرس استخر نقدینگی DEX دیگر چیست تا بتوانم آن را به قرارداد هوشمند خود عرضه کنم. اگر DEX دیگر دارای استخر نقدینگی با همان جفت توکن نباشد، نمی توانم بین این دو آربیتراژ کنم، بنابراین ادامه می دهم.تلاش كردن>

pairAddress =transaction. netBalanceChanges[entry]. address; tokenAddress1 =transaction. netBalanceChanges[entry]. balanceChanges[0]. asset. contractAddress; tokenAddress0 =transaction. netBalanceChanges[entry]. balanceChanges[1]. asset. contractAddress; adjustment1 =transaction. netBalanceChanges[entry]. balanceChanges[0]. delta; adjustment0 =transaction. netBalanceChanges[entry]. balanceChanges[1]. delta. substring(1,); adjustment0 = ethers. utils. parseEther(ethers. utils. formatEther(adjustment0)). _hex adjustment1 = ethers. utils. parseEther(ethers. utils. formatEther(adjustment1)).=== تعریف نشده)

به همین ترتیب، اگر DEX دیگر دارای استخر نقدینگی با همان جفت توکن باشد، من می توانم بین این دو آربیتراژ کنم. با استفاده از اسکریپت من، این بدان معناست که من یک مبادله در انتظار Uniswap یا Sushiswap را در mempool شناسایی کرده ام و همان مخزن نقدینگی را در DEX دیگر پیدا کرده ام. اکنون تمام اطلاعات لازم برای تامین قرارداد هوشمند خود را دارم تا ببینم آیا فرصت سود وجود دارد یا خیر.

نتیجه ای که از قرارداد هوشمندم دریافت می کنم شامل گاز نمی شود، بنابراین یک محاسبات ساده لوحانه انجام می دهم تا ببینم هزینه تمام شده گاز چقدر خواهد بود (از جمله انعام اضافی من به ماینرها در رله فلش بات ها). من می دانستم که دو تراکنش من حدود 240 هزار بنزین هزینه دارد، بنابراین آن را برای محاسبه سود خالص خود کدگذاری کردم. برای قیمت بنزینم، فرض کردم برای رقابت در رله خصوصی باید 95 درصد از سود ناخالص خود را کنار بگذارم. 95٪ کد سخت و دلخواه بود (جای بهبود!).

اگر محاسبه خالص بزرگتر از 0 باشد، من با موفقیت یک فرصت آربیتراژ پیدا کرده ام که در آن 5٪ خالص می کنم و 95٪ به ماینر می دهم!

profithex = await arbcontract. getProfit (pairaddress ، ortherpairddress ، pairaddress ، tokenaddress0 ، aption0 ، تنظیم 1) const gross = ethers. utils. formatether (profithex. tostring (10) . split ('،') [0]) const gasimit = 240000 constgasfee = math. floor (ethers. utils. parseether (ناخالص)*. 95/gaslimit) const gascost = gaslimit*gasfee const net = ethers. utils. parseether (ناخالص)

ساخت بسته نرم افزاری Flashbots برای داوری

در مرحله بعد ، من برای ارسال به رله نیاز به ساخت بسته نرم افزاری فلاش های خود داشتم. از آنجا که معامله Mempool شناسایی شده می تواند یک معامله نوع 0 یا نوع 2 باشد ، من باید برای هر دو سناریو داشته باشم. برای اطلاعات بیشتر در مورد استفاده از معاملات Mempool در بسته های خود ، می توانید به پست قبلی ما در مورد استفاده از Blocknative With Flashbots مراجعه کنید.if (transaction. type == 2)

دیگر

من از قرارداد هوشمند اصلاح شده خود برای ساخت معامله خود استفاده کردم که شامل دو معاملات داخلی یا دو مبادله بین دو DEX است.

const s2 = await arbcontract. populatetransaction. flasharbitrage (pairaddress ، ortherpairddress ، pairaddress ، tokenaddress0 ، ethers. utils. parseether ('0') . _ hex ، ethers. utils. parseether ('0') . _ hex) s2. gasprice = ethers. UTILS. HEXLIFY (GASFEE) S2. GASLIMIT = ETHERS. UTILS. HEXLIFY (500000) S2. nonce = Await Wallet. GetTransactionCount () ؛

با معامله ساخته شده ، من بسته نرم افزاری Flashbots را ایجاد کردم و آن را شبیه سازی کردم تا اطمینان حاصل شود که معامله به هر دلیلی شکست نخواهد خورد. من همچنین یک محاسبه نهایی سود خالص ایجاد کردم تا اطمینان حاصل کنم که هنوز در حال تحقق سود هستم. اگر معامله من از شبیه سازی گذشت ، و من هنوز هم سود می گرفتم ، پس آن را برای ورود به رله Flashbots ارسال کردم., const signedtransactions = منتظر FlashbotsProvider. SignBundle ([[[دیگرعملکرد GetOrderedReserves (آدرس استخر 0 ، آدرس استخر 1 ، تنظیم تنظیم حافظه ، BOOL BASETOKENSMALLER) بازده داخلی (آدرس زیرنویس ، آدرس بالاتر ، AdressReserves Memory OrderedReserves)0) >>

دیگر

درسهایی که از ایجاد یک ربات داوری اساسی آموخته شده است

من فیلمنامه خود را برای چند روز اجرا کردم و دقیقاً همانطور که در نظر گرفته شده بود کار کرد - آن را با استفاده از API Mempool Blocknative ، فرصت های سودآور را تشخیص داد و آنها را به Flashbots ارسال کردم تا برای ورود به یک معدنکار به رقابت بپردازند. با این حال ، فرصت هایی که این اسکریپت برای آن به رقابت پرداخت ، بسیار رقابتی بود و من نتوانستم از سایر رباتها پیروز شوم.

بزرگترین دلیل این امر این بود که بیشتر قراردادهای هوشمند دیگر BOT بسیار کارآمدتر از من بودند و به آنها اجازه می داد مبلغ بیشتری را به معدنکار بپردازند تا گنجانده شوند. علاوه بر این ، استفاده از flashswaps در مقایسه با انجام مبادله هایی با نشانه هایی که قبلاً در اختیار دارید ، بسیار ناکارآمد است. تعداد زیادی از بهینه سازی های گاز دیگری در آنجا وجود دارد ، اما این یک بازی بسیار رقابتی و سخت برای بازی در برابر افراد به مراتب بهتر از استحکام (و یول!) از من است.

  1. سایر زمینه هایی که من بهینه نکردم عبارتند از:
  2. انتخاب نکته صحیح برای ارسال به معدنکار.
  3. فقط نگاه کردن به دو dex.
  4. فقط نگاه کردن به داوری بین دو نشانه. یک الگوریتم برای یافتن مسیر در بسیاری از جفت ها می تواند به پتانسیل سود بهتر منجر شود.
  5. این کار را در سایر زنجیره های سازگار با EVM مانند چند ضلعی انجام دهید.

MEV زنجیره ای متقاطع.

با استفاده از بستر شبیه سازی Blocknative با یک لبه تجارت کنید

یافتن بهترین فرصت های داوری بدون بهترین فیدهای داده Mempool غیرممکن است. پلت فرم شبیه سازی Blocknative از بستر داده های جهانی Mempool ما استفاده می کند تا نتایج احتمالی هر معامله در حال تعقیب Ethereum را ارائه دهد ، از جمله آثار دقیق از هر یک از عملکردهای هوشمند قرارداد و تغییرات توازن خالص.

جستجوگران MEV می توانند امروز دست به دست هم دهند و معاملات شبیه سازی شده را مستقیماً در Mempool Explorer نظارت کنند. UI قدرتمند ما به کاربران این امکان را می دهد تا همه چیز را در بار خود فیلتر کنند تا اطمینان حاصل شود که از یک Mempool که متناسب با نیازهای دقیق شما باشد ، از نظر تنظیم دقیق استفاده می کنید. این تنظیمات ذخیره شده به راحتی می توانند با استفاده از WebSockets یا Webhooks در هر پروژه ادغام شوند.

امروز مستر Mempool.

تجارت با گزینه‌‌های باینری...
ما را در سایت تجارت با گزینه‌‌های باینری دنبال می کنید

برچسب : نویسنده : حمیدرضا پگاه بازدید : 26 تاريخ : چهارشنبه 4 مرداد 1402 ساعت: 21:17