5 つの言語の一貫性の保ち方
- コミット前に、各言語のアクション一覧、ルート種別の注釈、バージョン番号を自動で突き合わせます。
- Python バインディングはスクリプトで Go から生成し、生成結果が手で書き換えられていないことを検査します。
- 暗号化に関わる形式(メールボックス、グループ、ファイルの認証情報、バックアップ、ノードディレクトリ)には共通のテストベクターがあり、Go、Dart、Python の 3 つでバイト単位に突き合わせます。
GProtocol は同一のプロトコル定義を 5 つの言語で維持しています。アクション定数、メッセージ構造、エラー key、バージョン番号です。Go が主たるソースで、他の言語はそれに 1 項目ずつ揃えています。
| 言語 | パッケージ名 | 内容 | 状態 |
|---|---|---|---|
| Go | gather-gprotocol/go | 定数、メッセージ構造、バージョン判定、署名対象テキストの組み立てなどの補助関数 | ノードで使用中 |
| Dart | gather_protocol | 定数と型(JSON シリアライズ付き) | アプリで使用中 |
| Java | top.gather.protocol | 定数と型 | 定義のみ |
| JavaScript | @gather-network/gather-protocol | 定数、型、メッセージのファクトリ関数 | 定義のみ |
| Python | gather_protocol | アクションと定数。Go 版から自動生成 | 定義のみ |
メールボックス、グループ、ファイルの認証情報、バックアップの 4 つの暗号化形式には、テストベクターの生成と検証に使う Python の参照実装も別にあります。各言語のプロトコルライブラリ自体には、暗号化、ネットワーク、クライアントの実装は含まれません。
プロトコル定義ライブラリとサードパーティ向け開発ドキュメントは、現時点では公開していません。公開計画が決まり次第、入手方法とドキュメントをこちらでお知らせします。