Symbol ブロックチェーンプラットフォームは ノードのネットワーク によって構築されています。これらのノードはスマートアセットのトランザクションを実行、検索し、速やかにブロックチェーン台帳へ記録する、強力で、安定した、安全なプラットフォームを提供します。
4層アーキテクチャ により、開発者に他の層への影響を避けたアップデートを可能にし、セキュリティを向上させることができます。
リポジトリ: Catapult Client
Peer ノードは、単一のエンティティを排除してもシャットダウンできない、堅牢なネットワークであるブロックチェーンのバックボーンを構成します。ノードの役割は トランザクション と ブロック を検証すること、コンセンサスアルゴリズムの実行、新しいブロックの生成、ネットワークへの変更の伝播を実行することです。
API ノードが新しいトランザクションを P2P ネットワークにプッシュすると、それらは ブロックに含まれる かまたは廃棄されます。ノードはブロックが処理された後にそれを保存します:
各ブロックのバイナリはフラットなファイルとしてディスクに記録されます。
更新されたチェーンの状態はメモリまたは RocksDB にあります。(設定可能)
Peer ノードは RocksDB へチェーンの状態を保存します。このキャッシュされたデータ構造はシリアライズされ、対応するキーに値として保存されます。例えば、データベース上のある列は公開鍵をアドレスにマップします。他には、対応するアドレスをキーの値とした、アカウント状態のエントリです。
RocksDB を使用するよりも状態をメモリに保存しておくことのほうがより高速になります。しかし状態の情報を RocksDB に保存しておくことで、ネットワークのノードが必要とするメモリを少なくできます。
注釈
RocksDB 上の状態を保持することは、大量のアカウントが存在するネットワークにおいて都合が良いです。
パブリックネットワークでは誰でもノードを実行できます。これらのノードの中には無効な情報を共有したり、ネットワークを妨害しようとするものがあります。
誤解の機会を減らすために、ノードは先行する通信の結果を追跡します。P2P 機能を持つすべてのノードはそれが対話した他のすべての Peer ノードについて成功および失敗カウンタを保持します。
ノードは要求されたデータの処理をした後に、それに応じてカウンタを更新します。ノードがリモートピアへの接続に成功すると、最初にリモートピアに対しての成功カウンタをインクリメントします。通信の試行が失敗した場合、ノードはリモートピアの失敗カウンタを増やします。同様にノードは共有データの処理後にピアカウンタを適宜更新します。
これらのスコアから推定して、ノードは到達したすべてのピアに500〜10000の重みを割り当てます。
データを読み取るリモートノードを選択する確率はその重みに比例します。4回のノード選択ごとに条件が変更され Sybil attacks が防止されます。
リポジトリ: Catapult Client
API ノードの主な役割は、データを MongoDB に読み取り可能な形式で保存することです。 catapult-client ソフトウェアを使用すると、スタンドアロン API ノードまたは Peer 機能 (Dual) を構成できます。
データを MongoDB に直接書き込む代わりに、ノードはそれを spool
と呼ばれるファイルベースのキューに書き込みます。ブローカーサービスはスプールからのデータを消費し、それに応じて MongoDB を更新します。ブロックが処理されると、ブローカーサービスは ZMQ を使用して Catapult REST インスタンスへの変更を通知します。
API ノードは アグリゲートボンドトランザクション の連署名を集める役割も果たし、それが完成したときにだけ処理されます。
MongoDB はブロック、トランザクションとチェーン状態をハイパフォーマンスの実現のために保存します。
次の場合にブローカーサービスはリンクした MongoDB を更新します:
新しいブロック/ブロックの束の処理が終了します。
新しい未承認トランザクションの処理を完了します。
注釈
MongoDB は外部からアクセスされるべきではありません。
ZeroMQ はリアルタイムの購読を可能にする非同期メッセージングライブラリです。API ノードから ZMQ エンドポイントに通知を転送し、それを Catapult REST が購読します。これは REST WebSocket に代わるもので、パフォーマンスが重要な場合に使用することを目的としています。
リポジトリ: Catapult REST
Catapult REST ゲートウェイは JSON API クライアントリクエストを処理します。ゲートウェイは MongoDB から読み取り、レスポンスをフォーマットして、それをクライアントに返却します。このコンポーネントは WebSockets でクライアントにイベントを返却する役割も果たします。
各 REST ゲートウェイは1つの API インスタンスに接続して、クライアントサイドからトリガーされた新しいトランザクション要求を送信し、ソケットを使用してリアルタイムで更新を受信します。