پرش به محتویات

خطاها

همهٔ استثناها از bitpin_sdk.errors.BitpinError ارث می‌برند و status، body (پاسخ پردازش‌شده) و endpoint_id دارند. کلاس‌ها مثل ccxt هستند و بلوک‌های except فعلی شما کار می‌کنند.

BitpinError
├── ExchangeError                 سرور با خطا جواب داده
│   ├── AuthenticationError       کلید/secret اشتباه، IP غیرمجاز، توکن باطل
│   ├── PermissionDenied          حساب اجازه ندارد (مثلاً سطح احراز هویت)
│   ├── InsufficientFunds         موجودی کافی نیست
│   ├── InvalidOrder              سفارش یا لغو رد شد
│   ├── OrderNotFound
│   ├── BadRequest                پارامتر نامعتبر
│   │   ├── BadSymbol
│   │   └── InvalidOTP            .code: invalid_otp | otp1_already_verified | extra_try
│   └── NotSupported              بیت‌پین فعلاً این را ندارد (.feature)
└── NetworkError                  شاید درخواست به سرور نرسیده باشد
    ├── RateLimitExceeded         .retry_after (ثانیه یا None)
    ├── RequestTimeout
    └── ExchangeNotAvailable      5xx، تعمیرات

چه چیزی تکرار می‌شود

درخواست با NetworkError تکرار می‌شود؟
درخواست‌های GET و آدرس واریز بله: تا max_retries با فاصلهٔ ۰٫۵، ۱، ۲… ثانیه؛ 429 فقط اگر retry_after ≤ ۵ ثانیه
ثبت سفارش، ثبت گروهی، لغو، برداشت، OTP هرگز. تنها استثنا: پس از 401 (سرور پیش از هر پردازشی توکن را رد کرده) کلاینت توکن را تمدید می‌کند و درخواست را یک بار دیگر می‌فرستد

اگر create_order خطای NetworkError بدهد، شاید سفارش ثبت شده باشد و شاید نه. پیش از ثبت دوباره، آن را با clientOrderId پیدا کنید:

try:
    client.create_order("USDT/IRT", "limit", "buy", "10", "90000", {"clientOrderId": cid})
except errors.NetworkError:
    found = client.fetch_orders("USDT/IRT", params={"identifier": cid})

نگاشت خطاهای HTTP

سرور استثنا
401، یا 406 در احراز هویت AuthenticationError
403 PermissionDenied
404 روی سفارش OrderNotFound
406 با insufficent_balance و مشابه InsufficientFunds
406 با cancel_order_not_allowed InvalidOrder
400 در ثبت سفارش InvalidOrder
400 با کد OTP InvalidOTP
سایر 400 / 404 BadRequest
429 RateLimitExceeded
5xx ExchangeNotAvailable

قواعد در spec/bitpin.yaml هستند تا همهٔ زبان‌های SDK خطاها را یکسان نگاشت کنند.