Skip to content

მსოფლიო

World არის გლობალური სუბიექტი, რომელიც შეიცავს სხვა სუბიექტებს. World შედგება შემდეგიგან:

როდესაც დომენები, პარტნიორები ან როლები რეგისტრირებულია ან არ არის რეგისტრირებული, World ხდება (არარეგისტრირების) ინსტრუქციის მიზანი ინსტრუქცია .

მსოფლიო სახელმწიფოს ხედვა (WSV)

World State View არის მიმდინარე ბლოკჩეინის მდგომარეობის მეხსიერებაში წარმოდგენა. იგი მოიცავს World, ჩაბარებული ბლოკის ჰეშებს, ტრანზაქციის ინდექსებსა და თანატოლებს, რომლებიც ამჟამინდელი ეპოქისთვის არჩეულია. სრული ბლოკის სასარგებლო ტვირთები ემსახურება Kura-დან, ნაცვლად იმისა, რომ დუბლიცირდეს როგორც ცვალებად WSV მონაცემებს .

WSV არის მდგომარეობა, რომ კითხვები წაიკითხა და რომ ბლოკის შესრულება mutates. ეს არ არის მდგრადი წყარო სიმართლე თავისთავად. მუდმივი ისტორია შენახულია Kura, და WSV შეიძლება აღდგეს Kura ბლოკებიდან ან დაიტვირთოს სტატუსის სურათიდან და შემდეგ გადაიხადოს უფრო ახალი Kura ბლოკების მიერ.

რა არის WSV კვალი

WSV უფრო ფართოა, ვიდრე World ობიექტი. პრაქტიკაში მასში შედის:

  • World: პარამეტრები, თანატოლები, დომენები, ანგარიშები, აქტივები, NFTs, როლები, ნებართვები, გამომწვევი ფაქტორები, აღსრულების მონაცემები და სხვა რეგისტრირებული მონაცემთა მოდელის ობიექტები
  • ვალდებული ბლოკის ჰეშები და ბოლო ვალდებულების სიმაღლე
  • ტრანზაქციების ბლოკირების ინდექსები, რომლებიც გამოიყენება შეკითხვებისა და მიღებების დროს
  • ამჟამინდელი და წინა კომიტეტის ტოპოლოგია, რომელიც კონსენსუსით გამოიყენება
  • ჩართული ბლოკებიდან გამომდინარე ინდექსები, როგორიცაა მონაცემთა ხელმისაწვდომობის ვალდებულებები, მიღების კურსორები, pin-intents და შეკითხვების პროექციის მარკერები.
  • დეტერმინისტური ბლოკის განხორციელებისთვის საჭირო გამშვები კონფიგურაციის სურათები, როგორიცაა კრიპტოგრაფია, მმართველობა, მილსადენი, შინაარსი, ანგარიშსწორება და Nexus პარამეტრები.

გამოკითხვები ჩვეულებრივ იღებენ მხოლოდ კითხვაზე StateView ამ სტრუქტურებზე. ნახვა არის შეკითხვის შესრულების თანმიმდევრული გადაღება; იგი არ იძლევა პირდაპირ მუტაციას WSV .

როგორ იცვლება WSV

WSV ცვლილებები ხდება განხორციელებამდე. ბლოკების შესრულება ქმნის ბლოკის მასშტაბით არსებულ მდგომარეობას და თითოეული მიღებული ტრანზაქცია იყენებს მის ინსტრუქციებს ტრანზაქციის მასშტაბით გადაფარვა. ამ ტრანზაკციების მიერ გამოწვეული მონაცემები განაპირობებს ერთსა და იმავე ბლოკის კონტექსტს. დროის განაპირობა შეფასებულია ბლოკის ტრანზუქციის ეფექტების შემდეგ.

კონსენსუსის მიერ ბლოკის განხორციელების შემდეგ, პერმა პირველ რიგში ჩაიდინა Kura. თუ ეს ჩაიდნა არ მოხდება, 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 მარკერი, რომელიც აღწერს რამდენი ბლოკის ინდექსის ჩანაწერი არის უსაფრთხო გამოყენებისთვის.
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 რეჟიმი იწყება შენახულიდან hash / ინდექსის მეტა მონაცემები და ისევ მკაცრ ინიციალიზაციას მიუახლოვდება, თუ ეს მეტა მონაცემი არ არის თანმიმდევრული. თუ Kura აღმოაჩენს დაზიანებულ კუდს, იგი შეამცირებს შენახვას ბოლო გადამოწმებული ბლოკი.

Kura წერს ახალ ბლოკებს ფონის მწერლის მეშვეობით. მწერალი აერთიანებს ბლოკის სასარგებლო დატვირთვებს, ჰეშებს და ინდექსების შეყვანას, შემდეგ კი განახორციელებს გამძლე გათვლის მარკერს კონფიგურირებული fsync პოლიტიკის შესაბამისად. როდესაც დისკის ბიუჯეტის აღსრულება აქტიურია, Kura შეუძლია წაშალოს პენსიონირებული სეგმენტები ან გამოიყვანოს უფრო ძველი ბლოკების სხეულები da_blocks/, ხოლო ჰეშები და ინდექსური ჩანაწერები განთავსდეს ვალიდაციისა და ძებნისთვის.