Skip to content

Commit 582c380

Browse files
committed
fix
1 parent 22337a5 commit 582c380

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+973
-11931
lines changed

examples/fetch_data.py

Lines changed: 267 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,267 @@
1+
#!/usr/bin/env python3
2+
"""
3+
مثال عملی برای دریافت داده از بلاکچین استلار
4+
"""
5+
6+
import os
7+
import sys
8+
import asyncio
9+
from datetime import datetime
10+
11+
# اضافه کردن مسیر parent به sys.path
12+
current_dir = os.path.dirname(os.path.abspath(__file__))
13+
parent_dir = os.path.dirname(current_dir)
14+
sys.path.insert(0, parent_dir)
15+
16+
# اکنون می‌توانیم import کنیم
17+
try:
18+
from src.core.stellar_client import StellarHorizonClient
19+
from src.streaming.horizon_listener import HorizonWebSocketListener, BatchTransactionProcessor
20+
print("✅ ماژول‌ها با موفقیت import شدند")
21+
except ImportError as e:
22+
print(f"❌ خطای import: {e}")
23+
print("📁 مسیرهای sys.path:")
24+
for path in sys.path:
25+
print(f" - {path}")
26+
sys.exit(1)
27+
28+
29+
async def example_fetch_account():
30+
"""مثال دریافت اطلاعات حساب"""
31+
print("📋 مثال ۱: دریافت اطلاعات حساب")
32+
print("-" * 50)
33+
34+
try:
35+
# استفاده از context manager
36+
async with StellarHorizonClient() as client:
37+
# حساب معروف Stellar Development Foundation
38+
account_id = "GA5XIGA5C7QTPTWXQHY6MCJRMTRZDOSHR6EFIBNDQTCQHG262N4GGKTM"
39+
40+
print(f"🔍 در حال دریافت اطلاعات حساب: {account_id[:20]}...")
41+
account = await client.get_account(account_id)
42+
43+
if account:
44+
print(f"✅ حساب پیدا شد!")
45+
print(f" 👤 آدرس: {account.account_id}")
46+
print(f" 💰 موجودی: {account.balance} XLM")
47+
print(f" 🔢 Sequence: {account.sequence}")
48+
print(f" 🏠 Home Domain: {account.home_domain or 'ندارد'}")
49+
print(f" 📊 تعداد زیرمجموعه: {account.subentry_count}")
50+
else:
51+
print("❌ حساب پیدا نشد")
52+
except Exception as e:
53+
print(f"❌ خطا در دریافت حساب: {e}")
54+
55+
print()
56+
57+
58+
async def example_fetch_transactions():
59+
"""مثال دریافت تراکنش‌های اخیر"""
60+
print("📋 مثال ۲: دریافت تراکنش‌های اخیر")
61+
print("-" * 50)
62+
63+
try:
64+
async with StellarHorizonClient() as client:
65+
# دریافت ۵ تراکنش آخر
66+
account_id = "GA5XIGA5C7QTPTWXQHY6MCJRMTRZDOSHR6EFIBNDQTCQHG262N4GGKTM"
67+
68+
print(f"🔍 در حال دریافت تراکنش‌های حساب: {account_id[:20]}...")
69+
transactions = await client.get_transactions_for_account(account_id, limit=3)
70+
71+
print(f"📊 تعداد تراکنش‌های دریافتی: {len(transactions)}")
72+
73+
for i, tx in enumerate(transactions, 1):
74+
print(f"\n {i}. تراکنش:")
75+
print(f" 🔗 Hash: {tx.hash[:25]}...")
76+
print(f" 📅 زمان: {tx.created_at.strftime('%Y-%m-%d %H:%M:%S')}")
77+
print(f" 💰 کارمزد: {tx.fee_paid} stroops")
78+
print(f" 📝 Memo: {tx.memo or 'خالی'}")
79+
print(f" 📒 Ledger: {tx.ledger}")
80+
except Exception as e:
81+
print(f"❌ خطا در دریافت تراکنش‌ها: {e}")
82+
83+
print()
84+
85+
86+
async def example_get_ledger_info():
87+
"""مثال دریافت اطلاعات ledger"""
88+
print("📋 مثال ۳: دریافت اطلاعات ledger جاری")
89+
print("-" * 50)
90+
91+
try:
92+
async with StellarHorizonClient() as client:
93+
ledger_seq = await client.get_ledger_sequence()
94+
if ledger_seq:
95+
print(f"✅ آخرین ledger: {ledger_seq}")
96+
97+
# دریافت تراکنش‌های این ledger
98+
print(f"🔍 در حال دریافت تراکنش‌های ledger {ledger_seq}...")
99+
transactions = await client.get_transactions_in_ledger(ledger_seq)
100+
101+
print(f"📊 تعداد تراکنش‌ها در این ledger: {len(transactions)}")
102+
103+
if transactions:
104+
# خلاصه‌ای از تراکنش‌ها
105+
sources = {}
106+
for tx in transactions[:5]: # فقط ۵ تراکنش اول
107+
source = tx.source_account[:10] + "..."
108+
sources[source] = sources.get(source, 0) + 1
109+
110+
print("\n 📈 نمونه‌ای از منابع تراکنش‌ها:")
111+
for source, count in sources.items():
112+
print(f" {source}: {count} تراکنش")
113+
else:
114+
print("❌ نتوانستیم sequence ledger را دریافت کنیم")
115+
except Exception as e:
116+
print(f"❌ خطا در دریافت اطلاعات ledger: {e}")
117+
118+
print()
119+
120+
121+
async def example_simple_stream():
122+
"""مثال ساده گوش دادن به تراکنش‌ها"""
123+
print("📋 مثال ۴: گوش دادن به تراکنش‌های زنده (۵ ثانیه)")
124+
print("-" * 50)
125+
126+
print("⚠️ این مثال نیاز به اتصال اینترنت دارد و ممکن است چند لحظه طول بکشد...")
127+
128+
counter = 0
129+
max_transactions = 3
130+
131+
async def process_transaction(tx_data):
132+
nonlocal counter
133+
counter += 1
134+
135+
tx_hash = tx_data.get('hash', '')[:20]
136+
source = tx_data.get('source_account', '')[:10]
137+
ledger = tx_data.get('ledger', 0)
138+
139+
print(f"\n 🎯 تراکنش #{counter}:")
140+
print(f" 🔗 Hash: {tx_hash}...")
141+
print(f" 👤 از: {source}...")
142+
print(f" 📒 Ledger: {ledger}")
143+
144+
if counter >= max_transactions:
145+
return True # سیگنال توقف
146+
return False
147+
148+
try:
149+
# ایجاد گوش‌دهنده
150+
listener = HorizonWebSocketListener()
151+
listener.add_callback(process_transaction)
152+
153+
print("\n🎧 در حال گوش دادن به تراکنش‌های زنده...")
154+
print("برای خروج Ctrl+C را فشار دهید\n")
155+
156+
# اجرا برای ۱۰ ثانیه یا تا ۳ تراکنش
157+
import signal
158+
159+
class TimeoutException(Exception):
160+
pass
161+
162+
def timeout_handler(signum, frame):
163+
raise TimeoutException()
164+
165+
# تنظیم تایم‌اوت
166+
signal.signal(signal.SIGALRM, timeout_handler)
167+
signal.alarm(10)
168+
169+
try:
170+
await listener.listen()
171+
except TimeoutException:
172+
print("\n⏰ زمان گوش دادن به پایان رسید")
173+
except KeyboardInterrupt:
174+
print("\n⏹️ توسط کاربر متوقف شد")
175+
except Exception as e:
176+
print(f"\n❌ خطا در گوش دادن: {e}")
177+
finally:
178+
signal.alarm(0) # غیرفعال کردن آلارم
179+
await listener.stop()
180+
181+
except Exception as e:
182+
print(f"❌ خطا در راه‌اندازی گوش‌دهنده: {e}")
183+
184+
print()
185+
186+
187+
async def example_test_connection():
188+
"""آزمایش اتصال به Horizon"""
189+
print("📋 آزمایش اتصال به شبکه استلار")
190+
print("-" * 50)
191+
192+
try:
193+
async with StellarHorizonClient() as client:
194+
# تست ساده با دریافت یک حساب شناخته شده
195+
test_account = "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7"
196+
197+
print(f"🔍 آزمایش اتصال به {client.horizon_url}...")
198+
199+
# تست GET ساده
200+
import aiohttp
201+
async with aiohttp.ClientSession() as session:
202+
async with session.get(client.horizon_url) as resp:
203+
if resp.status == 200:
204+
print("✅ Horizon API در دسترس است")
205+
else:
206+
print(f"❌ Horizon پاسخ داد: {resp.status}")
207+
208+
# تست دریافت حساب
209+
print(f"🔍 دریافت حساب آزمایشی...")
210+
account = await client.get_account(test_account)
211+
if account:
212+
print(f"✅ اتصال به بلاکچین استلار موفقیت‌آمیز بود!")
213+
print(f" 📍 شبکه: Stellar Public Network")
214+
print(f" 👤 حساب تست: {account.account_id[:20]}...")
215+
print(f" 💰 موجودی: {account.balance} XLM")
216+
else:
217+
print("⚠️ حساب تست پیدا نشد، اما اتصال برقرار است")
218+
219+
except aiohttp.ClientConnectorError:
220+
print("❌ خطای اتصال: نمی‌توان به Horizon متصل شد")
221+
print(" لطفاً اتصال اینترنت خود را بررسی کنید")
222+
except Exception as e:
223+
print(f"❌ خطای ناشناخته: {e}")
224+
225+
print()
226+
227+
228+
async def main():
229+
"""تابع اصلی"""
230+
print("=" * 60)
231+
print("🚀 Stellar Blockchain Data Fetcher - v1.0")
232+
print("=" * 60)
233+
print()
234+
235+
try:
236+
# آزمایش اتصال اولیه
237+
await example_test_connection()
238+
239+
# اگر اتصال برقرار بود، مثال‌های دیگر را اجرا کن
240+
print("🎯 اجرای مثال‌های مختلف...")
241+
print()
242+
243+
await example_fetch_account()
244+
await example_fetch_transactions()
245+
await example_get_ledger_info()
246+
await example_simple_stream()
247+
248+
except KeyboardInterrupt:
249+
print("\n\n⏹️ برنامه توسط کاربر متوقف شد")
250+
except Exception as e:
251+
print(f"\n❌ خطای غیرمنتظره: {e}")
252+
import traceback
253+
traceback.print_exc()
254+
255+
print("\n" + "=" * 60)
256+
print("✅ برنامه با موفقیت به پایان رسید!")
257+
print("=" * 60)
258+
259+
260+
if __name__ == "__main__":
261+
# برای ویندوز که signal.SIGALRM ندارد
262+
if sys.platform == "win32":
263+
print("⚠️ توجه: در ویندوز، تایم‌اوت سیگنال پشتیبانی نمی‌شود")
264+
print(" مثال گوش دادن ممکن است متفاوت کار کند")
265+
print()
266+
267+
asyncio.run(main())
851 Bytes
Binary file not shown.
22 KB
Binary file not shown.
5.78 KB
Binary file not shown.

src/core/init.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""
2+
ماژول هسته StellarChainAnalysis
3+
"""
4+
5+
from src.core.stellar_client import StellarHorizonClient, StellarTransaction, StellarAccount
6+
from src.core.stream_processor import TransactionProcessor, StreamManager
7+
8+
__all__ = [
9+
'StellarHorizonClient',
10+
'StellarTransaction',
11+
'StellarAccount',
12+
'TransactionProcessor',
13+
'StreamManager'
14+
]

0 commit comments

Comments
 (0)