ノード

NEM ブロックチェーンプラットフォームはノードのネットワークによって構築されています。これらのノードはスマートアセットのトランザクションを実行、検索し、速やかにブロックチェーン台帳へ記録する、強力で、安定した、安全なプラットフォームを提供します。

../_images/four-layer-architecture.png

Catapult のパフォーマンス優位性: 4層アーキテクチャ

4層アーキテクチャにより、開発者に他の層への影響を避けたアップデートを可能にし、セキュリティを向上させることができます。

Peer ノード

リポジトリ: Catapult Server

../_images/peer-detail.png

Peer ノードコミュニケーション

Peer ノードは、単一のエンティティを排除してもシャットダウンできない、堅牢なネットワークであるブロックチェーンのバックボーンを構成します。ノードの役割は トランザクションブロック を検証すること、コンセンサスアルゴリズムの実行、新しいブロックの生成、ネットワークへの変更の伝播を実行することです。

API ノードが新しいトランザクションを P2P ネットワークにプッシュすると、それらは ブロックに含まれる かまたは廃棄されます。ノードはブロックが処理された後にそれを保存します:

  • 各ブロックのバイナリはフラットなファイルとしてディスクに記録されます。
  • 更新されたチェーンの状態はメモリまたは RocksDB にあります。(設定可能)

RocksDB

Peer ノードは RocksDB へチェーンの状態を保存します。このキャッシュされたデータ構造はシリアライズされ、対応するキーに値として保存されます。例えば、ある特定の列は公開鍵をアドレスにマップします。他には、対応するアドレスをキーの値とした、アカウント状態のエントリです。

RocksDB を使用するよりも状態をメモリに保存しておくことのほうがより高速になります。しかし状態の情報を RocksDB に保存しておくことで、ネットワークのノードが必要とするメモリを少なくできます。

注釈

RocksDB 上の状態を保持することは、大量のアカウントが存在するネットワークにおいて都合が良いです。

ノードレピュテーション

パブリックネットワークでは誰でもノードを実行できます。これらのノードの中には無効な情報を共有したり、ネットワークを妨害しようとするものがあります。

誤解の機会を減らすために、ノードは先行する通信の結果を追跡します。P2P 機能を持つすべてのノードはそれが対話した他のすべての Peer ノードについて成功および失敗カウンタを保持します。

ノードは要求されたデータの処理をした後に、それに応じてカウンタを更新します。ノードがリモートピアへの接続に成功すると、最初にリモートピアに対しての成功カウンタをインクリメントします。通信の試行が失敗した場合、ノードはリモートピアの失敗カウンタを増やします。同様にノードは共有データの処理後にピアカウンタを適宜更新します。

これらのスコアから推定して、ノードは到達したすべてのピアに500〜10000の重みを割り当てます。

データを読み取るリモートノードを選択する確率はその重みに比例します。4回のノード選択ごとに条件が変更され Sybil attacks が防止されます。ノードは重要度の高いピアを選択します。

API ノード

リポジトリ: Catapult Server

../_images/api-detail.png

API ノードコミュニケーション

Catapult サーバソフトウェアは Peer ノードを API ノードとして設定できます。API ノードの主たる役割は MongoDB にデータを読み取り可能な形式で格納することです。

データを MongoDB に直接書き込む代わりに、ノードはそれを spool と呼ばれるファイルベースのキューに書き込みます。ブローカーサービスはスプールからのデータを消費し、それに応じて MongoDB を更新します。ブロックが処理されると、ブローカーサービスは ZMQ を使用して Catapult REST インスタンスへの変更を通知します。

API ノードは アグリゲートボンドトランザクション の連署名を集める役割も果たし、それが完成したときにだけ処理されます。

MongoDB

MongoDB はブロック、トランザクションとチェーン状態をハイパフォーマンスの実現のために保存します。

次の場合にブローカーサービスはリンクした MongoDB を更新します:

  • 新しいブロック/ブロックの束の処理が終了します。
  • 新しい未承認トランザクションの処理を完了します。

注釈

MongoDB は外部からアクセスされるべきではありません。

ZMQ

ZeroMQ はリアルタイムの購読を可能にする非同期メッセージングライブラリです。API ノードから ZMQ エンドポイントに通知を転送し、それを Catapult REST が購読します。これは REST WebSocket に代わるもので、パフォーマンスが重要な場合に使用することを目的としています。

REST ノード

リポジトリ: Catapult REST

../_images/rest-detail.png

REST ノードコミュニケーション

Catapult REST ノードは JSON API クライアントリクエストを処理します。ノードは MongoDB から読み取り、レスポンスをフォーマットして、それをクライアントに返却します。このコンポーネントは WebSockets でクライアントにイベントを返却する役割も果たします。

各 REST ノードは1つの API インスタンスに接続して、クライアントサイドからトリガーされた新しいトランザクション要求を送信し、ソケットを使用してリアルタイムで更新を受信します。

ガイド

Catapult フルノードを学習と開発目的でデプロイする。