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.
SDKsRust, Python, JavaScript, Kotlin ג'אווה, Swift, ו Android לקוחות משתמשים Norito בונה או קושר במקום בייטים שנאספו ידנית.
אחסון Kuraמטענים שימושיים בלוקים, מכוניות צדדיות של התאוששות, רוסטרים ומוצרי מחויבות מאוחסנים כנתונים עם מסגרת Norito.
מוניפסטיםNexus, זמינות נתונים, SoraFS, שידור חיובי ומניסטים פופולריים משתמשים ב- Norito כאשר המניסט חייב להיות חתום או חישוי.
זרימהNorito זרימה משתמשת במניפסטים של Norito, כותרות של קטעים, מסדרות בקרה ותוכנות תאימות.

Norito אינו שפה של חוזה אינטליגנטי. זה המעטה והקודק הדeterministic אשר נושאים עסקאות, שיחות חוזה, מונפסטים, וטייפ 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תמיכהקודים מוליכים יצירת structs כמו חומרי תועלת שדה ארוזים.
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) מקפיצות monotonic u64 המוקדמות על ידי עומסי הפועל של אלמנט קונקייטנים.
  • המפות מציינות את ספרי הכניסה עם קבוע u64 ומשתמשות סדר מפתח דטרמיסטי. כניסיים HashMap מסודרים לפי מפתח לפני הקודינג; BTreeMap משתמשת בסדר הטבעי שלו.
  • BigInt משתמש באייטים של תוספת שניים קטנים עם אורך בייט של u32 וקצה 512 ביטים.
  • Numeric מקודד כ- (mantissa, scale), שם המנטיסה מאחסנת את הערך המספר שלם והסטנדרט מאחסן את מספר הספרות החתיכות.

כללים אלה חשובים לחתימות והשיש. שני SDKs שמבנים את אותה עסקאות הגיוניות חייבים לייצר את אותם בייטים קנוניים.

סימנים של תכנון

מטענים מועילים עם טופס Norito נושאים את האש של ה-schema ב-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 כותרת נשארו דeterminist עבור אישור.

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-lenVarint מקדמות אורך לפי ערך.
columnarNorito בלוקי עמודה, קודקים קווים מתאימים AoS/NCB, ותצפיות משואות למסלולים כבדים בסריקה; כוללים במגוון התכונות המקובל node-codec.
strict-safeמעבירים את פאניקה של מסלולים שגויים לתאומים מבוססים.
simd-accelCPU מאיץ, אם קיים, עם נסיגה דטרמיסטית.
jsonנתיב JSON parser, כותב, 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.
  • לפני שתפעיל את האקסלרייטור, תפעילו בדיקות שוויון נגד יצירת סקלאר. אם אקסלרטר נכשל, השתמשו במפסקת הסקלאר הדeterministic. סימנטיקה של המשאבים המשמשים צריכה להישאר ללא שינוי .

ראשי תיקון מקדימה