
افشاگری: تحلیل کامل کد ربات جعلی UniswapSlippageBot
بررسی یک پروژه کلاهبرداری در بلاکچین ادعا میکند که به عنوان یک بات برای شناسایی و بهرهبرداری از قراردادهای جدید در صرافیهای Uniswap عمل میکند. کد دارای بخشهای مختلفی است که هرکدام عملکردهای خاصی را هدف قرار دادهاند. با این حال، در تحلیل دقیق، چند نکته کلیدی مشخص است
این کد سالیدیتی به نام UniswapSlippageBot طراحی شده است و ادعا میکند که به عنوان یک بات برای شناسایی و بهرهبرداری از قراردادهای جدید در صرافیهای Uniswap عمل میکند. کد دارای بخشهای مختلفی است که هرکدام عملکردهای خاصی را هدف قرار دادهاند. با این حال، در تحلیل دقیق، چند نکته کلیدی مشخص است:
بررسی کلی کد
- ادعا: این قرارداد هدفش شناسایی قراردادهای جدید در صرافی Uniswap و استفاده از اسلیپیج (slippage) است، اما کد کاربرد عملی مشخصی برای این کار نشان نمیدهد.
- مشکل اصلی: بسیاری از توابع در این قرارداد کامل نشده یا کاربرد عملی ندارند. همچنین، برخی ساختارها پیچیدگی بیدلیل دارند و با استانداردهای فعلی توسعه قراردادهای هوشمند همخوانی ندارند.
جزئیات مهم کد
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 متصل نیستند.
مشکلات کد
- عدم شفافیت در عملکرد:
- توابع بسیاری تعریف شدهاند که هیچ عملکرد واقعی ندارند.
- بسیاری از عملیات به صورت ناقص یا بیمعنی پیادهسازی شدهاند.
- محدودیت نسخه Solidity:
- نسخه 0.6.6 Solidity دیگر بهروز نیست و از ویژگیهای جدیدتر بهره نمیبرد.
- استفاده نامناسب از دادهها:
- استفاده از
string
برای ذخیره آدرسها اشتباه است. - استفاده از
slice
بهجای نوع داده استاندارد مانندbytes
یاaddress
بیدلیل پیچیده است.
- استفاده از
- امنیت پایین:
- توابعی مانند
withdrawal
بهراحتی قابل سوءاستفاده هستند، زیرا هیچ محدودیتی برای آدرسهای مجاز برای برداشت اعمال نشده است.
- توابعی مانند
نتیجهگیری
این کد بهوضوح یک قرارداد ناقص و بیهدف است. احتمالاً هدف آن تلاش برای فریب کاربران مبتدی یا استفاده غیرقانونی بوده است. توصیه میشود:
- از این کد استفاده نکنید.
- کد را با توجه به استانداردهای Solidity و هدف مشخصی بازنویسی کنید.
- اگر قصد نوشتن بات برای Uniswap دارید، از قراردادهای معتبر و کتابخانههای رسمی مانند
@uniswap/sdk
استفاده کنید.

سعیده بیات
Leave a comment
Your email address will not be published. Required fields are marked *