إنتقل إلى المحتوى الرئيسي

QORel

QORel هو مُرحِّل IBC الخاص بـ QoreChain. المُرحِّل هو البرنامج الذي ينقل حزم IBC والإثباتات وتحديثات العملاء بين سلسلتين؛ وبدون مُرحِّل قيد التشغيل تبقى أي عملية تحويل عبر قناة IBC معلّقة. QORel موجّه إلى المشغّلين والمدقّقين والفرق الذين يريدون تشغيل الترحيل لقناة في QoreChain، ولكل من يحتاج إلى مُرحِّل يستطيع أصلًا إرسال معاملات إلى QoreChain.

تشترط QoreChain توقيعًا هجينًا ما بعد كمومي (secp256k1 مع ML-DSA-87، FIPS 204) على كل معاملة في المسار الأصلي، ولا ينتجه المُرحِّل الأصلي، فترفض QoreChain معاملاته. يضيف QORel هذا التوقيع لـ QoreChain ويوقّع كل سلسلة أخرى مبنية على Cosmos SDK بالطريقة القياسية. وهو ملف تنفيذي واحد هو qorel، صدر بترخيص Apache-2.0. وهو تفرّع (fork) عن Hermes 1.13.3، مُرحِّل IBC الذي كتبته Informal Systems (Apache-2.0)؛ والفضل في محرك الترحيل يعود إليهم، ويحتفظ QORel بأوامر Hermes وإعداداته لكل سلسلة لا تحتاج إلى التوقيع الإضافي.

الإصدار QORel 0.1.0 لشبكة الاختبار فقط. وقد رحّل بين شبكة اختبار QoreChain qorechain-diana وشبكة اختبار Cosmos Hub العامة (معرّف السلسلة provider). IBC على الشبكة الرئيسية غير مفتوح بعد؛ وسيأتي دعم الشبكة الرئيسية لاحقًا، عند فتح قناة هناك.

الابتكارات​

  • وضع توقيع لكل سلسلة. لكل سلسلة في ملف الإعدادات الإعداد signing. القيمة 'qorechain-hybrid' تضيف توقيع ML-DSA-87 الذي تتحقق منه QoreChain. والقيمة الافتراضية 'standard' تنتج معاملات مطابقة لـ Hermes بايتًا ببايت، فتُرحِّل عملية QORel نفسها QoreChain وجانب Cosmos Hub جنبًا إلى جنب.
  • طبقة موقِّع قابلة للتوصيل. تعرّف الحزمة qorel-signer بدائية ما بعد كمومية، وقواعد sign-bytes الخاصة بالسلسلة، وموقِّع امتداد المعاملة بوصفها أجزاءً منفصلة. يستدعيها المُرحِّل بعد أن تصبح auth info نهائية وقبل بناء مستند التوقيع الكلاسيكي، وتمر محاكاة الغاز عبر المسار نفسه. وتحتاج السلسلة ذات التوقيع الإضافي المختلف إلى framer جديد في تلك الحزمة، لا إلى تغيير في المُرحِّل. راجع التوقيع من أي لغة لمعرفة العقد.
  • معالجة المفتاح ما بعد الكمومي في أوامر المفاتيح. يشتق qorel keys add مفتاح ML-DSA-87 من العبارة السرية نفسها للحساب، باشتقاق محفظة QoreChain، فيطابق مفتاح المُرحِّل ما كان QoreX أو SDK سيشتقه. ويسجّل qorel keys register-pqc المفتاح العام مرة واحدة، مع إثبات حيازة. ويبيّن qorel keys pqc-status هل المفتاح جاهز.
  • فحص قبل كل إرسال. قبل كل معاملة إلى سلسلة هجينة، يتأكد QORel من أن المفتاح ما بعد الكمومي مسجّل في السلسلة وهو نفس المفتاح الذي يحتفظ به محليًا، ويقرأ إصدار sign-bytes من السلسلة. وإذا كان أي شيء خاطئًا فلا يرسل شيئًا، فلا يُنفق رسم على معاملة سترفضها السلسلة.
  • سعر الغاز من سوق الرسوم في QoreChain. يقرأ dynamic_gas_price.backend = 'cosmos-evm-feemarket' الرسم الأساسي في السلسلة (الحد الأدنى 0.1 uqor لكل وحدة غاز) بدلًا من استخدام تخمين ثابت.
  • اكتشاف سوء السلوك على سلاسل ibc-go v10. لم يعد ibc-go v10 يضع الترويسة في أحداث update_client، ويوقف Hermes 1.13 الأصلي اكتشاف سوء السلوك على تلك السلاسل. أما QORel فيقرأ الترويسة من معاملة MsgUpdateClient بدلًا من ذلك، فيستمر الاكتشاف.
  • مرونة أمام نقاط النهاية المحدودة المعدل. يبقى عمّال الحزم قيد التشغيل ويعيدون المحاولة عند كل فترة مسح بينما فشلت محاولة ترحيل أو مسح، مثلًا بعد أن تردّ نقطة نهاية عامة بـ 429 لوقت قصير. ولا يتوقفون بسبب الخمول إلا بعد نجاح جولة مسح.
  • ملفات مفاتيح للمالك وحده. تُكتب ملفات المفاتيح، بما فيها البذرة ما بعد الكمومية المخزَّنة، بصلاحيات 0600.
  • جُرّب على شبكة حية. أول قناة IBC على شبكة اختبار QoreChain، وهي transfer/channel-0 على qorechain-diana إلى channel-600 على شبكة اختبار Cosmos Hub العامة، يرحّلها QORel. اختُبرت التحويلات في الاتجاهين، وكذلك إعادة رمز محوَّل والاسترداد التلقائي لتحويل منتهي الصلاحية. راجع قناة الاختبار.

القائمة الكاملة لكل إصدار في الجديد.

اتصال شبكة الاختبار الحي​

qorechain-dianaشبكة اختبار Cosmos Hub العامة (provider)
العميل الخفيف07-tendermint-007-tendermint-466
الاتصالconnection-0connection-315
القناةtransfer/channel-0 (STATE_OPEN، غير مرتّبة، الإصدار ics20-1)transfer/channel-600

يوجد أثران (trace) للرمز على هذا الاتصال. ATOM على شبكة اختبار QoreChain هو ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2 (الأثر transfer/channel-0/uatom). وQOR على شبكة اختبار Hub هو ibc/BB4D5A9372637A885CC895F775B38B127354A31F3E20D8F6FB3997E34BF4AA4A (الأثر transfer/channel-600/uqor). وطلب سحب في chain-registry يضيف هذا المسار (cosmos/chain-registry#8086) مفتوح ولم يُدمج. الشبكة الرئيسية ليس فيها قناة IBC.

ما اختُبر: تحويلات في الاتجاهين (1 QOR صادر، 0.1 ATOM وارد، 0.4 QOR أُعيد) والاسترداد التلقائي لتحويل بمهلة ثانية واحدة، رُحِّل كرسالة انتهاء مهلة. نجحت جميع معاملات المُرحِّل الثلاث عشرة على qorechain-diana (الرمز 0).

ما يحتاجه مُرحِّل من طرف ثالث​

تقبل شبكة الاختبار نوع العميل الخفيف 07-tendermint فقط (يسرد /ibc/core/client/v1/params القيمة allowed_clients = ["07-tendermint"])؛ ولا يمكن إنشاء عميل 08-wasm اليوم. ولفتح قناة إلى QoreChain يحتاج المُرحِّل إلى:

  • عميل 07-tendermint على كل جانب؛
  • على جانب QoreChain، أن تُوقَّع كل معاملة توقيعًا هجينًا بحساب مُرحِّل مفتاح ML-DSA-87 الخاص به مسجّل. يفعل QORel هذا؛ أما Hermes الأصلي ومُرحِّل Go (rly) وts-relayer فتُرفض معاملاتها؛
  • قناة تحويل ICS-20 بالإصدار ics20-1.

ولا توجد قائمة سماح للمُرحِّلين في إعدادات عميل IBC v2 أيضًا (يردّ /ibc/core/client/v2/config/07-tendermint-0 بالقيمة allowed_relayers: []). وتستخدم حزم IBC v2 مهلًا مطلقة بالثواني بتوقيت Unix. لا يرحّل QORel حزم IBC v2 بعد.

qorel-signer​

الموقِّع حزمة منفصلة هي qorel-signer، في مستودع QORel عند crates/qorel-signer. وهي ليست على crates.io؛ فاعتمد عليها كاعتمادية git. وما تضمنه:

  • موقِّع مشارك قابل للتوصيل. يضيف موقِّع مشارك التوقيع الإضافي للسلسلة، ولا تستخدم السلاسل ذات التوقيع القياسي أيًّا منها، فتبقى معاملاتها دون تغيير.
  • بايتات protobuf الخام. تعمل على البايتات المشفَّرة ولا تعتمد على أي أنواع من IBC أو من المُرحِّل.
  • سياسة للمتن. ترفض المتون التي سترفضها السلسلة: خيار امتداد حرج موجود أصلًا، أو العلم unordered، أو حقول مجهولة.
  • لا تخمين للإصدار. لا ترجع أبدًا إلى sign bytes الإصدار v1 على شبكات QoreChain قبل معرفة إصدار sign-bytes.
  • تواقيع يُتحقق منها ذاتيًا. يُتحقق من كل توقيع قبل استخدامه.
  • معالجة الأسرار. تُصفَّر الأسرار في الذاكرة وتُحجب في مخرجات Debug.
  • اختبارات بايتًا ببايت. تعيد الاختبارات بناء معاملات الترحيل التي قبلها معالج ante في السلسلة، بايتًا ببايت.

يوجد مثال استخدام في crates/qorel-signer/README.md في المستودع؛ راجع أيضًا التوقيع من أي لغة. ويُقترح خُطّاف الموقِّع نفسه على Hermes الأصلي في informalsystems/hermes#4435 (مفتوح، لم يُدمج).

كيفية الاستخدام​

ثبّت الملف التنفيذي، واكتب ملف إعدادات بمدخل لكل سلسلة، وأضف مفتاحًا لكل سلسلة، وسجّل المفتاح ما بعد الكمومي على QoreChain، وتحقق من الجاهزية، ثم شغّل المُرحِّل:

qorel keys add --chain qorechain-diana --key-name relayer --mnemonic-file ./relayer.mnemonic
qorel keys register-pqc --chain qorechain-diana
qorel keys pqc-status --chain qorechain-diana # ready_to_relay must be true
qorel health-check
qorel start

صفحات هذا القسم:

الصفحةما الذي تغطيه
الجديدما يضيفه الإصدار 0.1.0 فوق Hermes
التثبيتالأرشيفات و.deb و.rpm وHomebrew والحاوية والبناء من المصدر، وكيفية التحقق من كل منها
البدء السريعمن التثبيت إلى أول تحويل على شبكة الاختبار
الإعداداتمدخل سلسلة QoreChain والمفاتيح والغاز وفحوص الأمان
التشغيل بجانب مدقّقتخطيطات systemd وDocker Compose وKubernetes
المراقبةالقياس عن بُعد وما ينبغي التنبيه عليه
التوقيع من أي لغةعقد التوقيع الهجين والمكتبات لخمس لغات
استكشاف الأخطاء وإصلاحهاأسئلة وحلول

كيفية الوصول​

  • الشبكة. شبكة الاختبار qorechain-diana فقط (تعمل شبكة الاختبار بالإصدار v3.2.6). الشبكة الرئيسية qorechain-vladi ليس فيها قناة IBC مفتوحة؛ راجع تحويل الأصول لمعرفة ما لدى كل شبكة.
  • الطرف المقابل. شبكة اختبار Cosmos Hub العامة، بمعرّف السلسلة provider، عبر channel-600. وتعمل أي سلسلة أخرى مبنية على Cosmos SDK بالطريقة نفسها كمدخل provider في ملف الإعدادات النموذجي.
  • نقاط النهاية. يحتاج QORel إلى RPC للإجماع ونقطة WebSocket ونقطة gRPC لكل سلسلة. لدى شبكة اختبار QoreChain RPC عام (https://rpc-testnet.qore.host) وREST عام (https://api-testnet.qore.host) لكن لا توجد نقطة gRPC عامة اليوم، ولا وعد بها، لذا يحتاج مُرحِّل طرف ثالث لـ qorechain-diana إلى عقدة شبكة اختبار خاصة به (تشغيل عقدة، الاتصال بشبكة الاختبار). يمكن استخدام نقاط النهاية العامة التي تحدّ من معدل المُرحِّلين لاختبار قصير لا للترحيل المستمر.
  • الحسابات. حساب مُرحِّل مخصص واحد على كل سلسلة، برصيد صغير للرسوم. يأتي QOR الخاص بشبكة الاختبار من صنبور لوحة التحكم؛ ولا قيمة له. لا تستخدم أبدًا مفتاح مشغّل مدقّق.
  • التكلفة. QORel مجاني. وتكلّف المعاملة على QoreChain الغاز مضروبًا في السعر، بحد أدنى 0.1 uqor لكل وحدة غاز، ويُحتسب الرسم كاملًا دون استرداد.
  • المنصات. Linux x86_64 وarm64 (glibc 2.28 أو أحدث)، وmacOS بمعالج Apple Silicon وIntel، وصورة حاوية لأي نظام آخر. نظام Windows غير مدعوم؛ استخدم الحاوية تحت WSL2.

أين يُنشر​

أينماذاالإصدار
GitHub: qorechain/QORelالمصدر والمشكلات وصفحة الإصدارات التي فيها الأرشيفات و.deb و.rpm وSHA256SUMS وشهادات البناء0.1.0
Homebrewbrew install qorechain/tap/qorel0.1.0
ghcr.io/qorechain/qorelصورة الحاوية (amd64 وarm64، بلا توزيعة، بلا صلاحيات الجذر، موقّعة بـ cosign)0.1.0
الحزمة qorel-signerطبقة الموقِّع، في المستودع عند crates/qorel-signer؛ استخدم اعتمادية gitليست على crates.io

الترخيص: Apache-2.0. QORel مشتق من Hermes، حقوق النشر لـ Informal Systems Inc. ومؤلفي Hermes، وهو أيضًا Apache-2.0؛ ويحمل الملف NOTICE في المستودع الإسناد. راجع التثبيت للأوامر ولكيفية التحقق من تنزيل.

لمعرفة حزم المطورين الأخرى راجع حزم المطورين. ولمعرفة موقع IBC في السلسلة راجع بنية الجسر.

الحدود والمشكلات المعروفة​

  • شبكة الاختبار فقط. شُغِّل QORel مقابل qorechain-diana وشبكة اختبار Cosmos Hub العامة. ولم يرحّل على الشبكة الرئيسية، ولا توجد قناة IBC مفتوحة فيها.
  • IBC v1 (الكلاسيكي) فقط. ترحيل IBC v2 غير منفَّذ في QORel بعد؛ وهو المرحلة التالية. ولم يبدأ ترحيل Ethereum (Eureka).
  • إصدار السلسلة. يتبع الوضع الهجين إصدار sign-bytes الذي تبلّغ عنه السلسلة. وتتحقق شبكتا QoreChain كلتاهما من الصيغة الحالية (الإصدار 2) اليوم.
  • لا يوجد مُرحِّل مستضاف. لا يقدّم هذا الدليل خدمة مُرحِّل. وإن لم يكن هناك مُرحِّل قيد التشغيل لقناة، يبقى التحويل معلّقًا إلى أن يوجد.
  • نقاط النهاية العامة. يحتاج جانب QoreChain إلى gRPC وهو غير عام. وكثيرًا ما تحدّ نقاط النهاية العامة لدى أطراف ثالثة للسلاسل الأخرى من معدل المُرحِّلين.
  • ليس محفظة. يوقّع QORel المعاملات التي يرسلها بصفته مُرحِّلًا فقط. وللتوقيع في المحافظ راجع QoreSign.
  • لا يوجد إصدار لـ Windows. استخدم الحاوية تحت WSL2.
  • حالة الإصدار. QORel إصدار 0.x. الأوامر والإعدادات المطابقة لـ Hermes تحتفظ بسلوك Hermes؛ وقد تتغير الإعدادات الخاصة بـ QoreChain قبل 1.0.