Norito
Norito არის Iroha-ის კანონიკური სერიალიზაციის ფენა. ეს არის ბაიტების ფორმატი, რომელიც გამოიყენება მაშინ, როდესაც თანატოლებს, SDKs, CLI ინსტრუმენტებს, Torii, Kura და გენერირებულ არტეფაქტებს უნდა შეთანხმდნენ ზუსტად იმავე სასარგებლო ტვირთზე.
გამოიყენეთ Norito, როდესაც მონაცემები შედის კონსენსუსის, ხელმოწერის, ჰეშინგის, მდგრადობის ან SDK-ს ჯვარედინული ინტერპერაბილურობის ნაწილში. გამოიყენეთ JSON, როდესაც საბოლოო წერტილი პირდაპირ გვთავაზობს ადამიანის მიერ წაკითხილ პროექციას ოპერატორებისთვის, დაშბორტებისთვის ან სწრაფი დებეგირებისათვის.
სადაც Norito გამოჩნდება
| ზედაპირი | როგორ გამოიყენება Norito |
|---|---|
| ტრანზაქციები და კითხვები | Torii -ის მეშვეობით წარდგენილი ხელმოწერილი ტრანზაქციები და შეკითხვები კოდირებულია როგორც Norito. |
| თაყუანისცემა | kagami genesis sign წარმოქმნის ხელმოწერილი .nrt ბლოკი, რომელიც პარტნიორებს დატვირთვა startup. |
| Torii ტიპირებული პასუხები | საბოლოო წერტილები, რომლებიც მხარს უჭერენ ტიპირებულ ორმაგი პასუხებს, იყენებენ Accept: application/x-norito. |
| SDKs | Rust, Python, JavaScript, Kotlin/ჯავა, Swift, და Android კლიენტები იყენებენ Norito ხელოვნურად შედგენილი ბაიტების ნაცვლად კონსტრუქციები ან კავშირები. |
| Kura შენახვა | ბლოკის სასარგებლო ტვირთები, აღდგენითი გვერდითი მანქანები, რესტრები და commit markers ინახება როგორც Norito ჩარჩოს მონაცემები. |
| მანიფესტები | Nexus, მონაცემების ხელმისაწვდომობა, SoraFS, სტრიმინგი და აპლიკაციის მიმართული მანიფესტები გამოიყენება Norito როდესაც მანიფესი უნდა იყოს ხელმოწერილი ან ჰაშირებული. |
| დინამიური | Norito სტრიმინგში გამოყენებულია Norito მანიფესტები, სეგმენტების სათაურები, მართვის ჩარჩოები და შესაბამისობის მოწყობილობები. |
Norito არ არის ჭკვიანი ხელშეკრულების ენა. ეს არის დეტერმინისტური კონვერტი და კოდექი, რომელიც ატარებს ტრანზაქციებს, ხელშეკარგულებების მოწოდებებს, მანიფესტებსა და 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 | დეფოლტი | გამოიყენება კანონიკური ხელმოუწერელი varints დიაპაზონის სიგრძის პრეფიქსებისათვის. |
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-ბაიტიანი მცირე ენდიან
u64v1. Vec<u8>კოდირებულია როგორც[len_u64][raw-bytes]ერთ სიგრძის ნაცვლად ბაიტზე.- შეფუთული თანმიმდევრობები იყენებენ
(len + 1)მონოტონურიu64კომპენსაციებს, რასაც მოჰყვება კონკატენირებული ელემენტის სასარგებლო ტვირთები. - რუკაში ჩანაწერების დათვლის კოდირება ფიქსირებულია
u64და გამოიყენება დეტერმინისტური საკვანძო რეჟიმი.HashMapჩანაწერები განლაგებულია კოდირებამდე გასაღების მიხედვით;BTreeMapიყენებს მის ბუნებრივ რეჟიმს. BigIntიყენებს მცირე ზომის ორმაგი დანამატის ბაიტებს, რომელთა სიგრძეu32არის ბაიტი და 512-ბიტიანი საზღვერი.Numericკოდირებულია როგორც(mantissa, scale), სადაც mantissa ინახავს მთელი რიცხვის მნიშვნელობას და მასშტაბი ინახავს ფრაქციონალური ციფრების რაოდენობას.
ეს წესები მნიშვნელოვანია ხელმოწერებისა და ჰეშებისათვის. ორი SDKs რომელიც ქმნის ერთსა და იმავე ლოგიკურ ტრანზაქციას, უნდა წარმოადგინოს იგივე კანონიკური ბიტები.
სქემის ჰაშები
ტიპირებული Norito სასარგებლო დატვირთვები ატარებენ 16-ბაიტიან სქემას ჰეშს სათაურში. დეფოლტური ჰეში არის მიღებული სრულად კვალიფიციური ტიპის სახელისგან. ნაგებობები, რომლებიც ხელს უწყობენ სტრუქტურული სქემის ჰეშინგს, იღებენ ჰეშს კანონიკური სქემიდან.
ტიპირებული დეკოდერები უარყოფენ სქემის შეუსაბამობას. ეს იცავს კლიენტებს, რომ არასწორი Norito ჩარჩოს შეცდომით დეკოდირება არ მოხდეს და არის ჩვეულებრივი უკმარისობის რეჟიმი, როდესაც SDK მოწყობილობის ბუნდი დრიფტობს კვანძების მონაცემთა მოდელისგან.
შეკუმშვა და დაჩქარება
Norito მხარს უჭერს მკაფიო და ადაპტიური შეკუმშვას, ლოგიკური სასარგებლო ტვირთის შეცვლის გარეშე:
| მახასიათებელი | მიზანი |
|---|---|
to_bytes | კოდირებული სათაური, რომელსაც მოჰყვება არასაკომპრესირებული სასარგებლო ტვირთი. |
to_compressed_bytes | კოდირება Zstd და ჩანაწერი compression tag in the header. |
to_bytes_auto | გამოიყენეთ დეტერმინისტური ჰეურისტიკა, რათა გადაწყვიტოთ ღირს თუ არა კომპრესია. |
| CRC64 დაჩქარება | გამოიყენება პორტატული CRC64-XZ ყველგან, CLMUL on x86_64 ან PMULL on aarch64, როდესაც ხელმისაწვდომია |
| GPU CRC64 და შეკუმშვა | ნებაყოფლობითი მეტალის ან CUDA დამხმარე შეიძლება დააჩქაროს დიდი სასარგებლო ტვირთები, შემდეგ კი დაეცემა უკან CPU გზებზე. |
აპარატურის დაჩქარება არასოდეს იცვლის დეკოდირებულ შინაარსს. CRC და JSON აჩქარებლები უნდა შეესაბამებოდეს პორტაბულ გამომავალი ბიტ-ბიტს. Zstd ჩარჩოს ბაიტები შეიძლება განსხვავდებოდეს CPU და GPU კოდირებს შორის, მაგრამ დეკოდებული სასარგებლო ტვირთისა და Norito სათაურის მეტადატანი რჩება დეტერმინისტური მოწმობისთვის.
JSON მხარდაჭერა
Norito მოიცავს მშობლიურ JSON დასასრული წერტილების და საჭირო ინსტრუმენტების საფარი JSON დატოვების გარეშე Norito ტიპის სისტემა.
| JSON თვისება | გამოყენების შემთხვევა |
|---|---|
norito::json::{to_json, from_json} | დეტერმინისტური ტიპირებული JSON კოდი / დეკოდი. |
| ლამაზი და მწერლის დამხმარე | CLI გამონადენი, მოწყობილობები და სტრიმინგი std::io ინტეგრაცია. |
| DOM ღირებულებები | პროგრამული მანიპულაცია Norito -ის JSON ღირებულების მოდელის საშუალებით. |
| სწრაფი დაწერილი JSON | სტრუქტურული ზოლის საფუძველზე დეკოდირება/კოდირება ცხელი DTO გზებისათვის. |
| ნულოვანი ასლის მკითხველი | ტოქნის სკანირება, რომელიც სესხებს სტრიკებს შესასვლელიდან, სადაც შესაძლებელია. |
| სტადიის პირველი აჩქარებლები | სტრუქტურული ინდექსირება 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 როდესაც predicate შეესაბამება, ხოლო შენარჩუნების დეტერმინისტური დეკოდირების დეფოლტები. |
დერივები ასევე გამოყოფენ კოდირებული სიგრძის მინიშნებებს და ზუსტი სიგრძის გამოთვლას, სადაც ეს შესაძლებელია. კოდერები იყენებენ ამ მინიშნებებს ბუფერების შესანახად და დამატებითი ასლების თავიდან ასაცილებლად.
კოლოფის მახასიათებელი ოჯახები
წყაროდან Iroha ან SDK კავშირების შექმნისას, Norito მახასიათებლები ირჩევს, რომელი დამხმარე და აჩქარებელი მოწყობილობაა ხელმისაწვდომი:
| ფუნქციების ოჯახი | რა საშუალებას აძლევს |
|---|---|
derive | რეექსპორტირებული პროცედურული მაკროები ბინარული, სქემა და JSON წარმოშობისთვის. |
compression | Zstd მხარდაჭერა სათაურის ჩარჩოების სასარგებლო ტვირთებისთვის. |
packed-seq | შეფუთული კოლექციის განლაგებები გამოყენებით offset ცხრილები. |
packed-struct | შეფუთული წარმოშობით წარმოქმნილი სტრუქტურის განლაგებები. |
compact-len | ვარინტის სიგრძის პრეფექციები. |
columnar | Norito სვეტის ბლოკები, ადაპტიური რიგის კოდეკები AoS/NCB და შანერის მძიმე გზებისთვის გატანილი ნახვები; შედის ჩვეულებრივ node-codec თვისებების ნაკრებში. |
strict-safe | კონვერტირება დეკოდი პანიკა შეცდომაში გზების სტრუქტურირებული შეცდომები. |
simd-accel | CPU დაჩქარება, სადაც შესაძლებელია, დეტერმინისტური გადაცემით. |
json | მშობლიური JSON პარსერი, მწერალი, DOM, ტიპირებული დერეფანები და სწრაფი გზები. |
json-std-io | მკითხველისა და მწერლის დამხმარეები ფენაზე JSON stack. |
metal-stage1, cuda-stage1 | ფულადი GPU JSON სტრუქტურული ინდექსის სათაურები. |
metal-stage2 | JSON სტრუქტურული მაისურის მეტა მონაცემების კლასიფიკაცია. |
metal-crc64, cuda-crc64 | ფულადი GPU CRC64 დამხმარეები დიდი სასარგებლო ტვირთებისთვის. |
gpu-compression | ვარიანტი მეტალის ან CUDA Zstd დაჩქარება დიდი სასარგებლო ტვირთებისათვის. |
stage1-validate | Debug-validiation, რომელიც შედარებს დაჩქარებული JSON სტრუქტურული ინდექსები სკალარული output. |
მახასიათებლების ხელმისაწვდომობა შეიძლება განსხვავდებოდეს 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 tag და სქემის შეუსაბამო.
Norito RPC ტრანსპორტი შეირჩევა ტრანსპორტის კონფიგურაციის საშუალებით. ოპერატორის დაშბორდებმა უნდა აკონტროლონ მოთხოვნის დაგვიანება, ჩავარდნები, აქტიური კავშირები, პასუხის ბიტები და torii_norito_decode_failures_total ცალკე JSON ტრაფიკიდან.
Norito გადაცემა
Norito დეტერმინისტური მიდგომა ვრცელდება მედიასაშუალებებზე და რეალურ დროში ტრანსპორტის ზედაპირებზე. მისი ძირითადი ნაწილებია:
| სტრიმინგის ფუნქცია | მიზანი |
|---|---|
| მანიფესტები | გამოაცხადეთ სეგმენტის ვალდებულებები, კონფიდენციალურობის მარშრუტები, შესაძლებლობები, კოდეკის პროფილი, დაშიფვრის ნაკრები და შინაარსის საკვანძო მეტა მონაცემები. |
| სეგმენტების სათაურები | ბინდ სეგმენტის ნომერი, ხანგრძლივობა, ნაწილის რაოდენობა, დრო, ენტროპიის რეჟიმი, აუდიო შემაჯამებელი და Merkle ფესვები. . |
| ნაწილის ვალდებულებები | ნება მიეცით მაყურებელს და რელეებს შეამოწმონ სასარგებლო ტვირთის ნაწილები მანიფესთან, სანამ სერვისს ან დეკოდირებას გააკეთებენ. |
| მართვის ჩარჩოები | ატარეთ ღია განცხადებები, უკუკავშირი, ძირითადი განახლებები და შესაძლებლობების მოლაპარაკება. |
| HPKE ძირითადი განახლებები | როტე საიდუმლოებები ტრანსპორტის გამოყენებით მოლაპარაკებული suite და მონოტონიურად მზარდი counter. |
| შესაძლებლობების შესახებ მოლაპარაკებები | ხსნის მხარდაჭერილი მახასიათებლების ბიტები, მონაცემთა გრამა ლიმიტები, უკუკავშირის კადენცია და კონფიდენციალურობის მოთხოვნები. |
| FEC და უკუკავშირი | გამოიყენება დეტერმინისტური მიმღები ანგარიშები და parity გადაწყვეტილებების დაკარგვის რეალურ დროში გზები. |
| შესაბამისობის ვექტორები | მრავალენოვანი ჩანართები ადასტურებენ SDKs ამავე მანიფესტების, სეგმენტებისა და ენტროპული ნაკადების დეკოდირებას. |
სტრიმინგის სპეციფიკური კოდექები და ენტროპული პროფილი განცალკევებულია Norito ტრანზაქციის/გამოკითხვის ფორმატიდან, მაგრამ მათი მანიფესტები და კონტროლის მონაცემები კვლავ იყენებენ Norito-ს, ასე რომ მარშრუტირება, ანგარიშსწორება, გათამაშება და აუდიტის მტკიცებულებები რეპროდუქციული რჩებიან.
საოპერაციო მიმართულებები
- SDK მშენებლები და წარმოქმნილი ბმულები ხელნაკეთი დამზადებული Norito ბიტების ნაცვლად.
- განიხილეთ სქემის შეუსაბამობა როგორც ვერსია ან მოწყობილობის პრობლემა, და არა როგორც გარდამავალი ქსელის უკმარისობა.
- არქივი
.nrt,.noritoდა მანიფესტური არტეფაქტები გათავისუფლების ან ინციდენტის ბუნდელში, რომელმაც ისინი გამოიწვია. - გამოიყენეთ Norito როგორც სიმართლის წყარო ხელმოწერილი, ჰაშირებული ან შეჩერებული მონაცემებისთვის. გამოიყენეთ პროექციები JSON დაშბორდებისა და სახელმძღვანელო ინსპექტირებისათვის.
- ახალი ტიპირებული Torii საბოლოო წერტილის დამატებისას, დოკუმენტაცია იმის შესახებ, მიიღებს თუ არა ის JSON, Norito ან ორივე და გამოაქვეყნეთ მხარდაჭერილი შინაარსის ტიპები
/openapi. - სანამ აჩქარებელი გააქტიურებთ, შეამოწმეთ პარიტეტის ტესტები სკალარული გამომუშავების წინააღმდეგ. თუ აჩქარო ვერ გამოვა, გამოიყენეთ დეტერმინისტური სკალარული ჩავარდნა. სასარგებლო დატვირთვის სემანტიკა უნდა დარჩეს უცვლელი.
დაკავშირებული გვერდები
- Torii საბოლოო წერტილები
- გენეზიის მითითება
- მონაცემთა მოდელის სქემა
- JavaScript / TypeScript SDK
- Python SDK
- Swift და iOS SDK