Skip to content

העולם

World הוא יחידה גלובלית המכילה יחידות אחרות. World מורכב מ:

כאשר תחומים, עמידים או תפקידים נרשמים או לא נרשמים, 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/ תוך שמירה על ההשאות והפרסומים של אינדקס זמינים לאישור ולחיפוש .