ノード

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

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

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

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

P2P コンポーネント

リポジトリ: Catapult Server

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

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

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

ノードレピュテーション

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

通信の試行を減らすために、ノードは先行する通信の結果を追跡します。

ノードがリモートピアに接続すると、最初のノードはリモートへの信頼を増やします。そうでなければ、ノードは失敗カウンタをインクリメントします。同様にノードは要求されたデータを処理した後に信頼カウンタを適宜更新します。

これらの相互作用からノードは到達したすべてのピアに 500 から 10000 の重みを割り当てます。

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

RocksDB

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

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

注釈

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

API コンポーネント

リポジトリ: Catapult REST

Catapult API の主な役割はデータを読みやすい形式で保存することです。各 API インスタンスは状態を保存するために MongoDB およびオプションで RocksDB を管理します。

このレイヤは REST コンポーネントから受け取った トランザクションのバリデーション を行います。さらに API は ZMQ を介してエラーをバイナリで投げます。

このコンポーネントは アグリゲートボンドトランザクション の連署名を集める役割も果たします。これらは完了となった場合にのみ、P2P ノードにプッシュされます。

API コンポーネントは複数の P2P ノードに接続できますが、最低でも1つと繋がっていなければなりません。

MongoDB

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

APIは次の場合にMongoDBを更新します:

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

注釈

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

ZMQ

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

REST コンポーネント

リポジトリ: Catapult REST

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

各 REST コンポーネントは1つの API インスタンスに接続し、ソケットを使用して新しいトランザクションを送信します。

ガイド

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