Skip to content

Norito

Norito болып табылады Iroha қаноникалық сериалдастыру қабаты. Бұл теңгерімдері, SDKs, CLI құралдар, Torii, Kura, және пайда болған артефакттар дәл бірдей пайдалы жүктеме бойынша келісуі керек.

Norito деректер консенсус, қолтаңбалау, хештау, табандылық немесе SDK аралас өзара іс-қимыл қабілеттілігінің бөлігі болған кезде қолданылады. JSON аяқ нүктесі операторлар үшін адам оқи алатын проекцияны ұсынған жағдайда пайдаланылады.

Norito қай жерде пайда болады

Жер бетіNorito қалай пайдаланылады
Транзакциялар және сұрау салуларTorii арқылы жіберілген қол қойылған транзакциялар мен сұрау салулардың пайдалы жүктемелері Norito ретінде кодталады.
Жаратылысkagami genesis sign басталған кезде жүктемемен тең келетін қолтаңбаланған .nrt блоғын шығарады.
Torii жазылған жауаптарТіркелген бинарлық жауаптарды қолданатын соңғы нүктелер Accept: application/x-norito пайдаланады.
SDKsRust, 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. Байраҡтар орналасуын сипаттайды.
Схема hash16 байтКөтелмеген пайдалы жүктемелерден бас тарту үшін типтік декодерлер пайдаланатын типтік сәйкестік.
Жасу1 байт0 = None, 1 = Zstd. Белгісіз мәндер қабылданбады.
Пайдалы жүк ұзындығы8 байтҚаттырмалмаған пайдалы жүк ұзындығы u64 ретінде.
CRC648 байтCRC64-XZ жинақталмаған пайдалы жүктің тексеру сомасы.
Тулар1 байтҰяшықты ұзындығы, топталған реттілігі және топталған соққылар үшін орнату байрақтары.

Басты 40 байттан тұрады. Декодерлер магияны, нұсқаны, қолданатын флаг-масканы, пайдалы жүктеме ұзындығын, чеcksum және схема хэшін қайта құрудан бұрын талдап береді.

Ұйымдастыру желектері

Norito түпкілікті байтта орналасу таңдауларын сақтайды. Әдеттегі v1 көмекшілері компактты әр мәнге ұзындығы префикстер үшін COMPACT_LEN (0x02) шығарады. шақырушылар flags = 0x00 кодтау кезінде нақты тұрақты ендегі ұзындығының префикстері оқуға болады.

БайрақГексСтатусыНәтижесі
PACKED_SEQ0x01ҚолданыладыӨзгермелі өлшемі бар жинақтарды оффсет кестесі және сабақтас деректер блогымен кодтайды.
COMPACT_LEN0x02ӘдеттегісіҚұндылығы бойынша ұзындығы префикстер үшін каноникалық қолтаңбаланбаған бояулар қолданылады.
PACKED_STRUCT0x04ҚолданыладыҚұсбелгісі келтірілген ұңғымаларды жинақталған далалық жүк ретінде кодтау.
VARINT_OFFSETS0x08ҚалыптастырылғанV1-де қабылданбады; жинақталған секвенс орфостары тұрақты ендікте u64.
COMPACT_SEQ_LEN0x10ҚалыптастырылғанV1-де қабылданбады; жоғарғы деңгейдегі тізбек ұзындығының тақырыптары тұрақты ендікте u64.
FIELD_BITSET0x20Құжаттармен қамтамасыз етіледіТопталған строктар үшін біттер жиынтығын қосады, сондықтан айқын өлшемі қажет еткен өрістерде ғана өлшемі префикстері болады. PACKED_STRUCT және COMPACT_LEN талап етеді.

Флагтар айқын. Декодерлер пайдалы жүктеменің пішінінен, кіші нұсқадан немесе эвристикадан орналасуын шығара алмайды. Беймәлім немесе жарамсыз комбинациялар қабылданбайды, сондықтан барлық теңгерімдері пайдалы жүктемені бірдей түсіндіруге болады.

Кодтау ережесі

Norito Iroha деректер үлгісінде көрсетілген ортақ дерек нысандары үшін детерминистік орналасуларды пайдаланады:

  • Сызықтар [len][utf8-bytes]; рұқсат етілген кезде len COMPACT_LEN дегенді жалғастырады.
  • Егер COMPACT_LEN орнатылса, әр мәнге дейінгі ұзындығы компакт-варинтті пайдаланады.
  • Егер COMPACT_LEN жоқ болса, бір мәндік ұзындығы 8 байттан тұратын шағын енді u64 болады.
  • Тізбе ұзындығының бағандары v1-де 8-байттан аз енді u64 орнатылған.
  • 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_bytesZstd көмегімен кодтаңыз және басылым тегін жазу.
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 құнының үлгісі арқылы бағдарламалық манипуляция.
Тез жазатын JSONDTO ыстық жолдар үшін конструкциялық таспаға негізделген декод/код.
Нөл көшірме оқырманыМүмкіндігінше кірістен жиектерді қарыз алатын белгілерді сканерлеу.
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 түсімдер үшін процессуалдық макролар.
compressionZstd басқармалы кадрлы пайдалы жүктемелер үшін қолдау.
packed-seqОффсет кестелерін қолдана отырып, жинақталған орналасулар.
packed-structҚұрылымның жинақталған, дериватордан жасалған орналасуы.
compact-lenVarint ұзындығы бойынша бағалар.
columnarNorito Баған блоктары, бейімделуші AoS/NCB жол кодектері және сканерлеуге арналған ауыр бағыттар үшін қарыз алған көріністер; әдеттегі node-codec функциялар жиынтығында.
strict-safeЖарамсыз жолдардағы паникаларды құрылымдалған қателерге айналдырады.
simd-accelCPU жылдамдату, егер ол мүмкін болса, детерминистік керісінше.
jsonТүпнұсқа JSON зерттегіш, жазушы, DOM, түрлендірілген түзілімдер және жылдам жолдар.
json-std-ioJSON қапшығына қабатталған оқушылар мен жазушылар көмекшісі.
metal-stage1, cuda-stage1Функционалды GPU JSON құрылымдық-индекстік арқиялар.
metal-stage2JSON құрылымдық таспасы үшін ерікті металл метамәдени деректерді жіктеу.
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 түрленіп қабылданған немесе қайтарылған кезде осы бағандарды қолдану:

http
Content-Type: application/x-norito
Accept: application/x-norito

Егер соңғы нүкте екі бейнелеуді қолдаса, клиенттер нақты артықшылықтар тізімін жібере алады:

http
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 деген бөлімде қолданатын мазмұн түрлерін көрсету.
  • Уақытша жылдамдатушы іске қосылғанға дейін, масштабтық шығысқа қарсы паритеттік тестілеуді орындаңыз. Егер жеделдетуші сәтсіздікке ұшыраса, детерминистік масштабты қайта құруды қолданыңыз. Пайдалы жүктеме семантикасы өзгермеуі керек.

Өскемендік сілтемелер