Kademliaの解説と実装 3

Kademliaの解説と実装 3

はじめに


今回はReact.jsを使ってブラウザで動作するKademliaのクライアントアプリを作成し、前回作成したKademliaのプログラムの動作確認を行います。

前回作成したプログラムをReactから利用しやすくするため、Typescriptで書き直したものがhttps://github.com/shinyoshiaki/kademlia-with-webrtc/tree/typescriptにアップロードされています。今回はこれを利用するので、動作確認を実際に行う場合はこれをダウンロードしてください。Typescriptはクラスの型定義に利用しただけなので、前回作成したプログラムと互換性があります。

本記事で作成するReact製のクライアントはhttps://github.com/shinyoshiaki/kademlia-client-reactにアップロードされています。

本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。

関連する記事

Kademliaの解説と実装 1
Kademliaの解説と実装 2

動作環境


・Node.js v10.x 
(nvm, nodebrewなどを使ってNode.jsのバージョンを設定してください)

・Yarn(https://yarnpkg.com/lang/ja/)

使用技術


今回使用する主なライブラリを以下に示します。

名前内容
kademlia-with-webrtc(#typescript)前回作成したKademliaのプログラムのTypescript版
React.jsブラウザ用のフロントエンドフレームワーク

実装の解説

プログラムの構成


以下の図のようにNode.js上で動作するポータルノードを経由してクライアント(ブラウザのタブ)同士でP2Pネットワークを構築していきます。(以下の図ではメッシュ状になっていますが、実際はKademliaのルールにしたがってP2Pネットワークを構築します)

ソースコードのファイル構成


Kademliaのクライアントアプリのソースコードのファイル構成を以下に示します。
.
├── App.js
├── components
│   ├── findvalueForm.js
│   ├── keyValueList.js
│   ├── nodeList.js
│   └── storeForm.js
├── index.js
└── node
    └── Node.js

アプリのページであるApp.jsとcomponents以下のコンポーネントから成るシンプルな構成です。node以下のNode.jsでKademliaのネットワークに接続します。クライアント側の解説を簡単に行います。

クライアントのコード解説


App.js

メインの画面です。Node.jsファイルを使ってポータルノードへの接続と各コンポーネントの制御を行います。
class App extends Component {
 constructor(props) {
   super(props);
   this.state = { kbuckets: undefined };
 
   //localhost:20000のポータルノードに接続
   this.node = new Node("localhost", "20000");
   const kad = this.node.kad;
   //ノードが追加された際のコールバック
   kad.callback.onAddPeer = data => {
     console.log({ data });
     this.setState({ kbuckets: kad.kbuckets });
   };
 }
 
 render() {
   return (
     
{/* ノードID */} {this.node.kad.nodeId} {/* Kbucketsの状態 */} {createNodeList(this.state.kbuckets)} {/* KademliaのStore */} {createStoreForm(this.node.kad)} {/* KademliaのFindvalue */} {createFindvalueForm(this.node.kad)} {/* KademliaのKeyValueList */} {createKeyValueList(this.node.kad)}
); } }

動作確認


では動作確認に入っていきます。まずポータルノードを立ち上げるためにhttps://github.com/shinyoshiaki/kademlia-with-webrtc/tree/typescriptのプロジェクトをダウンロードします。次に lib/cli ディレクトリに入ってsetup.jsを実行します。
// projectのダウンロード
$ git clone https://github.com/shinyoshiaki/kademlia-with-webrtc.git
 
// 必要なパッケージをインストールする
$ yarn
 
// ディレクトリ移動
$ cd lib/cli
 
// setup.jsを実行
kademlia-with-webrtc/lib/cli$ node setup.js

続けて表示される「my port」には20000と入力し、「ip address」と「port」は空欄にします。入力が終わるとポータルノードが立ち上がります。
? my port 20000
? ip address
? port
test:20000::
nodeid 7515d4292109b13f558797e4831c14e7f7937bf3
start kad 7515d4292109b13f558797e4831c14e7f7937bf3
{ responce:
   { peerlist: [Function],
     store: [Function],
     findvalue: [Function],
     keyValueList: [Function],
     id: [Function],
     help: [Function] } }

続いてクライアントの方を立ち上げます。https://github.com/shinyoshiaki/kademlia-client-reactからプロジェクトをダウンロードします。次にターミナルで「yarn start」と入力するとブラウザが立ち上がります。
(macOSでは「ネットワーク接続を許可しますか?」とのポップアップが出るので、「許可する」を選択してください)
$ git clone https://github.com/shinyoshiaki/kademlia-client-react.git
 
// yarnで必要パッケージをインストール
$ yarn
 
kademlia-client-react$ yarn start

上から順に、
・KademliaのノードIDの文字列
・Kbucketsの表(テーブル)
・Storeのフォーム
・FindValueのフォーム
・KademliaのKeyValueListの中身

が表示されます。

タブを複製すると、新しいノードが立ち上がります。複数のノードを立ち上げてみましょう。



kbucketsの表は左側が自分のノードIDとの距離、右側が接続しているノードのノードIDとなります。

Store機能の動作確認


次にStore機能の動作確認を行います。Storeのフォームに「test」と打ち込んで「Store」ボタンをクリックします。するとKademliaネットワーク内に「test」が保存されます。



クリックすると、「test」のkeyがボタン右側に表示されます。

FindValue機能の動作確認


次にFindValue機能の動作確認を行います。Findvalueのフォームにさきほどの「test」のキーを打ち込んで、ボタンをクリックします。



すると、Kademliaネットワーク内から入力したキーに対する値が右側に表示されます。今回は「test」に対応するキーを入力したので、「test」と表示されています。

まとめ


今回と前回の記事でKademliaの基本的な機能を実装と動作確認を行いました。Kademliaは様々な分散型のソフトウェアに応用されている非常に将来性のあるアルゴリズムだと考えられます。興味のある人は実際にKademliaを利用しているIPFSなどのソースコードを読んでみたりして勉強するのも良いのではないでしょうか?
     

免責事項

本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。

技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。

     

コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?

当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。

ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。

     
     

ブロックチェーン学習に最適の書籍の紹介

図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

ブロックチェーン イーサリアムへの入り口 第二版 (ブロックチェーン技術書籍)

本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)

KADEMLIAカテゴリの最新記事