העולם
World הוא יחידה גלובלית המכילה יחידות אחרות. World מורכב מ:
- Iroha פרמטרים של הגדרות
- שותפים רשומים
- שדות רשומים
- תפעילים רשומים
- חלקים רשומים
- רשום הגדרות של סימני רשות
- סימני רשות לכל החשבונות
- שרשרת מבקרי תקופת הפעולה
כאשר תחומים, עמידים או תפקידים נרשמים או לא נרשמים, World הוא המטרה של הוראת (לא) רישום .
תפיסה של המדינה העולמית (WSV)
World State View הוא ייצוג בזיכרון של מצב ה-blockchain הנוכחי. זה כולל את World, חישובים בלוק מחויבים, אינדיקסים של עסקאות, ועמיתים שנבחרו לעידן הנוכחי. עומסי הבולק המלא מועילים מ- Kura במקום להיות משכפלת כנתונים משתנים של WSV.
ה- WSV הוא מצב שבו בקשות נלקחו והביצוע הבלוק משתנה. זה לא המקור הקבוע של האמת בעצמו. ההיסטוריה הקבועה נשמרת ב- Kura , ו- WSV ניתן לבנות מחדש מתוך בלוקים של Kura או להטען מתוך תמונת רגע של מצב ולאחר מכן לתפוס אותו על ידי שיחקת מחדש של בלוקים חדשים יותר של Kura.
מה המעקבים WSV
WSV הוא רחב יותר מהאובייקט World. במציאות הוא מכיל:
World: פרמטרים, עמיתים, תחומים, חשבונות, נכסים, NFTs, תפקידים, רשיונות, גורמים לניצול, נתונים מבצעיים ואובייקטים אחרים של מודל נתונים רשומים- חשישים בלוק מחויבים וגובה המחויבות האחרון
- אינדיקטורים של עסקאות לבלוקים המשמשים בשאלות ומקבלות
- הטופולוגיה הנוכחית והקדמית של ההתחייבויות המשמשת על ידי הסכמה
- אינדיקסים בזיכרון המוצאים מבלוקים מחויבים, כגון התחייבויות זמינות נתונים, קורסורים של קבלה, כוונות פין ומרקטרים של תצפית בקשה
- תמונות קונפיגורציה של זמן ההפעלה הנדרשות לביצוע בלוק דטרמיניסטי, כגון קריפטוגרפיה, ממשל, צינור, תוכן, עיסוי ו Nexus הגדרות
חיפוש בדרך כלל מקבל רק קריאה StateView על מבנים אלה. תצוגה היא תמונה מיידית עקבית לביצוע חיפוש; זה לא מאפשר מוטציה ישירה של WSV.
איך WSV משתנה
WSV שינויים מתבצעים לפני שהם מבצעים. ביצוע בלוק יוצר שפיכה של מצב בקנה מידה של בלוק, וכל עסקאות מקובלות מיישמות את ההוראות שלהן בשפיכה בקנה מידת העסקה. נתונים מפעילים שנזכרים על ידי עסקאות אלה פועלות בהקשר של הבלוק זהה. גורמי זמן מוערכים לאחר השפעות העסקה עבור הבלוק.
לאחר שהסכמה מחייבת בלוק, עמידה ראשונה את הבלוק המחויב ב Kura. אם צעד ההשפעה הזה נכשל, WSV לא מתקדמת והמעגל הסכמה מנסה מחדש או מחייב את עומס החשיבות של הבלוק. כאשר הבלוק מקובל בשורה של Kura, Iroha מיישם את אפקטי הבלוק לאחר ההפעלה, מעדכן אינדיקסים נגזרים, ומבצע את השינויים המדרגתיים WSV תחת מנעול תצפית מצב. זה מונע מהקוראים לצפות בלוק מחולק.
חוק הקונצנזוס קריטי הוא כי עמיתים חייבים להגיע לאותו WSV מאותם בלוקים מחויבים. תיקונים מקומיים ישירים להוראות לעקוף נתונים של WSV יגרמו לעמיתים להתווכח במהלך אישור או חזרה.
התחלה ושיחק מחדש
בהתחלתה, Iroha מקדמת את Kura תחילה ומגלה את גובה הבלוק המאוחסן. לאחר מכן הוא מנסה לטעין תמונה מיידית של מצב. אם אין תמונה מייודית זמינה, או אם התמונה מיידית נדחתה כניתנת לשחזור, Iroha יוצרת מצב ראשוני ומשתקפת בלוקים מחויבים מ Kura. אם תמונה מיידית היא תקנה אך מאחורי Kura, רק טווח הגובה החסר מופיע מחדש.
Replay מאושרת כל בלוק שנחזק, מבצעת מחדש את רשימת ההתחייבויות עבור הגובה הזה, מיישמת את אפקטי הבלוק ל WSV, ומבצעת את המצב המוצא. זה אומר Kura הוא הנתיב של התאוששות עבור WSV, בעוד תמונות מהזמן הן אופטימיזציה שממנעות מלהחזיר את כל שרשרת.
Kura אחסון
Kura הוא אחסון בלוק קבוע של Iroha. הוא מאחסן בלוקים חתומים ונתונים מתאוששים. זה לא מאחסן עותק משתנה שנייה של WSV.
האחסון Kura מקושר ב- kura.store_dir. בתוך שורש זה, נתונים של בלוק מחולקים על ידי ליין או קטע. הקבצים העיקריים לחלק הם:
| דרך | מטרה. |
|---|---|
blocks/<segment>/blocks.data | מטענים מועילים של בלוקים חתומים עם קישור Norito. |
blocks/<segment>/blocks.index | רשומות בגודל קבוע (start, length) הגובה של בלוק המפה באייטים ב- blocks.data. |
blocks/<segment>/blocks.hashes | לחסום האשיז לפי גובה עבור חיפוש מהיר וחיקוי ההתחלה. |
blocks/<segment>/blocks.count.norito | סימן מחויבות יציבה שידוד כמה כתיבים של אינדיקס בלוק בטוחים לשימוש. |
blocks/<segment>/da_blocks/ | חומרי תועלת של בלוק הוחזקו מחוץ blocks.data כאשר אכיפת תקציב דיסק מעביר גופות ישנות מתוך הקובץ החם. |
blocks/<segment>/pipeline/sidecars.norito ו sidecars.index | רכבים לריבוי צינורות מובנים לפי גובה הגשר. |
blocks/<segment>/pipeline/roster_sidecars.norito ו roster_sidecars.index | רכבים סייד-רוסטרים האחרונים המשמשים על ידי סינכרון בלוק ושוב. |
merge_ledger/<segment>.log | הכניסה למספר הנתונים המורכבות עם בלוקים מחויבים. |
commit-rosters.norito | שמרו על תעודות מחויבות ונקודות בדיקת לאישור עבור בלוקים האחרונים. |
Kura שומר על וקטור קומפקטי של זיכרון עבור שרשרת: לכל גובה יש את ההש בלוק, ובבקשה, גוף הבלוק. בלוק הגנזיס נשאר מאוחסן, והבלוקים האחרונים kura.blocks_in_memory שאינם גנזיס שומרים את הגוף שלהם בזיכרון . גופים של בלוקים ישנים נפטרים מהזיכרון ומוחזקים מחדש מתוך קבצים Kura כאשר זה נחוץ.
במהלך ההחלקה, מצב strict מעודד בלוקים מאוחסנים מהחובשים הפועלים של הבלוק ומכתוב מחדש את הקובץ האש אם זה נחוץ. מצב fast מתחיל מ-האש/אינדקס מטא נתונים מאוחסרים וחוזר ל-החלקה קפדנית אם המטא נתונים אלה אינם עקביים. אם Kura יגלה זנב שבור, הוא יפוצץ את האחסון לבלוק האחרון שהוסמך.
Kura כותב בלוקים חדשים באמצעות כותב רקע. הכותב מוסיף מטענים מועילים של בלוקים, חישובים ופריטים אינדקסים, ולאחר מכן מקדם את סימן ההספקה המתמשכת בהתאם למדיניות fsync המוגנת. כאשר אכיפת תקציב דיסק היא פעילה, Kura יכול לנקות שקטים מפוגשים או לפנות גופים של בלוקים ישנים לתוך da_blocks/ תוך שמירה על ההשאות והפרסומים של אינדקס זמינים לאישור ולחיפוש .