Norito
Norito هو Iroha هي طبقة التسلسل القنوني. انها تنسيق البايت المستخدمة عند أقرانه، SDKs, CLI الأدوات، Torii, Kura, والقطع الأثرية التي يتم إنتاجها يجب أن تتفق على نفس الحمل المفيد بالضبط.
الاستخدام Norito عندما تكون البيانات جزءاً من الإجماع أو التوقيع أو الاختراق أو الاستمرار أو التقاطع SDK قابلية التشغيل JSON عندما تقدم نقطة نهاية صراحة عرضاً يمكن قراءته من قبل الإنسان للمشغلين أو لوحات التحكم، أو إصلاح سريع.
حيث يظهر Norito
| السطح | كيفية استخدام Norito |
|---|---|
| المعاملات والاستفسارات | يتم تشفير المعاملات الموقعة والحملات الفائدة للمسائل المرسلة عن طريق Torii باسم Norito. |
| التكوين | kagami genesis sign تنتج كتلة موقعة .nrt التي تتساوى مع الحمل عند بدء العمل. |
| Torii النسخة الردود | النقاط النهائية التي تدعم الاستجابات الثنائية المطبوعة استخدام Accept: application/x-norito. |
| SDKs | يستخدم عملاء Rust ، Python، JavaScript ، Kotlin/جاوا، Swift، و Android المباني أو الارتباطات Norito بدلاً من البايتات التي تم تجميعها يدوياً. |
| تخزين Kura | يتم تخزين الحمولات المفيدة كتلة، والسيارات الجانبية للتعافي، والقوائم، وعلامات الالتزام على أنها بيانات في إطار Norito. |
| إعلانات | Nexus ، توافر البيانات، SoraFS، التدفق، والإشارات المتجهة إلى التطبيق استخدام Norito عندما يجب توقيع الإشارة أو الهش. |
| التدفقات | Norito الاستخدامات التدفقية Norito منشورات، عناوين القطاعات، إطارات التحكم، وأجهزة الوصول. |
Norito ليس لغة العقود الذكية، بل هي غلاف تحديدي و الكوديك الذي يحمل المعاملات، الاتصالات العقدية، المظاهر، وتطبيق API حمولات مفيدة.
نموذج الحمولة المفيدة
يتم إطار كل حمولة مفيدة على السلك أو على القرص Norito بواسطة عنوان تليها البايتات المشفورة للحمل المفيد. يتم احتفاظ الأحمال المفيدة دون رأس ، أو عارية ، للتخزين الداخلي ، والمعايير ، ومساعد APIs الذي يلف النتيجة على الفور في رأس قبل النقل.
| حقل العنوان | الحجم | الغرض |
|---|---|---|
| السحر | 4 بايت | ASCII NRT0 ، يستخدم لرفض البيانات غير Norito مبكراً. |
| الرائد | 1 بايت | تنسيق النسخة الرئيسية. الحملات المفيدة الحالية تستخدم 0. |
| صغيراً | 1 بايت | إشارة لـ v1. القيمة الحالية هي 0x00. العلامات تصف التخطيط. |
| مخطط الهاشم | 16 بايت | الهوية النموذجية التي تستخدمها مفكّرات التطبيق لرفض الأحمال المفيدة غير المتوقعة. |
| الضغط | 1 بايت | 0 = None ، 1 = Zstd. يتم رفض القيم غير المعروفة. |
| طول الحمل المفيد | 8 بايت | طول الحمولة المفيدة غير المضغوطة كفترة صغيرة u64. |
| CRC64 | 8 بايت | CRC64-XZ رقم التحقق من الحمولة المفيدة غير المضغوطة. |
| العلامات | 1 بايت | العلامات التخطيطية للأطول الضيقة، والترتيبات المعبأة، والمقاطع المعبأة. |
الرأس هو 40 بايت. يقوم مفكّرات التشفير بالتحقق من السحر، والإصدار، وقناع العلم المدعوم، وطول الحمولة المفيدة، ومجموع التفتيش، وشيكما الهاش قبل إعادة بناء القيمة المكتوبة .
علمات التخطيط
Norito تخزين خيارات التخطيط في بايت العنوان النهائي. يقوم مساعدي v1 الافتراضي بإصدار COMPACT_LEN (0x02) للاستكشافات الموحدة لطول القيمة الواحدة. لا تزال إضافة الطول الثابتة الصريحة واضحة قابلة للقراءة عندما يقوم المتصلون بتشفير مع flags = 0x00 .
| العلم | هيكس | الحالة | التأثير |
|---|---|---|---|
PACKED_SEQ | 0x01 | دعم | يرمز مجموعات ذات الحجم المتغير مع جدول تعويض بالإضافة إلى كتلة بيانات متواصلة. |
COMPACT_LEN | 0x02 | افتراضي | يستخدم اللونات غير الموقعة القنونيّة للاستثناءات على طول كل قيمة. |
PACKED_STRUCT | 0x04 | دعم | تشفير الموجات التي تم إنشاؤها كحملات ميدانية محمولة. |
VARINT_OFFSETS | 0x08 | المحجوزات | يتم رفضها في v1؛ تعويضات التسلسل المعبأة هي عرض ثابت u64. |
COMPACT_SEQ_LEN | 0x10 | المحجوزات | يتم رفضها في v1؛ العناوين الطول السلسلة على المستوى الأعلى هي عرض ثابت u64. |
FIELD_BITSET | 0x20 | مدعومة بالمتطلبات | يضيف مجموعة من الأجزاء للمخطوطات المعبأة بحيث الحقول التي تحتاج إلى أحجام صريحة فقط تحمل مقدمات الحجم. يتطلب PACKED_STRUCT و COMPACT_LEN. |
العلامات صريحة. لا يستنتج المفكّرات التخطيط من شكل الحمولة المفيدة، أو الإصدار الأصغر، أو الهورستيكا. يتم رفض الجمعيات غير المعروفة أو غير صالحة بحيث يفسر جميع الأقران حمولة مفيدة بنفس الطريقة.
قواعد التشفير
يستخدم Norito ترتيبات تحديدية للشكلات البيانية المشتركة التي تظهر في نموذج بيانات Iroha:
- السلاسل هي
[len][utf8-bytes]؛lenيتبعCOMPACT_LENعند تمكينها. - عندما يتم تعيين
COMPACT_LEN، يستخدم طول لكل قيمة ورينتًا ضئيلًا. - متى
COMPACT_LENغائبة، طول لكل قيمة هو 8 بايت القليلu64. - يتم تحديد عناوين طول التسلسل بنسبة 8 بايت صغيرة
u64في v1. - يتم تشفير
Vec<u8>باسم[len_u64][raw-bytes]بدلاً من طول واحد في البايت. - تستخدم التسلسلات المعبأة
(len + 1)تعويضات متوحدةu64تليها حمولات العنصر المتواصلة. - تقوم الخرائط بتشفير حسابات الدخول مع
u64الثابتة واستخدام ترتيب المفتاح التحديدي. يتم فرز إدخالاتHashMapحسب المفتاح قبل التشفير. تستخدمBTreeMapالترتيب الطبيعي لها. BigIntيستخدم بايتات إضافة اثنين صغيرة مع طول بايتu32وقبض 512 بت.- يتم ترميز
Numericباسم(mantissa, scale)، حيث تخزين mantissa قيمة الأعداد الكاملة وتخزين المقياس عدد الأرقام الكسورية. .
هذه القواعد مهمة للتوقيعات والهاشيز. اثنان SDKs التي تبني نفس المعاملة المنطقية يجب أن تنتج نفس البايتات القنوني.
المخططات
تحميل Norito المفيد يحمل هش مخطط 16 بايت في العنوان. يتم استنباط الهش من اسم النوع المؤهل بالكامل. تتمكن البناءات التي تمكّن من هاشة الخطة الهيكلية من استخراج الهش من الخطة القانونية بدلًا من ذلك.
يرفض مفكّرات النمط عدم مطابقة المخططات. وهذا يحمي العملاء من فك تشفير إطار صالح Norito بشكل حادثي باعتباره نوعًا خاطئًا ويعتبر وضع الفشل المعتاد عندما يتحرك حزمة العوامل SDK من نموذج بيانات العقد.
الضغط والتسارع
Norito يدعم الضغط الصريح والتكيفي دون تغيير الحمل المنطقي المفيد:
| الميزة | الغرض |
|---|---|
to_bytes | تشفير رأس يليه حمولة مفيدة غير مضغوطة. |
to_compressed_bytes | تشفير مع Zstd وتسجيل علامة الضغط في العنوان |
to_bytes_auto | تطبيق الهورستيكات المحددة لتحديد ما إذا كان الضغط يستحق. |
| CRC64 تسريع | يستخدم CRC64-XZ المحمول في كل مكان، مع CLMUL على x86_64 أو PMULL على aarch64 عندما تكون متاحة. . |
| GPU CRC64 و الضغط | المعدات الاختيارية أو المساعدين CUDA يمكن أن تسريع الأحمال الفائدة الكبيرة، ثم تقع مرة أخرى إلى مسارات CPU. |
تسريع الأجهزة لا يغير المحتوى المفكّر أبدًا. يجب أن تتطابق تسريعات CRC و JSON الناتجة المحمولة بيت-بال-بيت. قد تختلف بايتات الإطار Zstd بين مرموز CPU و GPU ، ولكن البيانات المفيدة المفكّرة و Norito العنوان تبقى محددة للتحقق من التحقق.
JSON دعم
Norito يتضمن كومة محلية JSON للنقاط النهائية والأدوات التي تحتاج إلى JSON دون مغادرة نظام النموذج Norito.
| ميزة JSON | حالة الاستخدام |
|---|---|
norito::json::{to_json, from_json} | JSON الرمز/ترجمة المحددة. |
| جميلات ومُساعدين الكتاب | إنتاج CLI ، وإصلاحات، وتكامل التدفق std::io. |
| DOM القيم | التلاعب البرمجي من خلال نموذج القيمة JSON لـ Norito. |
| النص بسرعة JSON | تشكيل/شفرة على أساس الشريط الهيكلي لطرق DTO الحارة. |
| قراءة النسخ الصفر | مسح الرمز الذي يقترض السلاسل من المدخل حيثما أمكن. |
| السرعات المرحلة 1 | الاختيارية AVX2، NEON، المعدات، أو CUDA مؤشر هيكلي مع تراجع القياسية. |
يجب أن يفضل رمز Iroha المساعدين norito::json للحمليات المفيدة التي يتم تطبيقها API. إضافة serde_json بسيطة إلى مسارات الإنتاج تهدد بالانحراف عن النظام والسلوكيات الميدانية المتوقعة من قبل SDKs و Torii المستخرجين.
دعم مشتق
أنواع البيانات Rust تستخدم عادة ماكروس مشتقة بدلاً من رمز الكوديك اليدوي. يمكن للطبقة المشتقة توليد Norito كوديكات ثنائية، مخططات، ومساعدين JSON.
صفات الحقل الشائعة هي:
| الصفة | التأثير |
|---|---|
#[norito(rename = "other")] | يستخدم اسمًا مستقرًا متسلسلًا لنموذج النظام والتوافق JSON. |
#[norito(skip)] | الترميز يبتعد عن الحقل. المصفح يعطي قيمته Default. |
#[norito(default)] | يستخدم Default عندما لا يحمل حمولة مفيدة تم تشفيرها الحقل. |
#[norito(skip_serializing_if = "...")] | يمنع الحقول من JSON عندما يتطابق الموقع، مع الحفاظ على تشفير التحديدات الافتراضية. |
وتكشف المشتقات أيضًا عن إشارات الطول المشفر وحسابات الطول الدقيق حيثما كان ذلك ممكناً. يستخدم المشفرون هذه الإشارات لاحتفاظ بخازين وتجنب نسخ إضافية.
العائلات المكونة من صناديق
عند بناء ربطات Iroha أو SDK من المصدر، تختار ميزات Norito المساعدات والمسارع المتاحة:
| عائلة الميزات | ما يسمح به |
|---|---|
derive | ماكروات الإجراءات التي تم إعادة تصديرها للشرائح الثنائية ، والخطط ، و JSON المشتقات. |
compression | دعم للشحنات المفيدة ذات إطار الرأس. |
packed-seq | تخطيطات المجموعة المعبأة باستخدام الجداول المتوازنة. |
packed-struct | التخطيطات الهيكلية التي تم توليدها من مشتقات. |
compact-len | تثبيتات Varint لكل قيمة. |
columnar | Norito كتلة عمودية، قابلة للتكيف AoS/NCB كوديكات الصفوف، والمشاهدات المقترضة للمسارات الثقيلة في المسح؛ مدرجة في الافتراض node-codec مجموعة الميزات. |
strict-safe | تحويل تشفير الذعر في المسارات الخطأ إلى أخطاء هيكلية. |
simd-accel | CPU تسريع إذا كان متاحًا ، مع تراجع تحديدي. |
json | المحلل الأصلي JSON، الكاتب، DOM، المشتقات النسخة، والطرق السريعة. |
json-std-io | مساعدي القراء والكتابة على مستوى JSON. |
metal-stage1، cuda-stage1 | الخلفيات الاختيارية GPU JSON لمؤشر هيكلي. |
metal-stage2 | التصنيف الاختياري للبيانات المعدنية المتعلقة بشريط هيكلي JSON. |
metal-crc64، cuda-crc64 | المساعدات الاختياريّة GPU CRC64 لحمولات كبيرة. |
gpu-compression | التسارع المعدني الاختياري أو CUDA Zstd لتحملات مفيدة كبيرة. |
stage1-validate | التحقق من التحليل الذي يقارن المؤشرات الهيكلية المتسارعة JSON مع الناتج المتوسط. |
يمكن أن تختلف توافر الميزات بين SDKs ومحافظات الإصدار. يظل تنسيق الأسلاك يحكم من قبل العنوان والخطط، وليس من خلال علامات البناء المحلية.
Torii و Norito RPC
Torii يعرض JSON للعديد من طرق المشغلين، ولكن الطرق الثنائية المميزة تستخدم Norito. النوع الإعلامي لجثث التيار المميز Norito HTTP هو application/x-norito.
استخدم هذه العناوين عندما تقبل نقطة نهاية أو تعود بتطبيق Norito:
Content-Type: application/x-norito
Accept: application/x-noritoعندما يدعم نقطة نهاية كلا التمثيلين، يمكن للعملاء إرسال قائمة تفضيل صريحة:
Accept: application/x-norito, application/jsonيتم إظهار أخطاء فك الشفرة كخطأ في كتابة Torii ومحاسبة عن طريق التلفاز. وتشمل الأسباب الشائعة السحر غير الصالح، والإصدار غير المدعوم، ورمز الميزات غير المدعمة، وعدم مطابقة إجمالي الاختبارات، وعدم تشكيل UTF-8، وصف Enum غير صالح، وعدم تطابق النظام.
يتم اختيار نقل Norito RPC من خلال تكوين النقل. يجب أن تتبع لوحات التحكم الخاصة بالعميل تأخير الطلبات والفشل والاتصالات النشطة وبايت الاستجابة، و torii_norito_decode_failures_total بشكل منفصل عن حركة المرور JSON.
Norito التدفق
Norito التدفق يمتد نفس النهج المحدد إلى وسائل الإعلام والسطحات النقل في الوقت الحقيقي.
| ميزة التدفق | الغرض |
|---|---|
| إعلانات | الإعلان عن التزامات القطاع، طرق الخصوصية، القدرات، ملف تعريف الكوديك، مجموعة تشفير، ومفاتيح البيانات المتعلقة بالمحتويات. |
| عناوين القطاع | إربط رقم القطعة، مدة، عدد القطع، التوقيت، وضع الانتروبيا، ملخص الصوت، وجذور ميركل. |
| الالتزامات الكبيرة | دع المشاهدين والروايات يتحققون من قطع الحمولة المفيدة ضد المنشور قبل الخدمة أو فك تشفير. |
| إطارات التحكم | حمل إعلانات واضحة، ردود الفعل، التحديثات الرئيسية، ومفاوضات القدرة. |
| HPKE تحديثات رئيسية | تدوير أسرار النقل باستخدام مجموعة المفاوضات والمعدادات المتزايدة بشكل متزايد |
| المفاوضات حول القدرة | تتقاطع مع أجزاء الميزات المدعومة ، وحدود البيانات ، وتردد التعليقات ، ومتطلبات الخصوصية. |
| FEC والردود | يستخدم تقارير المستلم المحددة وقرارات الموازاة لطرق الخسارة في الوقت الحقيقي. |
| متجهات التوافق | أجهزة التشغيل عبر اللغات تثبت SDKs تشفير نفس المظاهر، القطاعات، وتدفقات الإنتروبية. |
الكوديكات والملفات الشخصية الخاصة بالتدفق منفصلة عن الصيغة الأساسية Norito للمعاملة/المسألة، ولكن مظاهرها وبيانات التحكم لا تزال تستخدم Norito بحيث يبقى التوجيه والتفويض وإعادة تشغيله ودليل المراجعة قابلًا للتكرار.
الإرشادات التشغيلية
- يفضل SDK المباني والربطات التي يتم إنشاؤها على Norito البايتات المصنوعة يدويا.
- التعامل مع عدم تطابق النظام كإصدار أو مشكلة إطار، وليس فشل شبكة انتقالية.
- الأرشيف
.nrt،.norito، والأثرية المعلنة في إطلاق أو حزمة الحوادث التي أنتجتهم. - استخدم Norito كمصدر للحقيقة للبيانات الموقعة أو المكشوفة أو المستمرة. استخدم توقعات JSON لأجهزة التحكم والتحقيق اليدوي.
- عند إضافة نقطة نهاية جديدة Torii، قم بتوثيق ما إذا كانت تقبل JSON أو Norito، أو كليهما، ووضع أنواع المحتوى المدعومة في
/openapi. - قبل تشغيل المحرك السريع، قم بتشغيل اختبارات الموازنة ضد الناتج المتعدد. إذا فشل المحرك السرع، استخدم التراجع المتعدد المحدد. يجب أن تبقى تعبير الحمل الفائدة دون تغيير.
الصفحات المتعلقة
- نقاط نهاية Torii
- الإشارة إلى Genesis
- مخطط نموذج البيانات
- JavaScript /TypeScript SDK
- Python SDK
- Swift و iOS SDK