توقيع أوامر الكريبتو على الموبايل من غير أخطاء محيّرة
إزاي Megora بيوقّع أوامر Binance على الجهاز، ويظبط فرق الساعة، ويرفض الأوامر الغلط قبل ما المنصة ترفضها.
أحمد عبد المجيد
قراءة دقيقتين
Megora تطبيق تداول على الموبايل لشبكة Binance Spot التجريبية: شموع مباشرة، دفتر أوامر مباشر، وأوامر حقيقية بتتسجّل في الدفتر وبتتنفّذ، بفلوس الشبكة التجريبية. فيه تلات حتت كود صغيرة هي اللي بتفرق بين تطبيق تثق فيه وتطبيق يحيّرك: إزاي الطلبات بتتوقّع، الساعة بتقول إيه، وإيه اللي بيحصل قبل ما الأمر يتبعت.

١. وقّع بالظبط اللي هتبعته#
Binance بيتأكد من كل طلب خاص بتوقيع HMAC-SHA256 على نص الاستعلام، بمفتاح الـ API السري. التوقيع مش هيطابق إلا لو النص اللي وقّعته هو نفس النص اللي بعته حرف بحرف، عشان كده Megora بيبني الاستعلام مرة واحدة ويوقّع نفس النص ده.
export function signQuery(query: string, secret: string): string {
return bytesToHex(hmac(sha256, utf8ToBytes(secret), utf8ToBytes(query)));
}
const q = toQuery({ ...params, recvWindow: RECV_WINDOW, timestamp: now() });
const url = `${hostFor(keys)}${path}?${q}&signature=${signQuery(q, keys.secret)}`;التوقيع مش هيطابق إلا لو النص اللي وقّعته هو نفس النص اللي بعته حرف بحرف.
المفتاح السري متخزّن في الـ Keychain على آيفون أو الـ Keystore على أندرويد، وعمره ما بيوصل لأي سيرفر. ده مناسب لفلوس التجربة وغلط لحساب حقيقي، لأن أي حاجة على الموبايل ممكن تتسحب منه. التطبيق فيه وضع Binance حقيقي متوصّل في الكود، بس مقفول برسالة "قريباً"؛ والنسخة اللي بفلوس حقيقية لازم تنقل التوقيع لسيرفر هو اللي شايل المفتاح.
٢. ساعة الموبايل مش مظبوطة#
كل طلب موقّع فيه توقيت لازم يبقى قريب جداً من ساعة المنصة. ساعات الموبايل بتتأخر أو تتقدم، ولما ده يحصل Binance بيرد بـ -1021، وده شكله بالظبط زي مفتاح API غلط. Megora بيقيس الفرق مع ساعة المنصة أول ما التطبيق يفتح ويضيفه على كل توقيت.
let timeOffset = 0;
export async function syncTime(live = false) {
const res = await fetch(`${live ? LIVE_REST_BASE : REST_BASE}/api/v3/time`);
const { serverTime } = await res.json();
timeOffset = serverTime - Date.now();
}
const now = () => Date.now() + timeOffset;ولو أمر رجع برضه بـ -1021، شاشة التداول بتعيد الضبط عشان المحاولة الجاية تعدّي.
٣. ارفض الأوامر الغلط قبل المنصة#
كل زوج تداول ليه قواعد: الكميات بتزيد بخطوات ثابتة، والأسعار بفروق ثابتة، وقيمة الأمر ليها حد أدنى. لو كسرت قاعدة Binance بيرد "-1013 Filter failure: LOT_SIZE"، ودي مش بتقول أي حاجة للمستخدم. Megora بيجيب القواعد دي لكل زوج ويتأكد من الأمر على الموبايل الأول، بيقرّب لتحت على الخطوة ويشرح المشكلة في جملة.

export function validateOrder(d: OrderDraft, f: Filters): string | null {
const qty = floorToStep(d.quantity, f.stepSize);
if (qty < f.minQty) return `Amount is below the ${f.minQty} minimum.`;
const price = d.type === "LIMIT" ? floorToStep(d.price, f.tickSize) : d.refPrice;
if (!(qty * price >= f.minNotional)) return `Order value is below the ${f.minNotional} USDT minimum.`;
return null;
}الخلاصة#
- وقّع نفس البايتات اللي هتبعتها بالظبط.
- صحّح ساعة الموبايل بدل ما تلوم المفتاح.
- اتأكد من قواعد المنصة على الجهاز عشان الأخطاء تبان كنصيحة مش أكواد.
- خليك صريح في مكان المفتاح السري، وده معناه إيه بالنسبة للفلوس الحقيقية.

