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 אינו שפה של חוזה אינטליגנטי. זה המעטה והקודק הדeterministic אשר נושאים עסקאות, שיחות חוזה, מונפסטים, וטייפ 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 | תמיכה | קודים מוליכים יצירת structs כמו חומרי תועלת שדה ארוזים. |
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)מקפיצות monotonicu64המוקדמות על ידי עומסי הפועל של אלמנט קונקייטנים. - המפות מציינות את ספרי הכניסה עם קבוע
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-len | Varint מקדמות אורך לפי ערך. |
columnar | Norito בלוקי עמודה, קודקים קווים מתאימים AoS/NCB, ותצפיות משואות למסלולים כבדים בסריקה; כוללים במגוון התכונות המקובל node-codec. |
strict-safe | מעבירים את פאניקה של מסלולים שגויים לתאומים מבוססים. |
simd-accel | CPU מאיץ, אם קיים, עם נסיגה דטרמיסטית. |
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:
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. - לפני שתפעיל את האקסלרייטור, תפעילו בדיקות שוויון נגד יצירת סקלאר. אם אקסלרטר נכשל, השתמשו במפסקת הסקלאר הדeterministic. סימנטיקה של המשאבים המשמשים צריכה להישאר ללא שינוי .