عقود المواد التركيبية GMX.
يقدم هذا القسم لمحة عامة عن كيفية عمل النظام.
للحصول على نظرة عامة فنية، يرجى مراجعة القسم أدناه.
تدعم الأسواق كلاً من التداول الفوري والتداول الدائم، ويتم إنشاؤها عن طريق تحديد رمز ضمان طويل ورمز ضمان قصير ورمز مؤشر.
أمثلة:
يمكن لمزودي السيولة إيداع رمز الضمانات الطويلة أو القصيرة أو كليهما في رموز السيولة.
يتم استخدام رمز الضمان الطويل لدعم المراكز الطويلة، في حين يتم استخدام رمز الضمان القصير لدعم المراكز القصيرة.
يتحمل مزودو السيولة أرباح وخسائر المتداولين في السوق التي يوفرون السيولة لها.
إن وجود أسواق منفصلة يسمح بعزل المخاطر، ولا يتعرض مقدمو السيولة إلا للأسواق التي يودعون فيها، مما قد يسمح بالإدراج بدون إذن.
يمكن للمتداولين استخدام الرمز الطويل أو القصير كضمان للسوق.
تدعم العقود الميزات الرئيسية التالية:
لتجنب المشكلات التي تحدث في المقدمة، يتطلب تنفيذ معظم الإجراءات خطوتين:
يتم توفير الأسعار من خلال نظام أوراكل خارج السلسلة، والذي يقوم باستمرار بتوقيع الأسعار بناءً على وقت الاستعلام عن الأسعار.
يتم التوقيع على كل من الحد الأدنى للسعر والحد الأقصى للسعر، مما يسمح بتضمين معلومات حول فروق أسعار العطاءات والطلب.
تمثل الأسعار المخزنة في عقد Oracle سعر وحدة واحدة من الرمز المميز باستخدام قيمة بدقة تبلغ 30 رقمًا عشريًا.
يسمح تمثيل الأسعار بهذه الطريقة بتبسيط التحويلات بين مبالغ العملات الرمزية والقيم الورقية، على سبيل المثال، لحساب القيمة الورقية لعدد معين من الرموز المميزة، سيكون الحساب فقط: مبلغ الرمز المميز * سعر أوراكل، لحساب مبلغ الرمز المميز لـ ستكون القيمة الورقية: القيمة الورقية / سعر أوراكل.
رسوم التمويل وتأثير الأسعار تحافظ على توازن صفقات الشراء/ البيع مع تقليل مخاطر التلاعب بالأسعار.
هناك عدد قليل من الحراس والعقد في النظام:
هناك عدة أنواع رئيسية من العقود:
يتم فصل العقود إلى هذه الأنواع للسماح بإمكانية الترقية التدريجية.
يتم تخزين غالبية البيانات باستخدام عقد DataStore.
*تقوم عقود storeUtils بتخزين بيانات البنية باستخدام DataStore، مما يسمح بإضافة مفاتيح جديدة إلى البنيات.
يتم استخدام EnumberableSets للسماح بالاستعلام بسهولة عن قوائم الطلبات وقوائم المواضع بواسطة الواجهات أو أدوات حفظ البيانات، ويتم استخدام هذا على المفهرسين حيث قد يكون هناك تأخير للمفهرسين لمزامنة أحدث كتلة. ويساعد أيضًا تخزين القوائم مباشرة في العقد على ضمان إمكانية استرجاع البيانات الدقيقة والتحقق منها عند الحاجة.
* تُصدر عقود eventsUtils أحداثًا باستخدام باعث الحدث، ويتم تعميم الأحداث للسماح بإضافة قيم مفاتيح جديدة إلى الأحداث دون الحاجة إلى تحديث واجهات برمجة التطبيقات (ABIs).
اختصار لـ GMX Liquidity Vault: غلاف لأسواق متعددة بنفس الرموز الطويلة والقصيرة. تتم إعادة موازنة السيولة تلقائيًا بين الأسواق الأساسية بناءً على استخدام الأسواق.
يقدم هذا القسم وصفًا فنيًا للعقود.
يتم إنشاء الأسواق باستخدام MarketFactory.createMarket
، مما يؤدي إلى إنشاء MarketToken وتخزين بنية Market.Props في MarketStore.
يتم استخدام MarketToken لتتبع حصة مزودي السيولة في مجمع السوق وتخزين الرموز المميزة لكل سوق.
في أي وقت، يكون سعر MarketToken (worth of market pool) / MarketToken.totalSupply()
، ويمكن استخدام الدالة MarketUtils.getMarketTokenPrice
لاسترداد هذه القيمة.
قيمة مجمع السوق هو مجموع
تضيف الودائع رموزًا طويلة/قصيرة إلى مجموعة السوق وتقوم بإصدار MarketTokens إلى المودع.
يتم إنشاء طلبات الودائع عن طريق الاتصال بـ ExchangeRouter.createDeposit، مع تحديد:
يتم تنفيذ طلبات الإيداع باستخدام DepositHandler.executeDeposit، إذا تم إنشاء الإيداع عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
يتم حساب كمية MarketTokens التي سيتم سكها، قبل الرسوم وتأثير السعر، على أنها (worth of tokens deposited) / (worth of market pool) * MarketToken.totalSupply()
.
تعمل عمليات السحب على حرق MarketTokens مقابل الرموز الطويلة/القصيرة لمجموعة السوق.
يتم إنشاء طلبات السحب عن طريق استدعاء ExchangeRouter.createWithdrawal، مع تحديد:
يتم تنفيذ طلبات السحب باستخدام WithdrawalHandler.executeWithdrawal، إذا تم إنشاء السحب عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
يتم حساب مبلغ الرموز الطويلة أو القصيرة التي سيتم استردادها، قبل الرسوم وتأثير السعر، على أنها (worth of market tokens) / (long / short token price)
.
يمكن استبدال الرموز الطويلة والقصيرة للسوق ببعضها البعض.
على سبيل المثال، إذا كان سوق ETH/USD يحتوي على WETH كرمز طويل وUSDC كرمز قصير، فيمكن إرسال WETH إلى السوق لمقايضتها بـ USDC ويمكن إرسال USDC إلى السوق لاستبدالها بـ WETH.
يتم إنشاء طلبات أمر المبادلة عن طريق استدعاء ExchangeRouter.createOrder، مع تحديد:
مبلغ مخرجات المبادلة، قبل الرسوم وتأثير السعر، (amount of tokens in) * (token in price) / (token out price)
.
يتم تنفيذ طلبات أوامر مقايضة السوق باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
أوامر المبادلة السلبية التي يجب تنفيذها عندما يتطابق مبلغ المخرجات مع الحد الأدنى لمبلغ المخرجات المحدد من قبل المستخدم.
يتم تنفيذ طلبات أوامر المبادلة المحددة باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
فتح أو زيادة موقف perp طويل / قصير.
يتم إنشاء طلبات أوامر زيادة السوق عن طريق استدعاء ExchangeRouter.createOrder، مع تحديد:
يتم تنفيذ طلبات أوامر زيادة السوق باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
أوامر الزيادة السلبية التي يجب تنفيذها عندما يتطابق سعر الرمز المميز للمؤشر مع السعر المقبول المحدد من قبل المستخدم.
مثال على المركز الطويل: إذا كان سعر الرمز المميز للمؤشر الحالي هو 5000 دولار، فيمكن إنشاء أمر زيادة الحد بسعر مقبول قدره 4990 دولارًا، ويمكن تنفيذ الأمر عندما يكون سعر الرمز المميز للمؤشر <= 4990 دولارًا.
مثال على مركز بيع قصير: إذا كان سعر الرمز المميز الحالي للمؤشر هو 5000 دولار أمريكي، فيمكن إنشاء أمر زيادة الحد بسعر مقبول قدره 5010 دولارات أمريكية، ويمكن تنفيذ الأمر عندما يكون سعر الرمز المميز للمؤشر > = 5010 دولارًا أمريكيًا.
يتم تنفيذ طلبات أمر زيادة الحد باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
إغلاق أو تقليل مركز perp طويل / قصير.
يتم إنشاء طلبات أمر تخفيض السوق عن طريق استدعاء ExchangeRouter.createOrder، مع تحديد:
يتم تنفيذ طلبات أوامر تخفيض السوق باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
أوامر التخفيض السلبية التي يجب تنفيذها عندما يتطابق سعر الرمز المميز للمؤشر مع السعر المقبول المحدد من قبل المستخدم.
مثال على المركز الطويل: إذا كان سعر الرمز المميز الحالي للمؤشر هو 5000 دولار أمريكي، فيمكن إنشاء أمر تخفيض محدد بسعر مقبول قدره 5010 دولارات أمريكية، ويمكن تنفيذ الأمر عندما يكون سعر الرمز المميز للمؤشر > = 5010 دولارًا أمريكيًا.
مثال على مركز بيع قصير: إذا كان سعر الرمز المميز الحالي للمؤشر هو 5000 دولار أمريكي، فيمكن إنشاء أمر تخفيض محدد بسعر مقبول قدره 4990 دولارًا أمريكيًا، ويمكن تنفيذ الأمر عندما يكون سعر الرمز المميز للمؤشر <= 4990 دولارًا أمريكيًا.
يتم تنفيذ طلبات أمر التخفيض المحدد باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
أوامر التخفيض السلبية التي يجب تنفيذها عندما يتجاوز سعر رمز المؤشر السعر المقبول المحدد من قبل المستخدم.
مثال على المركز الطويل: إذا كان سعر الرمز المميز للمؤشر الحالي هو 5000 دولار، فيمكن إنشاء أمر خفض وقف الخسارة بسعر مقبول قدره 4990 دولارًا، ويمكن تنفيذ الأمر عندما يكون سعر الرمز المميز للمؤشر <= 4990 دولارًا.
مثال على مركز بيع قصير: إذا كان سعر الرمز المميز الحالي للمؤشر هو 5000 دولار أمريكي، فيمكن إنشاء أمر تخفيض إيقاف الخسارة بسعر مقبول قدره 5010 دولارات أمريكية، ويمكن تنفيذ الأمر عندما يكون سعر الرمز المميز للمؤشر > = 5010 دولارًا أمريكيًا.
يتم تنفيذ طلبات أمر خفض وقف الخسارة باستخدام OrderHandler.executeOrder، إذا تم إنشاء الأمر عند الطابع الزمني n
، فيجب تنفيذه بأسعار أوراكل بعد الطابع الزمني n
.
سعر ETH هو 5000، وETH بها 18 رقمًا عشريًا.
سعر الوحدة الواحدة من ETH هو 5000 / (10 ^ 18), 5 * (10 ^ -15)
.
للتعامل مع الأعداد العشرية، اضرب القيمة ب (10 ^ 30)
.
سيتم تخزين السعر كـ 5000 / (10 ^ 18) * (10 ^ 30) => 5000 * (10 ^ 12)
.
لتحسين استخدام الغاز، يتم إرسال هذه الأسعار إلى Oracle في شكل قيمة مضاعف عشري uint8 وقيمة سعر uint32.
إذا تم ضبط قيمة المضاعف العشري على 8، فستكون قيمة uint32 5000 * (10 ^ 12) / (10 ^ 8) => 5000 * (10 ^ 4)
.
باستخدام هذا التكوين، يمكن أن يكون لأسعار ETH قيمة قصوى تبلغ (2 ^ 32) / (10 ^ 4) => 4,294,967,296 / (10 ^ 4) => 429,496.7296
مع دقة 4 أرقام عشرية.
سعر BTC هو 60,000، وBTC بها 8 أرقام عشرية.
سعر الوحدة الواحدة من BTC هو 60,000 / (10 ^ 8), 6 * (10 ^ -4)
.
سيتم تخزين السعر كـ 60,000 / (10 ^ 8) * (10 ^ 30) => 6 * (10 ^ 26) => 60,000 * (10 ^ 22)
.
القيمة القصوى لأسعار BTC: (2 ^ 64) / (10 ^ 2) => 4,294,967,296 / (10 ^ 2) => 42,949,672.96
.
الأعداد العشرية للدقة: 2.
سعر USDC هو 1، وUSDC به 6 أرقام عشرية.
سعر الوحدة الواحدة من USDC هو 1 / (10 ^ 6), 1 * (10 ^ -6)
.
سيتم تخزين السعر كـ 1 / (10 ^ 6) * (10 ^ 30) => 1 * (10 ^ 24)
.
القيمة القصوى لأسعار USDC: (2 ^ 64) / (10 ^ 6) => 4,294,967,296 / (10 ^ 6) => 4294.967296
.
الأعداد العشرية للدقة: 6.
سعر DG هو 0.00000001، وDG به 18 رقمًا عشريًا.
سعر الوحدة الواحدة من DG هو 0.00000001 / (10 ^ 18), 1 * (10 ^ -26)
.
سيتم تخزين السعر كـ 1 * (10 ^ -26) * (10 ^ 30) => 1 * (10 ^ 3)
.
القيمة القصوى لأسعار DG: (2 ^ 64) / (10 ^ 11) => 4,294,967,296 / (10 ^ 11) => 0.04294967296
.
الأعداد العشرية للدقة: 11.
صيغة حساب قيمة المضاعف العشري التي يجب تعيينها على:
الكسور العشرية: 30 - (الكسور العشرية المميزة) - (عدد الكسور العشرية المطلوبة للدقة)
مثال لحساب WNT:
dataStreamPrice / (10 ^ 8) / (10 ^ 18) * (10 ^ 30)
(5000 * (10 ^ 8)) / (10 ^ 8) / (10 ^ 18) * (10 ^ 30) = 5000 * (10 ^ 12)
dataStreamPrice * multiplier / (10 ^ 30)
(5000 * (10 ^ 8)) * (10 ^ 34) / (10 ^ 30) = 5000 * (10 ^ 12)
مثال لحساب WBTC:
dataStreamPrice / (10 ^ 8) / (10 ^ 8) * (10 ^ 30)
(50,000 * (10 ^ 8)) / (10 ^ 8) / (10 ^ 8) * (10 ^ 30) = 50,000 * (10 ^ 22)
dataStreamPrice * multiplier / (10 ^ 30)
(50,000 * (10 ^ 8)) * (10 ^ 44) / (10 ^ 30) = 50,000 * (10 ^ 22)
صيغة المضاعف هي: 10 ^ (60 - dataStreamDecimals - tokenDecimals)
تحفز رسوم التمويل على تحقيق التوازن بين المراكز الطويلة والقصيرة، حيث يدفع الجانب ذو الفائدة المفتوحة الأكبر رسوم تمويل إلى الجانب ذو الفائدة المفتوحة الأصغر.
يتم احتساب رسوم التمويل للجانب الأكبر على أنها (funding factor per second) * (open interest imbalance) ^ (funding exponent factor) / (total open interest)
.
على سبيل المثال، إذا كان عامل التمويل في الثانية هو 1/50,000، وعامل أس التمويل هو 1، والفائدة المفتوحة الطويلة هي 150,000 دولار والفائدة المفتوحة القصيرة هي 50,000 دولار، فإن رسوم التمويل في الثانية لعمليات الشراء ستكون (1 / 50,000) * 100,000 / 200,000 => 0.00001 => 0.001%
.
ستكون رسوم التمويل في الثانية للسراويل القصيرة -0.00001 * 150,000 / 50,000 => 0.00003 => -0.003%
.
من الممكن أيضًا تعيين قيمة FundingIncreaseFactorPerSecond، مما قد يؤدي إلى منطق التمويل التالي:
longShortImbalance
كـ [abs(longOpenInterest - shortOpenInterest) / totalOpenInterest] ^ fundingExponentFactor
longShortImbalance
الحالي أكبر من thresholdForStableFunding
، فسيزيد معدل التمويل بمقدار longShortImbalance * fundingIncreaseFactorPerSecond
longShortImbalance
الحالي أكبر من thresholdForDecreaseFunding
وأقل من thresholdForStableFunding
وكان الانحراف في نفس اتجاه التمويل، فلن يتغير معدل التمويلlongShortImbalance
الحالي أقل من thresholdForDecreaseFunding
وكان الانحراف في نفس اتجاه التمويل، فإن معدل التمويل سينخفض بمقدار fundingDecreaseFactorPerSecond
منذ longShortImbalance > عتبةForStableFunding، يجب أن يزيد saveFundingFactorPerSecond بنسبة 0.0001% * 6% * 600 = 0.0036%
نظرًا لأن صفقات الشراء تدفع بالفعل صفقات بيع، فإن الانحراف هو نفسه، ويجب ألا يتغير longShortImbalance < عتبةForStableFunding، saveFundingFactorPerSecond
نظرًا لأن longShortImbalance < عتبةForDecreaseFunding، يجب أن ينخفض saveFundingFactorPerSecond بنسبة 0.000002% * 600 = 0.0012%
نظرًا لأن الانحراف في الاتجاه الآخر، يجب أن ينخفض saveFundingFactorPerSecond بمقدار 0.0001% * 1% * 600 = 0.0006%
لاحظ أن هناك طرقًا ممكنة للتلاعب برسوم التمويل، ويجب تعديل عوامل التمويل لتقليل هذا الاحتمال:
إذا كان longOpenInterest > shortOpenInterest وlongShortImbalance ضمن عتبةForStableFunding، فيمكن للمستخدم الذي يمتلك مركزًا قصيرًا فتح مركز طويل لزيادة longShortImbalance ومحاولة التسبب في زيادة رسوم التمويل. في السوق النشطة، يجب أن يكون من الصعب التنبؤ متى سيتم فتح مركز بيع معارض من قبل شخص آخر لكسب رسوم التمويل المتزايدة التي من شأنها أن تجعل هذه اللعبة صعبة، ويمكن أيضًا تعديل عوامل التمويل للمساعدة في تقليل فائدة هذه اللعبة. .
إذا كان longOpenInterest > shortOpenInterest و longShortImbalance > عتبةForStableFunding، يمكن للمتداول الذي يمتلك مركزًا طويلًا إجراء عمليات تداول صغيرة متعددة خلال هذا الوقت لضمان تحديث عامل التمويل باستمرار بدلاً من استخدام قيمة أكبر طوال المدة، وهذا من شأنه أن يقلل من رسوم التمويل للمراكز الطويلة ولكن لا ينبغي أن تقلل رسوم التمويل من المعدلات المتوقعة.
هناك رسوم اقتراض تُدفع لمزودي السيولة، وهذا يساعد على منع المستخدمين من فتح مراكز طويلة وقصيرة للحصول على سعة المجمع دون دفع أي رسوم.
يمكن لرسوم الاقتراض استخدام نموذج منحنى أو نموذج شبكي.
لاستخدام نموذج المنحنى، ستكون المفاتيح التي سيتم تكوينها هي BORROWING_FACTOR
و BORROWING_EXPONENT_FACTOR
، وسيتم حساب عامل الاقتراض في الثانية على النحو التالي:
// reservedUsd is the total USD value reserved for positions
reservedUsd = MarketUtils.getReservedUsd(...)
// poolUsd is the USD value of the pool excluding pending trader PnL
poolUsd = MarketUtils.getPoolUsdWithoutPnl(...)
// reservedUsdAfterExponent is the reservedUsd after applying the borrowingExponentFactor for the market
reservedUsdAfterExponent = applyExponentFactor(reservedUsd, borrowingExponentFactor)
borrowingFactorPerSecond = borrowingFactor * reservedUsdAfterExponent / poolUsd
لاستخدام نموذج الربط، ستكون المفاتيح التي سيتم تكوينها هي OPTIMAL_USAGE_FACTOR
و BASE_BORROWING_FACTOR
و ABOVE_OPTIMAL_USAGE_BORROWING_FACTOR
، وسيتم حساب عامل الاقتراض في الثانية على النحو التالي:
// usageFactor is the ratio of value reserved for positions to available value that can be reserved
usageFactor = MarketUtils.getUsageFactor(...)
borrowingFactorPerSecond = baseBorrowingFactor * usageFactor
if (usageFactor > optimalUsageFactor) {
diff = usageFactor - optimalUsageFactor
additionalBorrowingFactorPerSecond = aboveOptimalUsageBorrowingFactor - baseBorrowingFactor
borrowingFactorPerSecond += additionalBorrowingFactorPerSecond * diff / (Precision.FLOAT_PRECISION - optimalUsageFactor)
}
هناك أيضًا خيار لتعيين علامة SkiBorrowingFeeForSmallerSide، وهذا من شأنه أن يؤدي إلى تعيين رسوم الاقتراض للجانب الأصغر على الصفر. على سبيل المثال، إذا كان عدد صفقات الشراء أكبر من عدد صفقات البيع وكان SkipBorrowingFeeForSmallerSide صحيحًا، فستكون رسوم الاقتراض مقابل صفقات البيع صفرًا.
يمكن العثور على رمز تأثير السعر في عقود /pricing
.
يتم حساب تأثير السعر على النحو التالي:
(initial USD difference) ^ (price impact exponent) * (price impact factor) - (next USD difference) ^ (price impact exponent) * (price impact factor)
بالنسبة للمقايضات، يتم حساب عدم التوازن على أنه الفرق في قيمة الرموز الطويلة والرموز القصيرة.
على سبيل المثال:
price impact exponent
على 2 price impact factor
على 0.01 / 50,000
0 ^ 2 * (0.01 / 50,000) - 50,000 ^ 2 * (0.01 / 50,000) => -$500
50,000 ^ 2 * (0.01 / 50,000) - 25,000 ^ 2 * (0.01 / 50,000) => $375
بالنسبة لإجراءات المركز (زيادة / تقليل المركز)، يتم حساب عدم التوازن على أنه الفرق في الفائدة المفتوحة الطويلة والقصيرة.
يتم تكوين price impact exponents
وعوامل price impact factors
لكل سوق ويمكن أن تختلف بالنسبة للإجراءات الفورية والموضعية.
لاحظ أن هذا الحساب هو تأثير السعر على تداول المستخدم وليس تأثير السعر على المجمع. على سبيل المثال، قد يكون لصفقة المستخدم تأثير على السعر بنسبة 0.25%، وقد يكون للصفقة التالية بمبلغ صغير جدًا تأثير على السعر بنسبة 0.5%.
الغرض من التأثير على السعر هو:
نظرًا لأن العقود تستخدم سعر أوراكل والذي سيكون سعرًا متوسطًا أو متوسطًا للتبادلات المرجعية المتعددة. وبدون التأثير على الأسعار، قد يكون من المربح التلاعب بالأسعار في البورصات المرجعية أثناء تنفيذ الأوامر على العقود.
وستكون هذه المخاطر موجودة أيضًا إذا كانت قيم تأثير السعر الإيجابية والسلبية متشابهة، ولهذا السبب يجب ضبط تأثير السعر الإيجابي على قيمة منخفضة في أوقات التقلبات أو تحركات الأسعار غير المنتظمة.
بالنسبة لتأثير السعر على زيادة/انخفاض المركز، إذا تم خصم تأثير السعر السلبي كضمان من المركز، فقد يؤدي ذلك إلى أن يكون للمركز رافعة مالية مختلفة عما قصده المستخدم، لذلك بدلاً من خصم الضمان، يكون سعر الدخول/الخروج للمركز هو تعديلها على أساس تأثير السعر.
على سبيل المثال:
إذا كان رمز المؤشر مختلفًا عن كل من الرمز المميز الطويل والقصير للسوق، فمن الممكن أن تتأثر قيمة المجمع بشكل كبير بمجمع تأثير الموقف، إذا كان مجمع تأثير الموقف كبيرًا جدًا وكان رمز المؤشر له سعر كبير يزيد. يمكن إضافة خيار لتقليل حجم مجموعة تأثير الموضع تدريجيًا إذا أصبحت هذه مشكلة.
يتم أيضًا تتبع تأثير السعر باستخدام قيمة مخزون افتراضية للصفقات والمقايضات، وهذا يتتبع عدم توازن الرموز المميزة عبر الأسواق المماثلة، على سبيل المثال ETH/USDC، ETH/USDT.
في حالة حركة السعر الكبيرة، من الممكن أن يتم تخفيض أو تصفية عدد كبير من المراكز على جانب واحد مما يؤدي إلى خلل كبير بين الفائدة المفتوحة الطويلة والقصيرة، وقد يؤدي ذلك إلى قيم تأثير عالية جدًا على السعر. وللتخفيف من ذلك، يمكن تكوين قيمة عامل تأثير الحد الأقصى للموضع. إذا تجاوز تأثير السعر الحالي الحد الأقصى لتأثير السعر السلبي، فسيتم الاحتفاظ بأي ضمانات زائدة يتم خصمها بما يتجاوز الحد الأقصى لتأثير السعر السلبي ضمن العقد، وإذا لم يتم اكتشاف أي تلاعب في الأسعار، فيمكن تحرير هذه الضمانات للمستخدم. عندما يتم تحديد سقف التأثير السلبي للسعر، قد يكون من المربح فتح المراكز وإغلاقها على الفور، نظرًا لأن تأثير السعر الإيجابي قد يكون الآن أكثر من تأثير السعر السلبي المحدد. ولتجنب ذلك، يجب تكوين الحد الأقصى لتأثير السعر الإيجابي ليكون أقل من الحد الأقصى لتأثير السعر السلبي.
هناك رسوم مقايضة قابلة للتكوين ورسوم مركزية لكل سوق.
يتم أيضًا تقدير رسوم التنفيذ وحسابها عند إنشاء طلبات الإيداع والسحب والأوامر حتى يتمكن الأمناء من تنفيذ المعاملات بتكلفة تقترب من صافي التكلفة.
إذا كان لدى السوق عملات مستقرة كرمز ضمان قصير، فيجب أن يكون قادرًا على دفع أرباح قصيرة بالكامل إذا كان الحد الأقصى للفائدة المفتوحة على المكشوف لا يتجاوز مبلغ العملات المستقرة في المجمع.
إذا كان لدى السوق رمز ضمان طويل يختلف عن رمز المؤشر، فقد لا يتم دفع الأرباح الطويلة بالكامل إذا تجاوزت الزيادة في سعر رمز المؤشر الزيادة في سعر رمز الضمان الطويل.
لدى الأسواق عامل احتياطي يسمح بتغطية الفائدة المفتوحة بنسبة مئوية من حجم المجمع، مما يقلل من تأثير أرباح المراكز القصيرة ويقلل من خطر عدم إمكانية دفع المراكز الطويلة بالكامل.
يعتمد سعر رمز السوق على قيمة الأصول الموجودة في المجمع، وصافي الربح والخسارة المعلقة للصفقات المفتوحة للمتداولين.
من الممكن أن يتم تحديد سقف للخسائر والخسارة المعلقة، ويمكن أن تختلف العوامل المستخدمة لحساب سعر الرمز المميز في السوق اعتمادًا على النشاط:
Keys.MAX_PNL_FACTOR_FOR_DEPOSITS: هذا هو الحد الأقصى لعامل الربح والخسارة عند حساب سعر السوق المميز للودائع
Keys.MAX_PNL_FACTOR_FOR_WITHDRAWALS: هذا هو الحد الأقصى لعامل الربح والخسارة عند حساب سعر رمز السوق لعمليات السحب
Keys.MAX_PNL_FACTOR_FOR_TRADERS: هذا هو الحد الأقصى لعامل الربح والخسارة عند حساب سعر السوق المميز لإغلاق المركز
يمكن تكوين هذه العوامل المختلفة لمساعدة مزودي السيولة على إدارة المخاطر وتحفيز الودائع عند الحاجة، على سبيل المثال، يساعد تحديد سقف للخسائر والخسارة للمتداول على تحديد المبلغ الذي يمكن أن ينخفض به سعر الرمز المميز في السوق بسبب الربح والخسارة للمتداول، ويمكن أن يؤدي تحديد سقف للخسائر والخسارة للودائع والسحوبات إلى إلى انخفاض سعر السوق الرمزي للودائع مقارنة بعمليات السحب، مما قد يحفز الودائع عندما تكون نسبة الربح والخسارة المعلقة مرتفعة.
minColatoryFactor: يحدد هذا الحد الأدنى المسموح به لنسبة (ضمانات المركز) / (حجم المركز)
maxPoolAmount: الحد الأقصى لعدد الرموز المميزة التي يمكن إيداعها في السوق
maxOpenInterest: الحد الأقصى للفائدة المفتوحة التي يمكن فتحها للسوق
عامل الاحتياطي: يحدد الحد الأقصى المسموح به لنسبة (قيمة الرموز المميزة المحجوزة للمراكز) / (الرموز المميزة في المجمع)
maxPnlFactor: الحد الأقصى لنسبة (PnL / قيمة الرموز المميزة في المجموعة)
PositionFeeFactor: يحدد النسبة المئوية لمبلغ الرسوم التي سيتم خصمها لإجراءات زيادة/إنقاص المركز، ويعتمد مبلغ الرسوم على التغيير في حجم المركز
PositionImpactFactor: هذا هو "عامل تأثير السعر" للمناصب الموضحة في قسم "تأثير السعر".
maxPositionImpactFactor: هذا هو "التأثير الأقصى على السعر" للصفقات الموضحة في قسم "تأثير السعر"
PositionImpactExponentFactor: هذه هي قيمة "أس تأثير السعر" لإجراءات المركز، الموضحة في قسم "تأثير السعر"
SwapFeeFactor: يحدد هذا النسبة المئوية لمبلغ الرسوم التي سيتم خصمها مقابل المقايضة، ويعتمد مبلغ الرسوم على مبلغ المبادلة.
SwapImpactFactor: هذا هو "عامل تأثير السعر" الموضح في قسم "تأثير السعر".
SwapImpactExponentFactor: هذه هي قيمة "أس تأثير السعر" للودائع والمقايضات، الموضحة في قسم "تأثير السعر" أعلاه
عامل التمويل: هذه هي قيمة "عامل التمويل في الثانية" الموضحة في قسم "رسوم التمويل".
BorodingFactorForLongs: هذا هو "عامل الاقتراض" لصفقات الشراء الموضحة في قسم "رسوم الاقتراض"
BorodingFactorForShorts: هذا هو "عامل الاقتراض" لصفقات البيع المكشوفة الموضحة في قسم "رسوم الاقتراض"
الاقتراضExponentFactorForLongs: هذا هو "عامل الأس الاقتراض" لصفقات الشراء الموضحة في قسم "رسوم الاقتراض"
الاقتراضExponentFactorForShorts: هذا هو "عامل الأس الاقتراض" لصفقات الشراء الموضحة في قسم "رسوم الاقتراض"
تتم إدارة الأدوار في متجر الأدوار، ويتمتع مسؤول الدور بحق الوصول لمنح أي دور وإبطاله.
سيكون RoleAdmin هو الموزع في البداية، ولكن يجب إزالته بعد إعداد الأدوار.
بعد الإعداد الأولي:
يجب أن يكون لعقد Timelock فقط دور roleAdmin
يمكن منح الأدوار الجديدة بواسطة مسؤولي القفل الزمني مع تأخير زمني
يجب تعيين قيم النظام فقط باستخدام عقد التكوين
لا ينبغي أن يكون لأي EOA دور مراقب
من المحتمل أن يؤدي محافظو التكوين ومسؤولو القفل الزمني إلى تعطيل التشغيل المنتظم من خلال تعطيل الميزات، والإعداد غير الصحيح للقيم، وإدراج الرموز المميزة الضارة في القائمة البيضاء، وإساءة استخدام قيمة التأثير الإيجابي على السعر، وما إلى ذلك
من المتوقع أن يقوم multisig الزمني بإلغاء أذونات الحسابات الضارة أو المخترقة
يمكن لحافظي الطلبات وحافظي الطلبات المجمدة استخلاص القيمة من خلال طلب المعاملات، وتأخير تنفيذ المعاملات، وتنفيذ ADL، وما إلى ذلك، وسيتم تخفيف ذلك جزئيًا باستخدام شبكة حارس
من المتوقع أن يقوم الموقعون على Oracle بالإبلاغ بدقة عن سعر الرموز المميزة
يجب إدراج الرموز المميزة في القائمة البيضاء باستخدام TOKEN_TRANSFER_GAS_LIMIT الذي تم تكوينه
إعادة إنشاء الرموز المميزة، والرموز المميزة التي تغير الرصيد عند النقل، مع نسخ الرموز المميزة، والرموز المميزة مع عمليات رد الاتصال، مثل الرموز المميزة ERC-777، وما إلى ذلك، غير متوافقة مع النظام ويجب عدم إدراجها في القائمة البيضاء
يمكن لحافظي الطلبات استخدام الأسعار من طوابع زمنية مختلفة لأوامر الحد مع المبادلة، الأمر الذي قد يؤدي إلى كميات إنتاج مختلفة
من المتوقع أن يقوم حفظة الطلب بالتحقق من صحة ما إذا كانت المعاملة ستعود قبل إرسال المعاملة لتقليل هدر الغاز
قد يتسبب حفظة الطلب في إلغاء الطلبات بدلاً من تنفيذها من خلال تنفيذ الطلب بكمية غير كافية من الغاز
إذا كانت معاملة التنفيذ تتطلب كمية كبيرة من الغاز تقترب من الحد الأقصى لغاز الكتلة، فقد يكون من الممكن حشو الكتل لمنع إدراج المعاملة في الكتل
في بعض سلاسل الكتل، من الممكن للحارس أن يتحكم في tx.gasprice المستخدم لتنفيذ معاملة مما قد يؤثر على رسوم التنفيذ المدفوعة للحارس
قد يتم منع تنفيذ الأوامر من قبل مستخدم ضار مما يتسبب عمدًا في عدم توازن السوق مما يؤدي إلى تأثير مرتفع على الأسعار، وينبغي أن يكون هذا مكلفًا ويصعب الاستفادة منه
يمكن تقليل تأثير السعر عن طريق استخدام المراكز والمقايضات والتداول عبر الأسواق والسلاسل والشوك والبروتوكولات الأخرى، ويتم تخفيف ذلك جزئيًا من خلال تتبع المخزون الافتراضي.
يمكن للمستخدم تقليل تأثير السعر عن طريق استخدام مراكز رافعة مالية عالية، ويتم تخفيف ذلك جزئيًا باستخدام قيمة MIN_COLLATERAL_FACTOR_FOR_OPEN_INTEREST_MULTIPLIER
لا يفسر حساب قيم تأثير الأسعار الرسوم والآثار الناتجة عن تأثير السعر نفسه ، بالنسبة لمعظم الحالات ، يجب أن يكون حساب تأثير الأسعار صغيرًا
من النادر ولكن من الممكن أن تصبح قيمة المسبح سلبية ، يمكن أن يحدث هذا لأن effectpoolamount و PREND PNL يتم طرحها من قيمة الرموز في المجمع
نظرًا للاختلاف في تأثير سعر الموضع الإيجابي والسلبي ، يمكن أن يكون هناك تراكم لكميات رمزية افتراضية في مجموعة تأثير الموضع التي من شأنها أن تؤثر على تسعير الرموز المميزة للسوق ، وينبغي توزيع مجموعة تأثير الموضع تدريجياً إذا لزم الأمر
يتعقب المخزون الظاهري كمية الرموز في حمامات السباحة ، يجب التأكد من أن الرموز في كل مجموعة هي نفس النوع ولها نفس العشرية ، أي أن الرموز الطويلة عبر البرك في المجموعة يجب أن تحتوي على نفس العشرية ، الرموز القصيرة عبر البليارز في المجموعة يجب أن يكون لها نفس العشرية ، على افتراض أن USDC لديها 6 عشرية وداي لديها 18 العشرية ، أسواق مثل eth-usdc ، لا ينبغي تجميع إيث داي
يجب تعيين معرفات افتراضية قبل إنشاء السوق / القائمة البيضاء الرمز المميز ، إذا تم تعيينه بعد التداول من أجل الرمز / السوق ، فلن يكون التتبع دقيقًا وقد يحتاج إلى تعديله
بالنسبة إلى L2s مع متسلسلات ، لا يوجد التحقق من صحة العقد للتحقق مما إذا كان جهاز التسلسل L2 نشطًا ، يجب على حراس Oracle التوقف أحدث الكتل باستخدام أحدث الأسعار التي تم جلبها
في حالة انخفاض تسلسل L2 ، قد يمنع الودائع إلى مواقع لمنع التصفية
بالنسبة للمعاملات التي يمكن تنفيذها بالكامل باستخدام خلاصات الأسعار على السلسلة ، قد يكون من الممكن الاستفادة من التسعير الذي لا معنى تستخدم بدلاً من ذلك بمجرد دعم جميع الرموز
يمكن أن تسمح RETORGs block للمستخدم بإلغاء أمر بأثر رجعي بعد تنفيذه إذا لم يتحرك السعر بشكل إيجابي للمستخدم ، يجب توخي الحذر للتعامل مع هذه القضية في حالة استخدام العقود على السلاسل التي يمكن إعادة إعادةها الطويلة
يمكن أن يكون تحديث الطلبات وإلغاءها من الأمام لمنع تنفيذ الطلب ، ولا ينبغي أن يكون هذا مشكلة إذا كان احتمال حدوث ناجح في المقدمة أقل من 50 ٪ أو يساوي ، إذا كان الاحتمال أعلى من 50 ٪ ، والرسوم ، يجب تعديل تأثير السعر للتأكد من أن الاستراتيجية ليست مربحة صافية ، أو يمكن استخدام رسوم واجهة المستخدم أو خصم الإحالة بالمثل للتسبب في إلغاء الطلب
في حالة التوقف عن العمل في blockchain أو Oracle ، قد يتم تنفيذ الطلبات بأسعار مختلفة بشكل كبير أو قد لا يتم تنفيذها إذا كان لا يمكن الوفاء بالسعر المقبول للطلب
هناك اعتماد على دقة الطابع الزمني للكتلة لأنه يتم التحقق من صحة أسعار Oracle مقابل هذه القيمة ، بالنسبة إلى blockchains حيث يكون لعقد blockchain بعض السيطرة على الطابع الزمني. الطابع الزمني غير مربح
يمكن استغلال ميزة GLV Shift عن طريق زيادة الاستخدام مؤقتًا في السوق الذي عادة ما يكون له استخدام منخفض. بمجرد تنفيذ حارس المرمى ، يمكن للمهاجم خفض الاستخدام إلى مستوياته الطبيعية. يجب تكوين رسوم الموقف وتأثير الأسعار بطريقة تجعل هذا الهجوم مكلفًا بما يكفي لتغطية خسارة GLV.
في GLV ، قد يكون هناك أسواق جنرال موتورز أعلى من الحد الأقصى لـ pnltopoolfactorforters. إذا كان MaxPnlFactorfordeposits في سوق GM هذا أعلى من MaxpnlFactorfortraders ، فإن سوق GM أقل قيمة خلال الودائع أكثر مما سيكون عليه أن يدرك المتداولون أرباحهم المغطاة. قد يلاحظ المستخدم الضار سوق جنرال موتورز في مثل هذا الشرط والإيداع في GLV يحتوي عليه من أجل الحصول على مكاسب من ADLS التي ستتبع ذلك قريبًا. لتجنب هذا maxpnlfactorfordeposits يجب أن يكون أقل من أو يساوي maxpnlfactorfortraders.
من الممكن تقنيًا أن تصبح القيمة السوقية سلبية. في هذه الحالة ، سيكون GLV غير قابل للاستخدام حتى تصبح القيمة السوقية إيجابية.
يمكن أن تصبح الرموز المميزة للجنرال موتورت غير سائلة بسبب عوامل PNL عالية أو USD عالية المحجوزة. يمكن للمستخدمين إيداع الرموز المميزة غير السائلة في GVL وسحب السيولة من سوق مختلف ، تاركًا GLV مع الرموز المميزة غير السائلة. يجب أن تفسر معلمات GlvMaxMarketTokenToKtOkenUSD و GlvMaxmarketTokenTokenBanCeamount على مخاطر السوق لتجنب وجود عدد كبير جدًا من الرموز المميزة من سوق GM من سوق محفوف بالمخاطر.
scripts/verifyFallback.ts
npx hardhat verify
، وبعد ذلك يجب التحقق من جميع عقود MarketToken لأن رمز المصدر سيكون هو نفسه إذا تمت إضافة عقود جديدة قد تؤدي إلى اختلاف في الأسعار ، على سبيل المثال ، من الرموز المميزة للسوق بين العقود القديمة والجديدة ، يجب توخي الحذر لتعطيل العقود القديمة قبل تمكين العقود الجديدة
يجب تذكير أي بروتوكولات خارجية تستخدم عقد القارئ أو الحسابات القديمة المحتملة للتسعير لاستخدام أحدث العقود والحسابات ، على سبيل المثال خلاصات أسعار السلسلة لرموز GM
يوصى بنشر أفضل جهد لتوثيق التغييرات المهمة التي يجب أن تكون عليها عمليات تكامل ، على سبيل المثال ، إذا تمت إضافة حقل إلى بنية يتم تمريرها إلى وظيفة رد الاتصال ، فقد لا يكون هذا التغيير واضحًا للتكامل
إذا تم استخدام العقود لدعم الأسواق الاصطناعية للأسهم ، فيجب توخي الحذر لضمان تقسيم الأسهم والتغييرات المماثلة
تتمتع دور العقود مع دور "وحدة التحكم" بالوصول إلى وظائف مهمة مثل إعداد قيم مخزن البيانات ، نظرًا لذلك ، يجب توخي الحذر لضمان أن هذه العقود لا تحتوي على وظائف أو وظائف عامة يمكن استخدامها لتغيير القيم المهمة
يجب إضافة الاختبارات لأنواع السوق المختلفة ، على سبيل المثال ، الأسواق الفورية فقط ، أسواق رمزية واحدة
لا ينبغي تعديل ترتيب القيم في EventData لعمليات الاسترجاع ما لم يكن ضروريًا تمامًا ، حيث قد تشير عقود رد الاتصال إلى القيم بواسطة فهرس ثابت
لاحظ أنه إذا تم تغيير البنية التي يتم تمريرها إلى عروض عمليات الاسترداد ، فإن الإيداع على سبيل المثال ، وسحب ، وإنشاءات الطلبات ، فإن ذلك سيؤدي إلى تمييز وظائف استرداد الاتصالات التي تتوقع أن تتوقف الهيكل السابق عن العمل ، بسبب ذلك ، يجب تسليط الضوء على التغييرات في الهياكل على التكامل
إذا تم استخدام نظام الإحالة ، فيجب منح OrderHandler الوصول إلى تحديث رمز الإحالة للتجار
قد يتم إلغاء الودائع والسحب والأوامر إذا لم يكن من الممكن الوفاء بالمتطلبات المحددة في الطلب ، على سبيل المثال. تحقق من مكان إرسال الأموال واسترداد الغاز إلى الإلغاء لضمان تطابق التوقعات.
يمكن أن تخرج أوامر الموضع المنخفضة من الرموز المميزة بدلاً من رمز واحد ، في حالة فشل تبادل الموضع ، من الممكن أيضًا ألا يكون كمية الإخراج والضمان كافيين لتغطية الرسوم ، مما يتسبب في عدم تنفيذ الأمر
إذا كان هناك انتشار كبير ، فمن الممكن أن يؤدي فتح / إغلاق الموقف إلى تغيير سعر الرمز المميز للأسواق Min و Min
قد يؤدي التغييرات في قيم التكوين مثل تمويل_factor و stable_funding_factor و borrowing_factor و skip_borrowing_fee_fore_smaller_side و borrowing_fee_receiver_factor إلى رسوم إضافية للمستخدمين ، وقد يؤدي ذلك أيضًا إلى تغيير في سعر أسواق السوق
إذا تم تغطية Trader PNL بسبب max_pnl_factor_for_traders ، فقد تختلف النسبة المئوية للربح المدفوع للمتداولين اعتمادًا على ترتيب متى يتم انخفاض / إغلاق المواقف منذ إعادة حساب الحد الأقصى بناءً على الوضع الحالي للمجمع
قد يتم تمرير بيانات الحدث إلى عقود رد الاتصال ، وسيتم محاولة ترتيب params في eventData دون تغيير ، لذلك يمكن الوصول إلى المعاملات عن طريق الفهرس ، من أجل السلامة يجب أن يتم التحقق من صحة مفتاح المعلمة قبل استخدامها للتحقق مما إذا كانت تتطابق مع القيمة المتوقعة
قد يتم تحديث بعض المعلمات مثل order.sizedelta و order.InitialCollateraLETAMOUNT أثناء التنفيذ ، ولا يجوز نقل القيم المحدثة إلى عقد رد الاتصال
عند إنشاء عقد رد اتصال ، قد يحتاج عقد رد الاتصال إلى القائمة البيضاء في Deposithandler أو OrderHandler أو سحبها ، تجدر الإشارة إلى أنه قد يتم نشر إصدارات جديدة من هؤلاء المعالجات عند إضافة رمز جديد إلى المعالجات. موجود مؤقتًا في نفس الوقت ، على سبيل المثال ، OrderHandler (1) ، OrderHandler (2) ، بسبب ذلك ، يجب أن يكون عقد رد الاتصال قادرًا على القائمة البيضاء وقبول عمليات الاسترجاعات من متعددة في وقت واحد deposithandlers و OrderHandlers و DretwalHandlers
بالنسبة لعقود رد الاتصال ، بدلاً من الحفاظ على قائمة بيضاء منفصلة لـ Deposithandlers و OrderHandlers و DrethalHandlers ، فإن الحل المحتمل هو التحقق من صحة دور msg.sender في Rolestore ، على سبيل المثال RoleStore.hasRole(msg.sender, Role.CONTROLLER)
، هذا من شأنه تأكد من أن msg.sender هو معالج صالح
إذا كان استخدام عقود مثل المبادل أو Oracle أو Reader يلاحظون أن عناوينها ستتغير عند إضافة منطق جديد
إذا تم تحديث عقود مثل المبادل أو Oracle أو القارئ ، فيجب بذل الجهد للحفاظ على معلمات الوظيفة كما هو ، ومع ذلك ، فقد لا يكون ذلك ممكنًا دائمًا ، على سبيل المثال ، إذا كان من المقرر دعم خاصية طلب جديد ، فإن Tuplyouter.createorder params يجب تغييرها
يجب ألا تتغير Rolestore و Datastore للعمليات النشر ، إذا تم تغيير هجرة الأموال من العقود السابقة إلى العقود الجديدة ، فمن المحتمل أن تكون هناك حاجة إليها
في حين تم تنظيم القانون لتقليل مخاطر إعادة إدخال القراءة فقط ، يجب توخي الحذر للحماية من هذا الاحتمال
قد تحدث Roken Airroprops لحسابات حاملي الرمز المميز GM ، يجب أن يكون دمج العقود التي تحتفظ برموز جنرال موتورز قادرة على المطالبة بهذه الرموز وإلا فإن الرموز المميزة سيتم قفلها ، وسيختلف التنفيذ الدقيق لهذا اعتمادًا على العقد المدمج ، أحد الاحتمالات هو السماح بالمطالبة من الرموز التي ليست مميزة للسوق ، يمكن التحقق من ذلك باستخدام Keys.MARKET_LIST
يتم إرسال عمليات نقل ETH باستخدام native_token_transfer_gas_limit لحد الغاز ، إذا فشل النقل بسبب عدم كفاية الغاز أو الأخطاء الأخرى ، يتم إرسال ETH كـ Weth بدلاً من ذلك
قد تتلقى الحسابات ETH لـ ADLs / Liquidations ، إذا لم يتمكن الحساب من تلقي ETH ، فسيتم إرسال Weth بدلاً من ذلك
يتم تخصيص تأثير السعر الإيجابي من خلال كمية الرموز في تجمعات التأثير واستنادًا إلى القيم التي تم تكوينها
قد يتم تخصيص تأثير السعر السلبي بالقيم التي تم تكوينها
إذا تم تحديد تأثير السعر السلبي ، فسيتم الاحتفاظ بالمبلغ الإضافي في مجموعة الجانبية التي يمكن المطالبة بها ، فهذا يجب المطالبة يدويًا باستخدام Tuply.ClaimCollateral وظيفة
تحتاج رسوم التمويل الإيجابية إلى المطالبة يدويًا باستخدام وظيفة Tuply.ClaimFundingFees
تحتاج المكافآت التابعة إلى المطالبة يدويًا باستخدام وظيفة tupl
قد يتم تعطيل الأسواق أو الميزات
سيظل التنفيذ مستمرًا حتى إذا عاد رد الاتصال
تأكد من أن عمليات الاسترجاعات لها غاز كافٍ
يمكن للحسابات الفرعية إنشاء أي طلب وتحديثه وإلغاءه لحساب
يمكن أن تنفق الحسابات الفرعية Wnt والضمان من الحساب
يمكن تغيير رسوم واجهة المستخدم
يمكن تغيير خصومات الإحالة
سيتم الاحتفاظ بأموال للعناوين المدرجة في القائمة السوداء داخل البروتوكول
لا يضمن رمز الفهرس دائمًا أن يكون الرمز المميز الطويل
تتغير معدلات الرسوم اعتمادًا على ما إذا كان هناك تأثير إيجابي أو سلبي
النظر في عامل PNL عند تقدير سعر GM
التعامل مع الإيداع
تأكد فقط من معالجات مع دور وحدة التحكم يمكن أن تسمي وظائف رد الاتصال بعد الظهر
تأكد فقط من تنفيذ الإيداع الصحيح الذي يمكنه استدعاء وظائف رد الاتصال
النظر في الأسواق ذات الرمز المميز الطويل والقصير ، لا يتم دعم المقايضات لهذه الأسواق
النظر في تأثير السعر الإيجابي والسلبي
هناك فترة إلغاء طلب للتأخير المكون حيث لا يمكن إلغاء طلبات الإيداع
تخضع مبالغ الإخراج لتأثير الأسعار والرسوم
لا يُسمح بالودائع فوق max_pnl_factor_for_deposits
يجب أن يذهب الإيداع الأول في أي سوق إلى Receiver_for_first_deposit
يجب استخدام الحد الأدنى من المخرجات للسحب
التعامل مع إلغاء الانسحاب
تأكد فقط من معالجات مع دور وحدة التحكم التي يمكن أن تستدعي بعد ذلك
تأكد فقط من تنفيذ الانسحاب الصحيح الذي يمكنه استدعاء وظائف رد الاتصال
النظر في الأسواق ذات الرمز المميز الطويل والقصير ، لا يتم دعم المقايضات لهذه الأسواق
النظر في تأثير السعر الإيجابي والسلبي
هناك فترة إلغاء طلب للتأخير المكون حيث لا يمكن إلغاء طلبات السحب
تخضع مبالغ الإخراج لتأثير الأسعار والرسوم
لا يُسمح بالانسحاب أعلاه فوق max_pnl_factor_for_withdrawals
التعامل مع الإلغاء
يمكن للمراجع و ADLs أن تؤدي إلى عقد رد الاتصال المحفوظ
يمكن أن تتجمد الطلبات
تأكد فقط من معالجات مع دور وحدة التحكم التي يمكن أن تسمي ما بعد الولادة وبعد وظائف رد الاتصال بعد ordercancellation و ayrorderfrozen
تأكد فقط من تنفيذ الطلب الصحيح يمكن استدعاء وظائف رد الاتصال
النظر في الأسواق ذات الرمز المميز الطويل والقصير ، لا يتم دعم المقايضات لهذه الأسواق
النظر في تأثير السعر الإيجابي والسلبي
يمكن تغيير عقود رد الاتصال المحفوظة
هناك فترة إلغاء طلب للتأخير المكون حيث لا يمكن إلغاء طلبات الطلب
تخضع مبالغ الإخراج لتأثير الأسعار والرسوم
يتم توزيع تجمع تأثير الموضع على مقدمي السيولة مع مرور الوقت
إذا حاولت حساب تأثير الأسعار ، فيجب استشارة المخزون الافتراضي
توج Trader PNL فوق max_pnl_factor_for_traders
يمكن أن يتوج تأثير السعر السلبي على انخفاض الوضع
سيتم تقليل الطلب sizeelta و gateralaldelta
النظر في WillpositionCollateralBesucked التحقق من صحة
النظر في انخفاض expositionswapty
النظر في الحد الأدنى من المبلغ الضماني
لا يزال يتم دفع الإحالات أثناء التصفية
من الممكن أن يكون لمواقع الصفر ضمانات
لا يمكن وجود المواقف ذات الحجم الصفر
لتجميع العقود:
npx hardhat compile
لتشغيل جميع الاختبارات:
npx hardhat test
export NODE_OPTIONS=--max_old_space_size=4096
-قد تكون هناك حاجة إلى إجراء اختبارات لإجراء الاختبارات.
لطباعة مقاييس الرمز:
npx ts-node metrics.ts
لطباعة تغطية الاختبار:
npx hardhat coverage