(Jami)マニュアル:Jami 分散型ネットワーク

Categories
< Back
You are here:
Print

(Jami)マニュアル:Jami 分散型ネットワーク

接続性

Jamiはdistributed network分散型ネットワークに依存しており、フェデレーションネットワークと比較して複数の利点がある:

  • 障害発生時点がない、
  • 検閲に対してより耐性がある、
  • ユーザー以外のものに依存しない、
  • ノード間の信頼は必要ない。

Network-topo

ネットワー概念図

このネットワークは、分散ハッシュテーブルDistributed Hash Table(DHT)を形成している。[訳注:DHTについてのWiki(日本語)の解説]

分散通信システムの核となる問題はピアコネクティビティであるが、Jamiは2つの要素でそれを実現している:

  • DHT上で暗号化されたアナウンスメントを行う
  • NAT hole punchingのための標準プロトコルを使用する[訳注、NAT hole punchingについては、Wiki参照]

Jamiは、2つの異なる分散ネットワーク上に構築されている:

  • 分散型接続の確立とメッセージ配信を提供するOpenDHT kademliaネットワーク「訳注:kademliaについてはWiki参照]
  • 名前登録はJamiNSブロックチェーンで行う

OpenDHTネットワーク

OpenDHTの詳細については、https://github.com/savoirfairelinux/opendht を参照。OpenDHTは、Jamiの接続性確立(ICEを使用)のための分散キーバリューデータストアとメッセージ配信を提供する。

OpenDHTネットワークは、すでにネットワークに接続されているノードについて知ることで、参加することができる。このノードは、ネットワーク上の他のノードに関する知識を共有することになる。

Jamiクライアントは、最初のセッションの後、ネットワークに再接続するために、永続的なノードキャッシュを使用する。設定可能な、既知の、安定した「ブートストラップ」ノードが、最初の接続やキャッシュされたノードが応答しない場合に使用される。

Jamiクライアントは現在、デフォルトの(設定可能な)ブートストラップノードとして bootstrap.jami.net:4222 を、ネットワークID 0(デフォルトの、公開OpenDHTネットワーク)を使用している。

OpenDHTネットワークに貢献する

すべてのJamiアカウントはOpenDHTノードを実行し、ネットワークに貢献し、Jamiのスケーリングを可能にする。

Jamiユーザーは、自分自身の安定したOpenDHTノードを実行し、それをJamiのブートストラップノードとして設定することで、完全な独立性を持つことができ、同時に、パブリックOpenDHTネットワークのすべてのユーザーの安定性、堅牢性、回復力の向上に貢献する。

スタンドアロンノードは、OpenDHTに含まれるdhtnodeユーティリティを使って実行できる。dhtnodeはデータを永続化せず、デフォルトのメモリ内ストレージ上限は8MiBである。

コミュニティが運営する安定したDHTノードは、所有者の要求に応じて、デフォルトの起動リストに追加される。これは、起動ノードの数が多いほど、より弾力的で独立したネットワークになるからだ。

JamiNSブロックチェーン

JamiNSブロックチェーンは実験的なもので、そのアーキテクチャは進化していくことが予想される。

Jamiクライアントは自らブロックチェーンノードを動かすのではなく、名前の登録と問い合わせにHTTPを使い、REST APIでJamiNSサーバーと通信する。これは、ブロックチェーンノードを動かすのに必要なリソースが、ほとんどのエンドユーザーにとって高すぎるためだ。

ネームサーバーはJamiのアカウントごとに設定することができ、Jamiクライアントを多かれ少なかれ集中した様々なユーザーディレクトリに接続することができる。

JamiNSブロックチェーンに貢献する

デフォルトのJamiの名前サービスは、Savoir-faire Linuxが提供するns.jami.netで、Ethereumのブロックチェーンノードに接続されている。その目的は、誰もが(そう望むなら)自分自身のブロックチェーンノードとHTTPサービスを実行し、いくつかのEtherをマイニングし、それをJamiに自分のユーザー名を登録するために必要な取引手数料を支払うために使うことができるようにすることにある。

Ethereum契約、ブロックチェーン生成ファイル、NodeJSモジュール(HTTPサーバー)のコードは、ここにある: 1

Jami Nodeを実行する

前提条件:
Jamiネットワークに参加する

Jamiネットワークに参加するプロセスは、通常のethereumネットワークに参加するプロセスと似ているが、データディレクトリを初期化するためにgenesisファイルが使用されるという違いがある。

  1. JamiのgenesisファイルをJami github repoからダウンロードする。
  2. Jamiブロックチェーンのデータを保存するためのディレクトリをコンピュータ上に作成する。

MacOSの例(/Users/username/jamichain)

Linuxの例(/home/username/jamichain)

Windowsの場合(C:¥Users/username¥jamichain)

   3 ./geth --datadir /home/username/jamichain init genes is.json 

を実行し、(2)で作成したディレクトリをgethで初期化する。

  4.あとは、以下のように必要なコマンドラインオプションを指定して、Jamiのブートノードの1つを指定してgethを起動すればよい:
geth --datadir=/home/username/jamichain --syncmode=full --networkid 1551 --bootnodes "enode://11ba6d3bfdc29a8afb24dcfcf9a08c8008005ead62756eadb363523c2ca8b819efbb264053db3d73949f1375bb3f03090f44cacfb88bade38bb6fc2cb3d890a5@173.231.120.228:30301" console

これで、Jamiのネットワークと同期しているコンソールが添付されたgethデーモンが起動する。

出典:https://docs.jami.net/user/jami-distributed-network.html

Table of Contents