Norito
Norito болып табылады Iroha қаноникалық сериалдастыру қабаты. Бұл теңгерімдері, SDKs, CLI құралдар, Torii, Kura, және пайда болған артефакттар дәл бірдей пайдалы жүктеме бойынша келісуі керек.
Norito деректер консенсус, қолтаңбалау, хештау, табандылық немесе SDK аралас өзара іс-қимыл қабілеттілігінің бөлігі болған кезде қолданылады. JSON аяқ нүктесі операторлар үшін адам оқи алатын проекцияны ұсынған жағдайда пайдаланылады.
Norito қай жерде пайда болады
| Жер беті | Norito қалай пайдаланылады |
|---|---|
| Транзакциялар және сұрау салулар | Torii арқылы жіберілген қол қойылған транзакциялар мен сұрау салулардың пайдалы жүктемелері Norito ретінде кодталады. |
| Жаратылыс | kagami genesis sign басталған кезде жүктемемен тең келетін қолтаңбаланған .nrt блоғын шығарады. |
| Torii жазылған жауаптар | Тіркелген бинарлық жауаптарды қолданатын соңғы нүктелер Accept: application/x-norito пайдаланады. |
| SDKs | Rust, Python, JavaScript, Kotlin/Java, Swift және Android клиенттері қолмен жинақталған байттердің орнына Norito конструкторларын немесе байланыстарды пайдаланады. |
| Kura сақтау | Блок пайдалы жүктемелері, қалпына келтіру қосалқы вагондары, реестрлер және міндеттемелер белгілері Norito кадрланған деректер ретінде сақталады. |
| Манифестер | Nexus, деректердің қол жетімділігі, SoraFS, стриминг және қосымшаға бағдарланған манифесттерді пайдалану Norito манифесті қолтаңбалауға немесе хэшлеуге тиіс. |
| Стриминг . | Norito Стримингде Norito манифесттер, сегменттердің атаулары, басқару кадрлары және сәйкестік құрылғылары қолданылады. |
Norito ақылды келісім-шарт тілі емес, бұл - мәмілелерді, келісім-шартты шақыруларды, манифесттерді және API пайдалы жүктемелерін тасымалдайтын детерминистік конверт пен код.
Пайдалы жүк үлгісі
Әрбір сымдық немесе дискідегі Norito пайдалы жүктемеге шифрланған пайдалы жүктеме байттары еріп, бастауыш қоршалады. Бағасыз немесе жалаңаш пайдалы жүктемелер ішкі хэшингке, салыстырмалы белгілерге және көмекшіге арналған APIs болады, олар нәтижесін тасымалдаудан бұрын бірден басылымға орайды.
| Бапша өрісі | Өлшемі | Мақсаты |
|---|---|---|
| Магиялық | 4 байт | ASCII NRT0, Norito емес деректерді ертерек бас тарту үшін пайдаланылады. |
| Майор | 1 байт | Негізгі нұсқаны форматтау. Ағымдағы пайдалы жүктемелер 0 пайдаланады. |
| Кішкентай | 1 байт | V1 үшін декодтау нұсқасы. Қазіргі мән 0x00. Байраҡтар орналасуын сипаттайды. |
| Схема hash | 16 байт | Көтелмеген пайдалы жүктемелерден бас тарту үшін типтік декодерлер пайдаланатын типтік сәйкестік. |
| Жасу | 1 байт | 0 = None, 1 = Zstd. Белгісіз мәндер қабылданбады. |
| Пайдалы жүк ұзындығы | 8 байт | Қаттырмалмаған пайдалы жүк ұзындығы u64 ретінде. |
| CRC64 | 8 байт | CRC64-XZ жинақталмаған пайдалы жүктің тексеру сомасы. |
| Тулар | 1 байт | Ұяшықты ұзындығы, топталған реттілігі және топталған соққылар үшін орнату байрақтары. |
Басты 40 байттан тұрады. Декодерлер магияны, нұсқаны, қолданатын флаг-масканы, пайдалы жүктеме ұзындығын, чеcksum және схема хэшін қайта құрудан бұрын талдап береді.
Ұйымдастыру желектері
Norito түпкілікті байтта орналасу таңдауларын сақтайды. Әдеттегі v1 көмекшілері компактты әр мәнге ұзындығы префикстер үшін COMPACT_LEN (0x02) шығарады. шақырушылар flags = 0x00 кодтау кезінде нақты тұрақты ендегі ұзындығының префикстері оқуға болады.
| Байрақ | Гекс | Статусы | Нәтижесі |
|---|---|---|---|
PACKED_SEQ | 0x01 | Қолданылады | Өзгермелі өлшемі бар жинақтарды оффсет кестесі және сабақтас деректер блогымен кодтайды. |
COMPACT_LEN | 0x02 | Әдеттегісі | Құндылығы бойынша ұзындығы префикстер үшін каноникалық қолтаңбаланбаған бояулар қолданылады. |
PACKED_STRUCT | 0x04 | Қолданылады | Құсбелгісі келтірілген ұңғымаларды жинақталған далалық жүк ретінде кодтау. |
VARINT_OFFSETS | 0x08 | Қалыптастырылған | V1-де қабылданбады; жинақталған секвенс орфостары тұрақты ендікте u64. |
COMPACT_SEQ_LEN | 0x10 | Қалыптастырылған | V1-де қабылданбады; жоғарғы деңгейдегі тізбек ұзындығының тақырыптары тұрақты ендікте u64. |
FIELD_BITSET | 0x20 | Құжаттармен қамтамасыз етіледі | Топталған строктар үшін біттер жиынтығын қосады, сондықтан айқын өлшемі қажет еткен өрістерде ғана өлшемі префикстері болады. PACKED_STRUCT және COMPACT_LEN талап етеді. |
Флагтар айқын. Декодерлер пайдалы жүктеменің пішінінен, кіші нұсқадан немесе эвристикадан орналасуын шығара алмайды. Беймәлім немесе жарамсыз комбинациялар қабылданбайды, сондықтан барлық теңгерімдері пайдалы жүктемені бірдей түсіндіруге болады.
Кодтау ережесі
Norito Iroha деректер үлгісінде көрсетілген ортақ дерек нысандары үшін детерминистік орналасуларды пайдаланады:
- Сызықтар
[len][utf8-bytes]; рұқсат етілген кездеlenCOMPACT_LENдегенді жалғастырады. - Егер
COMPACT_LENорнатылса, әр мәнге дейінгі ұзындығы компакт-варинтті пайдаланады. - Егер
COMPACT_LENжоқ болса, бір мәндік ұзындығы 8 байттан тұратын шағын ендіu64болады. - Тізбе ұзындығының бағандары v1-де 8-байттан аз енді
u64орнатылған. Vec<u8>байтқа бір ұзындықтың орнына[len_u64][raw-bytes]деп кодталады.- Жүктелген реттіліктер
(len + 1)монотондыu64ауытқуларды пайдаланады, содан кейін қосылған элементтің пайдалы жүктемелері болады. - Карталар
u64белгісімен кіріс сандарын кодтайды және детерминистік кілттің ретін қолданады.HashMapкірістері кодтаудан бұрын кілті бойынша сұрыпталады;BTreeMapөзінің табиғи ретін пайдаланады. BigIntu32байт ұзындығы мен 512-битті шапкасы бар кішкентай эндиан екісі толықтырғыш байттарды пайдаланады.Numeric(mantissa, scale)ретінде кодталады, мұнда mantissa бүтін санды, ал масштаб бөлшек сандардың санын сақтайды.
Бұл ережелер қолтаңбалар мен хештар үшін маңызды. Бір логикалық транзакцияны құрайтын екі SDKs бірдей каноникалық байттарды шығару керек.
Схемалық шешелер
Norito типтегі пайдалы жүктемелер бағаншада 16 байттан тұратын схема хэшін алады. Әдеттегі хэш толық білікті типтік атаудан шығарылады. Құрылымдар құрылымдық схеманың хэшін жүзеге асырады, ол тек каноникалық схеманан шығарылады.
Типті декодерлер схемалық сәйкессіздіктерді бас тартады. Бұл клиенттерді дұрыс емес типте жарамды Norito кадрды қате түрде декодтаудан қорғайды және SDK фиксирлік топтамасы түйін дерек үлгісінен ауысқан кезде әдеттегі сәтсіздік режимі болып табылады.
Жасу және жылдамдату
Norito логикалық пайдалы жүктемені өзгертпей, айқын және бейімделуші сығуды қолданады:
| Белгісі | Мақсаты |
|---|---|
to_bytes | Басымды шифрлау, содан кейін жинақталмаған пайдалы жүктеме. |
to_compressed_bytes | Zstd көмегімен кодтаңыз және басылым тегін жазу. |
to_bytes_auto | Қысықтаудың пайдасын анықтау үшін детерминистік эвристикалық әдістерді қолдану. |
| CRC64 жылдамдату | Барлық жерде портативті CRC64-XZ пайдаланады, егер CLMUL x86_64 немесе aarch64 (aarch64) -де PMULL |
| GPU CRC64 және қысым | Функционалды металл немесе CUDA көмекшілері үлкен пайдалы жүктерді жылдамдатып, кейіннен CPU жолдарына қайта түседі. |
Жабдықтың жеделдетуі ешқашан шифрланбаған мазмұнды өзгертпейді. CRC және JSON жылдамдатушылар портативті шығыс біті-битімен сәйкес келуі керек. Zstd кадр байттары CPU мен GPU кодтаушылардың арасындағы айырмашылықтарға ие болуы мүмкін, бірақ шифрланған пайдалы жүктеме және Norito басқыштағы метамәдени деректер растау үшін анықтамалы болып табылады.
JSON Қолдау
Norito Norito типтік жүйені тастамай-ақ, JSON қажет болатын соңғы нүктелер мен құрал-саймандар үшін түпкiлiктi JSON ұяшығын қамтиды.
| JSON белгісі | Пайдалану жағдайы |
|---|---|
norito::json::{to_json, from_json} | Детерминистік JSON типті код/декод. |
| Суретші және жазушы көмекшілер | CLI шығыс, құрылғылар және ағымды std::io интеграциясы. |
| DOM мәндері | Norito JSON құнының үлгісі арқылы бағдарламалық манипуляция. |
| Тез жазатын JSON | DTO ыстық жолдар үшін конструкциялық таспаға негізделген декод/код. |
| Нөл көшірме оқырманы | Мүмкіндігінше кірістен жиектерді қарыз алатын белгілерді сканерлеу. |
| 1-кезең жылдамдатушы | 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 = "...")] | Детерминистикалық декодтау әдеттілігін сақтай отырып, predicate сәйкес келген кезде JSON өрістерін алып тастайды. |
Деривалар сондай-ақ мүмкіндігінше кодталған ұзындықтың сілтемелерін және нақты ұзындығының есептеулерін көрсетеді.
Қапшықтың ерекшелігі отбасылар
Iroha немесе SDK байлауларын қайдан құрастырғанда, Norito функциялары қандай көмекшілер мен жылдамдатушыларды таңдап алады:
| Белгілік отбасы | Ол нені жүзеге асырады ? |
|---|---|
derive | Қайта экспортталған бинарлық, схемалық және JSON түсімдер үшін процессуалдық макролар. |
compression | Zstd басқармалы кадрлы пайдалы жүктемелер үшін қолдау. |
packed-seq | Оффсет кестелерін қолдана отырып, жинақталған орналасулар. |
packed-struct | Құрылымның жинақталған, дериватордан жасалған орналасуы. |
compact-len | Varint ұзындығы бойынша бағалар. |
columnar | Norito Баған блоктары, бейімделуші AoS/NCB жол кодектері және сканерлеуге арналған ауыр бағыттар үшін қарыз алған көріністер; әдеттегі node-codec функциялар жиынтығында. |
strict-safe | Жарамсыз жолдардағы паникаларды құрылымдалған қателерге айналдырады. |
simd-accel | CPU жылдамдату, егер ол мүмкін болса, детерминистік керісінше. |
json | Түпнұсқа JSON зерттегіш, жазушы, DOM, түрлендірілген түзілімдер және жылдам жолдар. |
json-std-io | JSON қапшығына қабатталған оқушылар мен жазушылар көмекшісі. |
metal-stage1, cuda-stage1 | Функционалды GPU JSON құрылымдық-индекстік арқиялар. |
metal-stage2 | JSON құрылымдық таспасы үшін ерікті металл метамәдени деректерді жіктеу. |
metal-crc64, cuda-crc64 | Үлкен жүк тасымалдауға арналған ерікті GPU CRC64 көмекшілері. |
gpu-compression | Үлкен жүк тасымалдауға арналған металл немесе CUDA Zstd жеделдету. |
stage1-validate | Ашықтырылған JSON құрылымдық индекстерді масштабтық шығысқа салыстыратын дебобелгілік куәландыру. |
SDKs және релиз профильдері арасында мүмкіндіктердің қол жетімділігі әртүрлі болуы мүмкін. Сым пішімі жергілікті build байрақтарымен емес, баған мен схемамен реттеледі.
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 тегі және схемалық сәйкессіздік жатады.
Norito RPC тасымалдауды көлік конфигурациясы арқылы таңдауға болады. Операторлық тақталар сұрау салудың кешіктірілуін, сәтсіздіктерді, белсенді қосылымдарды, жауап байттарын және torii_norito_decode_failures_total қозғалысын JSON трафиктен бөлек бақылауы керек.
Norito Стриминг
Norito Стриминг бұқаралық ақпарат құралдары мен нақты уақыт тасымалы беттеріне бірдей детерминистік тәсілмен қолданылады. Оның негізгі бөлшектері:
| Желілік | Мақсаты |
|---|---|
| Манифестер | Сегмент міндеттемелері, құпиялылық бағыттары, мүмкіндіктері, кодек профилі, шифрлау жиынтығы және мазмұн кілті метамәдени деректерін жариялаңыз. |
| Бөлшек бағандары | Бинд сегмент нөмірі, ұзақтығы, бөлшектер саны, уақыт, энтропия режимі, аудио жиынтығы және Меркл тамырлары. |
| Бөлшек міндеттемелері | Көрінетіндер мен релелер қызмет көрсетуден немесе шифрлаудан бұрын пайдалы жүктеме бөліктерін манифестке салыстырып тексеруге мүмкіндік береді. |
| Бақылау кадрлары | Жариялаулар, пікірлер, негізгі жаңартулар және мүмкіндіктер туралы келіссөздер жүргізу. |
| HPKE негізгі жаңартулар | Транспорттық құпияларды келіссөздер жүргізілген жиынтықта және монотонды түрде өсіп келе жатқан есептегіштерде айналдырыңыз. |
| Мүмкіндіктер бойынша келіссөздер | Қолданылатын функциялар біттері, деректі граммалар шегі, кері қайтарымдар циклы және құпиялылық талаптары қиылады. |
| FEC және кері байланыс | Қабылдаушының детерминистикалық есептерін және шығынды нақты уақыт жолы үшін паритет шешімдерін пайдаланады. |
| Сәйкестік векторлары | Тіл аралығындағы құрылғылар SDKs бірдей манифесттерді, сегменттерді және энтропия ағындарын шифрлауды дәлелдеді. |
Стримге арналған кодектер мен энтропия профильдері негізгі Norito транзакция/арыз форматынан бөлек, бірақ олардың манифесттері мен бақылау деректері әлі күнге дейін Norito пайдаланады, сондықтан маршрутизациялау, есеп айырысу, қайта қарау және аудит дәлелдемелері қалпына келтірілуі мүмкін.
Операциялық нұсқаулық
- Ең алдымен SDK Құрылысшы және қолмен жасалғаннан басқа өндірілген байлаулар Norito Байттар.
- Схемалық сәйкессіздікті өтпелі желі қатесі ретінде емес, нұсқа немесе орнату проблемасы ретінде қараңыз.
- Архив
.nrt,.noritoжәне оларды шығарған босату немесе оқиға топтамасындағы көрініс бұйымдары. - Пайдалану Norito қол қойылған, хэштелген немесе сақталған деректер үшін шындық көзі ретінде. JSON аспаптар мен қолмен тексерудің жобалаулары.
- Жаңа Torii типті аяқталу нүктесін қосқанда, оның JSON, Norito немесе екеуін де қабылдайтындығын құжаттандыру және
/openapiдеген бөлімде қолданатын мазмұн түрлерін көрсету. - Уақытша жылдамдатушы іске қосылғанға дейін, масштабтық шығысқа қарсы паритеттік тестілеуді орындаңыз. Егер жеделдетуші сәтсіздікке ұшыраса, детерминистік масштабты қайта құруды қолданыңыз. Пайдалы жүктеме семантикасы өзгермеуі керек.
Қосылған беттер
- Torii аяқтық нүктелері
- Жаратылыс сілтемесі
- Деректер моделі схемасы
- JavaScript /TypeScript SDK
- Python SDK
- Swift және iOS SDK