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.フラッグはレイアウトを記述します.
スケマハッシュ16バイト予期せぬ役に立たない負荷を拒絶するために,入力されたデコーダーによって使用されるタイプアイデンティティ.
圧縮1バイト0 = None, 1 = Zstd.未知の値が拒否されます.
役に立たない負荷長さ8バイト圧縮されていない用荷の長さは小エディアン u64.
CRC648バイトCRC64-XZ 圧縮されていない有用荷のチェックサム.
1バイトコンパクト長さのレイアウトフラッグ,包装されたシーケンス,包装したストライク.

ヘッダは40バイトです.デコダーは,入力した値を再構築する前に魔法,バージョン,サポートされたフラッグマスク,ペイロード長さ,チェックサム,およびスケーマハッシュを検証します.

レイアウトフラグ

Norito は最終ヘッダーバイトでレイアウト選択を保存します.デフォルト v1 ヘルパーがコンパクトの値単位長前列に COMPACT_LEN (0x02) を発信する.呼び出し者が flags = 0x00 でコードするとき,明示的な固定幅長前列は読み取れるままである.

ハックス状況影響
PACKED_SEQ0x01支援されたオフセットテーブルの加わり,隣接するデータブロックを持つ変形サイズコレクションをコードします.
COMPACT_LEN0x02デフォルト値単位長さのプレフィクスのために,加定式未署名のバリントを使用します.
PACKED_STRUCT0x04支援されたコードで生成された structsは,包装されたフィールド用荷物として.
VARINT_OFFSETS0x08予約されたV1 で拒否される. 詰め込み配列のオフセットは固定幅 u64.
COMPACT_SEQ_LEN0x10予約されたV1 で拒否される.最高レベルのシーケンスの長さのヘッダは固定幅 u64.
FIELD_BITSET0x20要求でサポートされるPACKED_STRUCTCOMPACT_LEN を要求する. 詳細なサイズが必要とするフィールドのみがサイズプレフィックスを持ちます.

フラグは明瞭である.デコッダーは,ペイロード形やバージョン・マイナー,またはヒューリスティックからレイアウトを推論しない.未知または無効な組み合わせが拒否されるため,すべての同級者はペイロードを同じ方法で解釈する.

暗号化規則

Norito は, Iroha データモデルに表示されている一般的なデータ形態の決定的なレイアウトを使用します.

  • 文字列は [len][utf8-bytes]; len が有効である場合, COMPACT_LEN を次にする.
  • COMPACT_LENが設定された場合,毎値の長さはコンパクトバリントを使用します.
  • COMPACT_LEN が存在しない場合,個値の長さは8バイトの小エンディアン u64 です.
  • 序列長さのヘッダは,v1で8バイトの小さなエンディアン u64 を固定する.
  • Vec<u8>は,バイトごとに1つの長さの代わりに, [len_u64][raw-bytes]としてコードされます.
  • 梱包されたシーケンスでは (len + 1) モノトニック u64 オフセットが用いられ,その後はコンチェンジ化された要素の役に立たない負荷が付いている.
  • マップは,固定 u64 でエントリーカウントをコードし,決定的なキー順を使用します. HashMap エントリーは,コーディング前に鍵によって分類されます. BTreeMap は自然順を使用しています.
  • BigInt は, u32 バイト長さと512 ビットのキャップを持つ小さなエンディアン2の補充バイトを使用します.
  • Numeric(mantissa, scale) として暗号化され,マントissaは整数値を保存し,スケールは分数の数字を保存する.

この規則は署名やハッシュに当てはまる.同じ論理的なトランザクションを構成する2つの SDKs は,同一のカノニカル・バイトを生成しなければならない.

スケマ・ハッシュ

Typed Norito payloads は,ヘッダーに16バイトのスケーマハッシュを載せています.デフォルトハッシュは完全に資格のあるタイプ名から派生されています.構造スキーマハッシュを可能にするビルドは,代わりにカノニカルスケーマからハッシュを引き出します.

タイプ式解码器はスケーマ不一致を拒絶します.これは,クライアントが誤ったタイプとして有効な Norito フレームを無意に解読するのを防ぐため,ノードデータモデルから SDK フィクションバンドルが動いている場合,通常の故障モードである.

圧縮と加速

Norito は,論理的な有用荷を変更することなく,明示的で適応性のある圧縮をサポートする.

特徴目的
to_bytesヘッダをエンコードし,その後は非圧縮された用荷です.
to_compressed_bytesZstd でエンコードし,ヘッダーに圧縮タグを記録します.
to_bytes_auto圧縮が価値あるかどうかを決定するために デターミニスト・ヒューリスティックを適用します.
CRC64 加速どこにでもポータブル CRC64-XZ を使用し,利用可能な場合,x86_64 で CLMUL または aarch64 で PMULL を使用します.
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 経路の解読/コード.
ゼロコピーのリーダー可能な限り入力から文字列を借りるトークンスキャン.
ステージ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 = "...")]JSON からフィールドを削除し,デターミナティクス解読デフォルトを維持する.

Derives は,可能な限りコードされた長さのヒントと正確な長さの計算を暴露する.エンコーダーはそれらのヒントを使用してバッファーを予約し,追加コピーを避ける.

箱 の 特徴 家族

源から Iroha または SDK 結合を構築する際に, Norito の機能は,どのヘルパーや加速器が利用できるかを選択します.

特徴ファミリー何が可能になるのか
deriveバイナリー,スキーマ,および JSON 衍生品のための再輸出された手続きマクロ.
compressionZstd ヘッダーフレーム付きの役に立たない負荷に対応する
packed-seqオフセットテーブルを使用した集合レイアウトが詰め込まれています.
packed-struct包装された衍生生成構造のレイアウト
compact-lenVarint の値単位長さの前置詞
columnarNorito コラムブロック,適応性のある AoS/NCB 行コデックおよびスキャンの重度の経路のための借りられたビュー; デフォルト node-codec機能セットに含まれます.
strict-safe誤った経路のパニックを構造上のエラーに変換します.
simd-accelCPU 加速が利用可能であれば,決定的な落後で.
jsonJSON ネイティブ解析器,ライター, 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 とリリースプロフィールの間には異なる可能性があります.ワイヤーフォーマットは,ローカルビルドフラグではなくヘッダーとスケーマによって支配されます.

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 でサポートされているコンテンツタイプを公開します.
  • 加速器を有効にする前に,スケーラー出力に対して対等性テストを実行します.加速器が失敗した場合,決定的なスケーラバックを使用してください.有用な負荷セマニックは変わらない必要があります.

上流参照