Prompt Coach
New Prompt
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` هستند
      را شناسایی کنید.
- **خروجی:**  
  -