Әлем
World - басқа да субъектілерді қамтитын жаһандық ұйым. World мыналардан тұрады:
- Iroha конфигурация параметрлері
- тіркелген әріптестер
- тіркелген домендер
- тіркелген қозғалтқыштар
- тіркелген рольдер
- тіркелген рұқсат белгілері анықтамалары
- барлық шоттар үшін рұқсат белгілері
- орындалу уақытын растайтын жүйелер тізбектері
Домендер, әріптестер немесе рөлдер тіркелген немесе тіркелмеген кезде World нұсқаулығының мақсаты болып табылады.
Дүниежүзілік көрініс (WSV)
World State View - қазіргі блокчейн жағдайын есте сақтаудағы бейнелеу. Ол World, берілген блок-хаштарды, транзакция индекстерін және ағымдағы дәуір үшін таңдалған теңгерімдерді қамтиды. Толық блок жүктемелері өзгеріске қабілетті WSV деректер ретінде дубликацияланудың орнына, Kura деректері арқылы көрсетілетін болады.
Қауымдастық WSV Сұраныстар оқылып, блок орындалуы өзгеріп отырады. Бұл шындықтың тұрақты көзі емес. Тұрақты тарихы сақталады Kura, және WSV қайта құруға болады Kura блоктарын немесе күйін кескіннен жүктеледі , содан кейін жаңа ойнату арқылы ұсталады Kura Блоктар.
WSV нені іздейді?
WSV нысаны World объектісінен кеңірек, іс жүзінде ол:
World: параметрлер, теңгерімдер, домендер, шоттар, активтер, NFTs, рөлдер, рұқсаттар, триггерлер, орындаушы деректері және басқа да тіркелген деректер үлгісінің объектілері- басталған блок-хашистер және соңғы басталған биіктік
- Сұрау салулар мен түсімдер үшін пайдаланылатын транзакция-блок индекстері
- консенсус арқылы қолданылатын ағымдағы және бұрынғы commit топологиясы
- Келісілген блоктардан алынған, мысалы, деректерге қолжетімділік міндеттемелері, қабылдау курсорлары, пин мақсаттары және сұрау салу проекциясы белгілері сияқты есте сақтаудағы индекстер
- детерминистикалық блоктарды орындау үшін қажетті орындалу уақытын конфигурациялау кескіндері, мысалы криптография, басқару, құбыржол, мазмұн, есеп айырысу және Nexus параметрлері
Сұрау салулар әдетте осы құрылымдардың үстінен тек оқуға арналған StateView алады. Көрініс сұрау салуды орындау үшін бірқалыпты шұғыл кескін болып табылады; ол WSV тікелей мутациясына жол бермейді.
WSV қалай өзгерді
WSV өзгерістер оларды орындаудан бұрын қойылады. Блок орындауы блок масштабталған мемлекеттік төсегін жасайды, және әрбір қабылданған транзакция өзінің нұсқауларын транзакция масштабындағы төсегінде қолданады. Бұл транзакциялар бір үкiстi блок контекстінде орындалатын деректер пайда болады. Блок үшін транзакция әсерінен кейін уақыт триггерлері бағаланады.
Консенсус блокты тапсырғаннан кейін, бүйрек бірінші кезекте Kura commited block-ті шақырады. Егер бұл шақыру қадамы сәтсіздікке ұшыраса, WSV алға жылжымайды және консенсус айналымы блоктың пайдалы жүктемесін қайта сынап немесе шақырады. Блок Kura кезегіне қабылданғанда, Iroha орындаудан кейінгі блок эффекттерін қолданады, алынған индекстерді жаңартады және WSV кезеңді өзгерістерін жай-күй көрінісі кілті астында жасайды. Бұл оқырмандарды ішінара басталған блокты байқаудан сақтайды.
Консенсус-критикалық ереже - теңгерімшілер бірдей WSV қосылған блоктардан жетуі тиіс. WSV деректерді айналдыру нұсқауларына жергілікті түзетулерді тікелей жіберіп, теңгерімшілердің растау немесе қайта ойнау кезінде келіспеуі мүмкін.
Жарату және қайта ойнау
Бастау кезінде Iroha алдымен Kura-ді бастайды және сақталған блок биіктігін біледі. Содан кейін ол жай-күй кескінін жүктеуге тырысады. Егер кездейсоқ кескін жоқ болса, немесе шынайы кескін қалпына келтіруге жарамды деп қабылданбаса, Iroha бастапқы жағдай жасайды және Kura-ден жасалған блоктарды қайтарады. Егер слайд дұрыс болса, бірақ Kura артында болса, тек жоғалған биіктік диапазоны қайта ойнады.
Қайта ойнау әр сақталған блокты растайды, осы биіктікке арналған commit тізімі қайта құрылады, блок эффекттерін 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 | Қанша блок индексі жазуларын пайдалану қауіпсіз екенін тіркейтін тұрақты commit marker. |
blocks/<segment>/da_blocks/ | Диск-бюджетті орындаушы ескі денелерді ыстық файлдан алып тастаған кезде blocks.data сыртында сақталған блок пайдалы жүктемелер алынып тасталады. |
blocks/<segment>/pipeline/sidecars.norito және sidecars.index | Құбыр желісін қалпына келтіру үшін блок биіктігі бойынша клавиатуралар орнатылған. |
blocks/<segment>/pipeline/roster_sidecars.norito және roster_sidecars.index | Блок синхронизациясы мен қайта ойнауында пайдаланылатын соңғы commit-roster sidecars. |
merge_ledger/<segment>.log | Қатысу блоктарымен сәйкестендірілген біріктіру тіркелгісі жазулары. |
commit-rosters.norito | Соңғы блоктар үшін кепілдік сертификаттары және растаушы бақылау пункттері сақталған. |
Kura тізбек үшін компактты естелік векторы сақталады: әрбір биіктікте блок хэш және, мүмкіндігінше, блок дене болады. Женез блогы сақтандырылып қалады, ал соңғы kura.blocks_in_memory генез емес блоктары өз денелерін естелікте сақтайды . Бұрынғы блоктардың денелері естуден шығарылады және қажет болған жағдайда Kura файлдарынан қайта жүктеледі.
Бастапқыластыру кезінде strict режимі блок пайдалы жүктемелерінен сақталған блоктерді талдап, қажет болған жағдайда хеш файлын қайта жазады. fast режимі сақталған хеш/индекстік метамәліметтерден басталады және егер бұл метамәліме сәйкессіз болса, қатаң бастапқылауға оралады. Егер Kura бұзылған құйрықты анықтаса, ол сақтауды соңғы расталған блокқа дейін кеседі.
Kura жаңа блоктарды фоновый жазушы арқылы жазады. Жазушы блок пайдалы жүктемелерін, хештар мен индекс жазбаларын қосады, содан кейін конфигурацияланған fsync саясатына сәйкес тұрақты санау таңбасын жылжытады. Диск-бюджетті орындау белсенді болған кезде Kura зейнетке шыққан сегменттерді тазарта алады немесе ескі блоктарды da_blocks/ -ға шығарып сала алады, ал хештар мен индекс жазуларын бекіту және іздеу үшін қолданады.