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.フラッグはレイアウトを記述します. |
| スケマハッシュ | 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 | デフォルト | 値単位長さのプレフィクスのために,加定式未署名のバリントを使用します. |
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です.- 序列長さのヘッダは,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_bytes | Zstd でエンコードし,ヘッダーに圧縮タグを記録します. |
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 衍生品のための再輸出された手続きマクロ. |
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 とリリースプロフィールの間には異なる可能性があります.ワイヤーフォーマットは,ローカルビルドフラグではなくヘッダーとスケーマによって支配されます.
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でサポートされているコンテンツタイプを公開します. - 加速器を有効にする前に,スケーラー出力に対して対等性テストを実行します.加速器が失敗した場合,決定的なスケーラバックを使用してください.有用な負荷セマニックは変わらない必要があります.