Prompt Coach
9.9/10
Overall Feedback
This is a perfect prompt! You were clear and gave great examples. The AI will know exactly what to do.
Created:
How Did Your Prompt Do?
Your Prompt
شما یک توسعهدهنده متخصص بلاکچین و محقق امنیتی هستید.
من میخواهم برای یک پروژه جدید، یک ربات پایتونی بسازم که روی سرور اجرا شود و هدف آن پیدا کردن تراکنشهای «گیر کرده» یا «ناقص» روی شبکه اتریوم و در مرحله بعد جستجو در کل شبکه بلاکچین باشد.
لطفاً این کار را مرحلهبهمرحله انجام دهید و قبل از نوشتن کد، حتماً طرح (design) و کتابخانههایی که استفاده خواهید کرد را توضیح دهید.
اگر در مورد این وظایف سؤالی دارید، لطفاً قبل از کدنویسی از من بپرسید.
خط سیر کلی:
1. ابتدا فقط «اسکنر کیف پول» را طراحی و پیادهسازی کنید.
2. بعداً (در مرحله دوم) قابلیت «جستجوی سراسری شبکه» را اضافه کنیم.
### فناوریها و محدودیتها
- از **Python 3.10+** استفاده کنید.
- از کتابخانههای زیر استفاده کنید:
- **requests** برای کار با API
- **Web3.py** برای تعامل سطح پایینتر با بلاکچین (در صورت نیاز)
- از **API سایت Etherscan** برای بازیابی تراکنشها استفاده کنید.
- فرض کنید من **کلیدهای API لازم** برای Etherscan (و در آینده برای سرویسهای مشابه مثل bscscan و …) دارم و آنها را از طریق متغیرهای محیطی (Environment Variables) یا فایل `.env` در اختیار شما قرار میدهم.
- کد باید قابل اجرا روی یک سرور (لینوکس یا ویندوز) باشد و ساختار آن تمیز و ماژولار باشد.
### ساختار پروژه و فایلها
لطفاً کد را به صورت حداقل در دو فایل جداگانه سازماندهی کنید:
- `main.py`
**نقش:** نقطه ورود برنامه، مدیریت اجرای ربات، فراخوانی توابع سطح بالا.
- `utils.py`
**نقش:** توابع کمکی، کار با API، پارس پاسخها، فیلتر تراکنشها و هر ابزار مشترک دیگر.
(در صورت نیاز میتوانید فایلهای بیشتری پیشنهاد دهید، ولی لطفاً ابتدا این ساختار پایه را توضیح دهید.)
### تعریف دقیق «تراکنش گیر کرده» یا «ناقص»
لطفاً در طراحی خود این تعاریف را در نظر بگیرید و پیادهسازی کنید:
- **تراکنش در حال انتظار (Pending):**
- تراکنشی که:
- در mempool است،
- هنوز در هیچ بلاکی تأیید نشده است،
- یا وضعیت آن توسط Etherscan به صورت `pending` یا مشابه نشان داده میشود.
- **تراکنش حذفشده / بلاتکلیف (Dropped / Failed / Stuck):**
- تراکنشی که:
- وضعیت آن `failed`، `dropped`, `reverted` یا مشابه است،
- یا برای مدت قابل توجهی (مثلاً چندین بلاک) تأیید نشده مانده و پس از آن از mempool حذف شده،
- یا توسط Etherscan با وضعیتهایی مانند `0` (failure) ثبت شده است.
شما میتوانید با توجه به مستندات Etherscan و ساختار API آن، دقیقاً مشخص کنید که این وضعیتها را چطور از دادههای API تشخیص میدهید. لطفاً قبل از پیادهسازی، منطق تشخیص را توضیح دهید.
### محدودیت زمانی تراکنشها
- فقط **تراکنشهای ۳۰ روز گذشته** را جستجو و بررسی کنید.
- اگر API امکان فیلتر زمانی مستقیم نداشت:
- از روی شماره بلاکها یا timestamp تراکنشها، آنها را از نظر زمانی محدود کنید.
- تراکنشهای قدیمیتر از ۳۰ روز را نادیده بگیرید و ذخیره نکنید.
### ورودیها و فرمت فایلها
ربات باید بتواند ورودیها را به این شکل بگیرد:
- **آدرس مستقیم کیف پول (متن):**
- مثال:
`0x742d35Cc6634C0532925a3b844Bc454e4438f44e`
- **لینکهایی که شامل آدرس کیف پول یا استخر هستند:**
- مانند:
- `https://etherscan.io/address/0x742d35Cc6634C0532925a3b844Bc454e4438f44e`
- لینک استخرها یا قراردادهای مربوط به DeFi
- **فایل شامل آدرسها** (برای شروع، یک فرمت ساده مثل CSV):
- مثال فرمت `wallets.csv`:
- ستونها:
- `wallet_address`
- نمونه محتوا:
- `wallet_address`
- `0x742d35Cc6634C0532925a3b844Bc454e4438f44e`
- `0x00000000219ab540356cBB839Cbe05303d7705Fa`
لطفاً توابعی طراحی کنید که:
- آدرسها را از رشته ساده، لینک، یا فایل CSV استخراج کنند.
- ورودیهای نامعتبر را شناسایی و مدیریت کنند (مثلاً آدرس اشتباه).
### وظایف ربات (لطفاً حتماً از بولتپوینتها برای هر وظیفه استفاده کنید)
#### وظیفه ۱ – اسکنر کیف پول (Wallet Scanner)
**هدف:**
برای فهرستی از آدرسهای کیف پول اتریوم، تراکنشهای «در انتظار» یا «حذفشده/گیر کرده» را در ۳۰ روز گذشته پیدا کند.
**جزئیات:**
- **ورودی:**
- فهرست آدرسهای کیف پول اتریوم (از متن، لینک یا فایل).
- **منبع داده:**
- API سایت Etherscan (و در آینده امکان گسترش به سایتهای دیگر مثل bscscan).
- **کارها:**
- برای هر آدرس کیف پول:
- تراکنشهای ۳۰ روز گذشته را بازیابی کنید.
- وضعیت هر تراکنش را بررسی کنید.
- تراکنشهایی که:
- `pending` هستند، یا
- `failed / dropped / stuck` هستند
را شناسایی کنید.
- **خروجی:**
-