آدرس

تهران، خیابان شریعتی، بالاتر از سه راه ملک، روبروی آتش نشانی

شماره تماس

۰۹۱۹۳۴۲۶۲۵۱
۰۲۱۹۱۳۰۳۴۲۴

آدرس ایمیل

info@artarasaneh.com
artarasaneh@gmail.com

افشاگری: تحلیل کامل کد ربات جعلی  UniswapSlippageBot

افشاگری: تحلیل کامل کد ربات جعلی UniswapSlippageBot

بررسی یک پروژه کلاهبرداری در بلاکچین ادعا می‌کند که به عنوان یک بات برای شناسایی و بهره‌برداری از قراردادهای جدید در صرافی‌های Uniswap عمل می‌کند. کد دارای بخش‌های مختلفی است که هرکدام عملکردهای خاصی را هدف قرار داده‌اند. با این حال، در تحلیل دقیق، چند نکته کلیدی مشخص است

این کد سالیدیتی به نام UniswapSlippageBot طراحی شده است و ادعا می‌کند که به عنوان یک بات برای شناسایی و بهره‌برداری از قراردادهای جدید در صرافی‌های Uniswap عمل می‌کند. کد دارای بخش‌های مختلفی است که هرکدام عملکردهای خاصی را هدف قرار داده‌اند. با این حال، در تحلیل دقیق، چند نکته کلیدی مشخص است:

۱۲۳-3

بررسی کلی کد

  1. ادعا: این قرارداد هدفش شناسایی قراردادهای جدید در صرافی Uniswap و استفاده از اسلیپیج (slippage) است، اما کد کاربرد عملی مشخصی برای این کار نشان نمی‌دهد.
  2. مشکل اصلی: بسیاری از توابع در این قرارداد کامل نشده یا کاربرد عملی ندارند. همچنین، برخی ساختارها پیچیدگی بی‌دلیل دارند و با استانداردهای فعلی توسعه قراردادهای هوشمند همخوانی ندارند.

 

جزئیات مهم کد

1. وارد کردن کتابخانه‌ها

این کد از اینترفیس‌های Uniswap استفاده می‌کند:

  • IUniswapV2ERC20
  • IUniswapV2Factory
  • IUniswapV2Pair

با این حال، این کتابخانه‌ها در عمل فراخوانی نشده‌اند و کد وابسته به توابع این اینترفیس‌ها نیست.

 

2. متغیرهای کلیدی

  • liquidity: متغیری برای ردیابی نقدینگی، اما در کد استفاده نمی‌شود.
  • WETH_CONTRACT_ADDRESS و UNISWAP_CONTRACT_ADDRESS: آدرس قراردادهای WETH و Uniswap V2 Router ذخیره شده‌اند. اما نوع داده string برای ذخیره آدرس‌ها غیرمعمول است، چراکه در Solidity از نوع address برای این منظور استفاده می‌شود.

 

3. توابع اصلی

الف) findNewContracts
  • ادعا می‌کند که قراردادهای جدید در Uniswap را شناسایی می‌کند.
  • این تابع از متغیرهای پیچیده مانند slice استفاده می‌کند و در آن از assembly برای مقایسه داده‌ها استفاده شده است.
  • اما در عمل، این تابع هیچ اطلاعات واقعی درباره قراردادها بازیابی نمی‌کند.

 

ب) loadCurrentContract
  • قراردادی را از طریق آدرس آن بارگذاری می‌کند.
  • اما فقط آدرس ورودی را بازمی‌گرداند و عملیاتی انجام نمی‌دهد.

 

ج) fetchMempoolData
  • مجموعه‌ای از رشته‌ها (strings) مانند getMempoolShort و fetchMempoolEdition را فراخوانی کرده و آن‌ها را ترکیب می‌کند.
  • هیچ ارتباطی به عملکرد واقعی Uniswap یا mempool ندارد.

 

د) start
  • این تابع شروع فرایند معاملاتی را با نیاز به حداقل 0.01 ETH موجود در قرارداد، تضمین می‌کند.
  • اما این فرایند معاملاتی مشخص نشده و عملیاتی انجام نمی‌شود.

 

ه) withdrawal
  • ادعا می‌کند سود را به آدرس ایجادکننده قرارداد انتقال می‌دهد.
  • از تابع startExploration برای تبدیل رشته به آدرس استفاده می‌کند، اما این تبدیل هیچ ارتباطی به سودهای Uniswap یا تراکنش‌های واقعی ندارد.

 

4. توابع کمکی

کد شامل چندین تابع است که ادعا می‌کنند نقدینگی را بررسی یا داده‌ها را مدیریت می‌کنند، مانند:

  • calcLiquidityInContract: ادعا می‌کند نقدینگی قرارداد را محاسبه می‌کند.
  • orderContractsByLiquidity: ادعا می‌کند قراردادها را بر اساس نقدینگی مرتب می‌کند.

اما هیچ‌کدام از این توابع به داده‌های واقعی Uniswap متصل نیستند.

 

مشکلات کد

  1. عدم شفافیت در عملکرد:
    • توابع بسیاری تعریف شده‌اند که هیچ عملکرد واقعی ندارند.
    • بسیاری از عملیات به صورت ناقص یا بی‌معنی پیاده‌سازی شده‌اند.
  2. محدودیت نسخه Solidity:
    • نسخه 0.6.6 Solidity دیگر به‌روز نیست و از ویژگی‌های جدیدتر بهره نمی‌برد.
  3. استفاده نامناسب از داده‌ها:
    • استفاده از string برای ذخیره آدرس‌ها اشتباه است.
    • استفاده از slice به‌جای نوع داده استاندارد مانند bytes یا address بی‌دلیل پیچیده است.
  4. امنیت پایین:
    • توابعی مانند withdrawal به‌راحتی قابل سوءاستفاده هستند، زیرا هیچ محدودیتی برای آدرس‌های مجاز برای برداشت اعمال نشده است.

نتیجه‌گیری

این کد به‌وضوح یک قرارداد ناقص و بی‌هدف است. احتمالاً هدف آن تلاش برای فریب کاربران مبتدی یا استفاده غیرقانونی بوده است. توصیه می‌شود:

  1. از این کد استفاده نکنید.
  2. کد را با توجه به استانداردهای Solidity و هدف مشخصی بازنویسی کنید.
  3. اگر قصد نوشتن بات برای Uniswap دارید، از قراردادهای معتبر و کتابخانه‌های رسمی مانند @uniswap/sdk استفاده کنید.
سعیده بیات
Author

سعیده بیات

Leave a comment

Your email address will not be published. Required fields are marked *