Skip to content

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.
CRC648 بايتCRC64-XZ رقم التحقق من الحمولة المفيدة غير المضغوطة.
العلامات1 بايتالعلامات التخطيطية للأطول الضيقة، والترتيبات المعبأة، والمقاطع المعبأة.

الرأس هو 40 بايت. يقوم مفكّرات التشفير بالتحقق من السحر، والإصدار، وقناع العلم المدعوم، وطول الحمولة المفيدة، ومجموع التفتيش، وشيكما الهاش قبل إعادة بناء القيمة المكتوبة .

علمات التخطيط

Norito تخزين خيارات التخطيط في بايت العنوان النهائي. يقوم مساعدي v1 الافتراضي بإصدار COMPACT_LEN (0x02) للاستكشافات الموحدة لطول القيمة الواحدة. لا تزال إضافة الطول الثابتة الصريحة واضحة قابلة للقراءة عندما يقوم المتصلون بتشفير مع flags = 0x00 .

العلمهيكسالحالةالتأثير
PACKED_SEQ0x01دعميرمز مجموعات ذات الحجم المتغير مع جدول تعويض بالإضافة إلى كتلة بيانات متواصلة.
COMPACT_LEN0x02افتراضييستخدم اللونات غير الموقعة القنونيّة للاستثناءات على طول كل قيمة.
PACKED_STRUCT0x04دعمتشفير الموجات التي تم إنشاؤها كحملات ميدانية محمولة.
VARINT_OFFSETS0x08المحجوزاتيتم رفضها في v1؛ تعويضات التسلسل المعبأة هي عرض ثابت u64.
COMPACT_SEQ_LEN0x10المحجوزاتيتم رفضها في v1؛ العناوين الطول السلسلة على المستوى الأعلى هي عرض ثابت u64.
FIELD_BITSET0x20مدعومة بالمتطلباتيضيف مجموعة من الأجزاء للمخطوطات المعبأة بحيث الحقول التي تحتاج إلى أحجام صريحة فقط تحمل مقدمات الحجم. يتطلب 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 لكل قيمة.
columnarNorito كتلة عمودية، قابلة للتكيف AoS/NCB كوديكات الصفوف، والمشاهدات المقترضة للمسارات الثقيلة في المسح؛ مدرجة في الافتراض node-codec مجموعة الميزات.
strict-safeتحويل تشفير الذعر في المسارات الخطأ إلى أخطاء هيكلية.
simd-accelCPU تسريع إذا كان متاحًا ، مع تراجع تحديدي.
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:

http
Content-Type: application/x-norito
Accept: application/x-norito

عندما يدعم نقطة نهاية كلا التمثيلين، يمكن للعملاء إرسال قائمة تفضيل صريحة:

http
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.
  • قبل تشغيل المحرك السريع، قم بتشغيل اختبارات الموازنة ضد الناتج المتعدد. إذا فشل المحرك السرع، استخدم التراجع المتعدد المحدد. يجب أن تبقى تعبير الحمل الفائدة دون تغيير.

الإشارات المتقدمة