実践IPFS入門
書籍情報
発売日 : 2023年11月08日
著者/編集 : ドン ティェンイー/ダイ ジャラェ/フゥァン ユーミン/菊池 将和
出版社 : 技術評論社
発行形態 : 単行本
ページ数 : 280p
書籍説明
内容紹介
IPFS(InterPlanetary File System)とは、Protocol Labsが開発を進めている分散型ファイルシステムです。耐障害性、負荷分散、耐改ざん性などの観点から、HTTPを置き換えて惑星間通信を可能にするという思想を基に開発が進められています。ところがIPFSは複数の通信レイヤで構成されており理解が難しいうえに、日本語のドキュメントが少ないため、英語でそれぞれを学ぶのは困難です。本書は、これらを日本語にまとめることで、5G時代を迎える日本の技術力向上に資することを目的としています。原著執筆者は、中国コミュニティで非常に影響力のある3人のIPFS/Filecoin支持者です。本書はProtocol Labsから高く評価され、強く推奨されています。
目次
■■■第1章 IPFSについて
■■1.1 IPFSの概要
■1.1.1 IPFSの概念と定義
■1.1.2 IPFSの起源
■■1.2 IPFSとブロックチェーンの関係
■1.2.1 ブロックチェーンの基礎
■1.2.2 ブロックチェーンの発展
■1.2.3 IPFSがブロックチェーンにもたらす変化とは
■1.2.4 Filecoin:IPFS技術に基づくブロックチェーンプロジェクト
■■1.3 IPFSの利点と価値
■1.3.1 IPFSの利点
■1.3.2 他のブロックチェーンストレージ技術との比較
■■1.4 IPFSの応用分野
■■1.5 本章のまとめ
■■■第2章 IPFSの基礎
■■2.1 分散ハッシュテーブル(DHT)
■2.1.1 Kademlia DHT
■2.1.2 Coral DSHT
■2.1.3 S/Kademlia DHT
■■2.2 ブロック交換プロトコル(BitTorrent)
■2.2.1 BitTorrentで使われる用語
■2.2.2 P2Pブロック交換プロトコル
■2.2.3 ブロッキング戦略
■■2.3 バージョン管理(Git)
■2.3.1 バージョン管理の種類
■2.3.2 スナップショットストリーム
■2.3.3 ローカル操作
■2.3.4 データ追加のみ
■2.3.5 整合性チェック
■2.3.6 作業領域と作業状態
■2.3.7 ブランチ(分岐)
■■2.4 自己検証ファイルシステム(SFS)
■2.4.1 SFSデザイン
■2.4.2 自己検証ファイルパス
■2.4.3 ユーザ認証
■2.4.4 キー失効メカニズム
■■2.5 Merkle TreeとMerkle DAG
■2.5.1 Merkle Tree
■2.5.2 Merkle DAG
■■2.6 本章のまとめ
■■■第3章 IPFSプロトコル・スタック
■■3.1 アイデンティティ層(Identity)
■■3.2 ネットワーク層(Network)
■■3.3 ルーティング層(Rouitng)
■■3.4 交換層(Exchange)
■3.4.1 BitSwapプロトコル
■3.4.2 BitSwap Credit
■3.4.3 BitSwap Strategy
■3.4.4 BitSwap Ledger
■■3.5 オブジェクト層(Objects)
■3.5.1 パス
■3.5.2 ローカルオブジェクト
■3.5.3 オブジェクトのピン留め
■3.5.4 オブジェクトの公開
■3.5.5 オブジェクトレベルの暗号化
■■3.6 ファイル層(Files)
■3.6.1 ファイルオブジェクト:blob
■3.6.2 ファイルオブジェクト:list
■3.6.3 ファイルオブジェクト:tree
■3.6.4 ファイルオブジェクト:commit
■3.6.5 バージョン管理
■3.6.6 ファイルシステムパス
■3.6.7 ファイルのリストとblobへの分割
■3.6.8 パスによる検索のパフォーマンス
■■3.7 ネーミング層(Naming)
■3.7.1 IPNS:ネーミングと可変ステータス
■3.7.2 自己検証ネーミング
■3.7.3 人にやさしいネーミング
■■3.8 本章のまとめ
■■■第4章 IPFSモジュール
■■4.1 Multiformats
■4.1.1 Multihash
■4.1.2 Multibase
■4.1.3 Multiaddress
■4.1.4 Multicodec
■4.1.5 Multistream
■4.1.6 Multigram
■■4.2 libp2p
■4.2.1 libp2pの機能
■4.2.2 libp2pのコア原則
■4.2.3 libp2pの用途
■■4.3 IPLD
■4.3.1 IPLDデータモデル
■4.3.2 コンテンツ識別子(CID)
■4.3.3 CIDデコーディング規則
■■4.4 本章のまとめ
■■■第5章 Filecoin
■■5.1 Filecoinプロジェクトの紹介
■5.1.1 Filecoinプロジェクトの起源
■5.1.2 Filecoinプロジェクトの価値
■5.1.3 Filecoinの価値交換市場
■5.1.4 インターネット使用の最適化
■■5.2 FilecoinとIPFSの関係
■■5.3 Filecoin経済システム
■5.3.1 Filecoinの配布と使用方法
■5.3.2 Filecoinマイナーの収益構造
■■5.4 Filecoin技術システムの概要
■5.4.1 Filecoinシステムの基本概念
■5.4.2 Filecoin取引市場の運営について
■5.4.3 Filecoinブロックチェーンのデータ構造
■5.4.4 Filecoinブロックチェーンの仕組み
■■5.5 分散ストレージネットワークプロトコル(DSN)
■5.5.1 Put、Get、Manage操作
■5.5.2 ビザンチン問題とストレージエラー
■5.5.3 DSNプロトコルにおける2種類の基本操作
■5.5.4 ストレージノード操作プロトコル
■5.5.5 検索ノード操作プロトコル
■5.5.6 ネットワーク操作プロトコル
■■5.6 Filecoin取引市場
■5.6.1 ストレージ市場
■5.6.2 検索市場
■■5.7 Filecoinブロックチェーンコンセンサスメカニズム
■5.7.1 コンセンサスメカニズムの概要
■5.7.2 コンセンサスメカニズムが解決すべき3つの課題
■■5.8 PoRepとPoSt
■5.8.1 ストレージ証明の6つの定義
■5.8.2 ストレージ証明のメンバー
■5.8.3 PoRep
■5.8.4 PoSt
■5.8.5 PoRepとPoStの実装
■■5.9 ネットワーク攻撃と防御
■5.9.1 シビル攻撃
■5.9.2 外部ソース攻撃
■5.9.3 生成攻撃
■■5.10 その他の機能
■5.10.1 Filecoinスマートコントラクト
■5.10.2 Bridge相互接続システム
■■5.11 本章のまとめ
■■■第6章 IPFSの開発(基礎編)
■■6.1 IPFSのインストール
■6.1.1 パッケージによるインストール
■6.1.2 Dockerによるインストール
■6.1.3 ipfs-updateによる実装方法
■■6.2 IPFSストレージと設定の初期化
■6.2.1 初期化
■6.2.2 設定ファイルにアクセスする
■■6.3 IPFSファイルシステムとのデータ送信
■6.3.1 IPFSにファイルを追加する方法
■6.3.2 IPFSからファイル内容を読み取る方法
■6.3.3 内容の検証
■6.3.4 IPFS内でファイル名とディレクトリ情報を書き込む方法
■6.3.5 IPFS Wrapped情報を確認する方法
■6.3.6 親ディレクトリのハッシュ値を使ってファイル内容を読み取る方法
■■6.4 ローカル環境をIPFSネットワークにつなげる方法
■■6.5 HTTP Webとの通信方法について
■6.5.1 ローカルのHTTPゲートウェイでIPFSデータを取得する
■6.5.2 パブリックHTTPゲートウェイでIPFSデータを取得する
■6.5.3 IPFS Webのコントロールボード(Web UI)
■■6.6 APIを使用する方法
■6.6.1 IPFSコマンドの使い方
■6.6.2 IPFSの拡張性
■6.6.3 IPFS用のAPI
■■6.7 本章のまとめ
■■■第7章 IPFSの開発(応用編)
■■7.1 IPFS内で動的コンテンツを発信する方法
■■7.2 IPFSネットワーク内で長期的にデータを保存する方法
■■7.3 IPFS Merkle DAGを使ってみる
■7.3.1 Merkle DAGの構成を作成する
■7.3.2 子ブロックのデータを組み込む
■7.3.3 ブロックとオブジェクトの区別
■7.3.4 ブロックを操作する
■7.3.5 オブジェクトを操作する
■■7.4 IPFS Pubsub機能の使い方
■7.4.1 ノード環境を整える
■7.4.2 ノードBを実行する
■7.4.3 AノードとBノードを繋げる
■7.4.4 Aノードを実行する
■7.4.5 Pubsub情報
■■7.5 IPFSのプライベートネットワークの作成と使用について
■7.5.1 環境の準備
■7.5.2 秘密鍵を共有する
■7.5.3 秘密鍵をノードにアップロードする
■7.5.4 bootstrapノードを追加する
■7.5.5 各ノードの動作と確認
■■7.6 本章のまとめ
■■■第8章 IPFSプロジェクトの実践
■■8.1 go-ipfsを用いてGit分散型サービスを最適化する方法
■8.1.1 インストール
■8.1.2 Gitリポジトリを初期化する
■8.1.3 IPFSネットワークにマウントさせる
■8.1.4 Gitを使ってIPFSからクローンリポジトリを作成する
■■8.2 js-ipfsを利用してストリーミングツールを開発する
■8.2.1 Node.jsの開発環境を整える
■8.2.2 webpackを使ってプロジェクトを作成する
■8.2.3 ストリーミングツールのモジュールを開発する
■8.2.4 ステータスモジュールを開発する
■8.2.5 js-ipfsモジュールをインストールする
■8.2.6 ドラッグしてアップロードする機能を実装する
■8.2.7 IPFS内のデータをストリーミングツールで読み取る
■8.2.8 コンテンツ再生のステータス状態を設定する
■8.2.9 開発のまとめ
■■8.3 本章のまとめ
■■1.1 IPFSの概要
■1.1.1 IPFSの概念と定義
■1.1.2 IPFSの起源
■■1.2 IPFSとブロックチェーンの関係
■1.2.1 ブロックチェーンの基礎
■1.2.2 ブロックチェーンの発展
■1.2.3 IPFSがブロックチェーンにもたらす変化とは
■1.2.4 Filecoin:IPFS技術に基づくブロックチェーンプロジェクト
■■1.3 IPFSの利点と価値
■1.3.1 IPFSの利点
■1.3.2 他のブロックチェーンストレージ技術との比較
■■1.4 IPFSの応用分野
■■1.5 本章のまとめ
■■■第2章 IPFSの基礎
■■2.1 分散ハッシュテーブル(DHT)
■2.1.1 Kademlia DHT
■2.1.2 Coral DSHT
■2.1.3 S/Kademlia DHT
■■2.2 ブロック交換プロトコル(BitTorrent)
■2.2.1 BitTorrentで使われる用語
■2.2.2 P2Pブロック交換プロトコル
■2.2.3 ブロッキング戦略
■■2.3 バージョン管理(Git)
■2.3.1 バージョン管理の種類
■2.3.2 スナップショットストリーム
■2.3.3 ローカル操作
■2.3.4 データ追加のみ
■2.3.5 整合性チェック
■2.3.6 作業領域と作業状態
■2.3.7 ブランチ(分岐)
■■2.4 自己検証ファイルシステム(SFS)
■2.4.1 SFSデザイン
■2.4.2 自己検証ファイルパス
■2.4.3 ユーザ認証
■2.4.4 キー失効メカニズム
■■2.5 Merkle TreeとMerkle DAG
■2.5.1 Merkle Tree
■2.5.2 Merkle DAG
■■2.6 本章のまとめ
■■■第3章 IPFSプロトコル・スタック
■■3.1 アイデンティティ層(Identity)
■■3.2 ネットワーク層(Network)
■■3.3 ルーティング層(Rouitng)
■■3.4 交換層(Exchange)
■3.4.1 BitSwapプロトコル
■3.4.2 BitSwap Credit
■3.4.3 BitSwap Strategy
■3.4.4 BitSwap Ledger
■■3.5 オブジェクト層(Objects)
■3.5.1 パス
■3.5.2 ローカルオブジェクト
■3.5.3 オブジェクトのピン留め
■3.5.4 オブジェクトの公開
■3.5.5 オブジェクトレベルの暗号化
■■3.6 ファイル層(Files)
■3.6.1 ファイルオブジェクト:blob
■3.6.2 ファイルオブジェクト:list
■3.6.3 ファイルオブジェクト:tree
■3.6.4 ファイルオブジェクト:commit
■3.6.5 バージョン管理
■3.6.6 ファイルシステムパス
■3.6.7 ファイルのリストとblobへの分割
■3.6.8 パスによる検索のパフォーマンス
■■3.7 ネーミング層(Naming)
■3.7.1 IPNS:ネーミングと可変ステータス
■3.7.2 自己検証ネーミング
■3.7.3 人にやさしいネーミング
■■3.8 本章のまとめ
■■■第4章 IPFSモジュール
■■4.1 Multiformats
■4.1.1 Multihash
■4.1.2 Multibase
■4.1.3 Multiaddress
■4.1.4 Multicodec
■4.1.5 Multistream
■4.1.6 Multigram
■■4.2 libp2p
■4.2.1 libp2pの機能
■4.2.2 libp2pのコア原則
■4.2.3 libp2pの用途
■■4.3 IPLD
■4.3.1 IPLDデータモデル
■4.3.2 コンテンツ識別子(CID)
■4.3.3 CIDデコーディング規則
■■4.4 本章のまとめ
■■■第5章 Filecoin
■■5.1 Filecoinプロジェクトの紹介
■5.1.1 Filecoinプロジェクトの起源
■5.1.2 Filecoinプロジェクトの価値
■5.1.3 Filecoinの価値交換市場
■5.1.4 インターネット使用の最適化
■■5.2 FilecoinとIPFSの関係
■■5.3 Filecoin経済システム
■5.3.1 Filecoinの配布と使用方法
■5.3.2 Filecoinマイナーの収益構造
■■5.4 Filecoin技術システムの概要
■5.4.1 Filecoinシステムの基本概念
■5.4.2 Filecoin取引市場の運営について
■5.4.3 Filecoinブロックチェーンのデータ構造
■5.4.4 Filecoinブロックチェーンの仕組み
■■5.5 分散ストレージネットワークプロトコル(DSN)
■5.5.1 Put、Get、Manage操作
■5.5.2 ビザンチン問題とストレージエラー
■5.5.3 DSNプロトコルにおける2種類の基本操作
■5.5.4 ストレージノード操作プロトコル
■5.5.5 検索ノード操作プロトコル
■5.5.6 ネットワーク操作プロトコル
■■5.6 Filecoin取引市場
■5.6.1 ストレージ市場
■5.6.2 検索市場
■■5.7 Filecoinブロックチェーンコンセンサスメカニズム
■5.7.1 コンセンサスメカニズムの概要
■5.7.2 コンセンサスメカニズムが解決すべき3つの課題
■■5.8 PoRepとPoSt
■5.8.1 ストレージ証明の6つの定義
■5.8.2 ストレージ証明のメンバー
■5.8.3 PoRep
■5.8.4 PoSt
■5.8.5 PoRepとPoStの実装
■■5.9 ネットワーク攻撃と防御
■5.9.1 シビル攻撃
■5.9.2 外部ソース攻撃
■5.9.3 生成攻撃
■■5.10 その他の機能
■5.10.1 Filecoinスマートコントラクト
■5.10.2 Bridge相互接続システム
■■5.11 本章のまとめ
■■■第6章 IPFSの開発(基礎編)
■■6.1 IPFSのインストール
■6.1.1 パッケージによるインストール
■6.1.2 Dockerによるインストール
■6.1.3 ipfs-updateによる実装方法
■■6.2 IPFSストレージと設定の初期化
■6.2.1 初期化
■6.2.2 設定ファイルにアクセスする
■■6.3 IPFSファイルシステムとのデータ送信
■6.3.1 IPFSにファイルを追加する方法
■6.3.2 IPFSからファイル内容を読み取る方法
■6.3.3 内容の検証
■6.3.4 IPFS内でファイル名とディレクトリ情報を書き込む方法
■6.3.5 IPFS Wrapped情報を確認する方法
■6.3.6 親ディレクトリのハッシュ値を使ってファイル内容を読み取る方法
■■6.4 ローカル環境をIPFSネットワークにつなげる方法
■■6.5 HTTP Webとの通信方法について
■6.5.1 ローカルのHTTPゲートウェイでIPFSデータを取得する
■6.5.2 パブリックHTTPゲートウェイでIPFSデータを取得する
■6.5.3 IPFS Webのコントロールボード(Web UI)
■■6.6 APIを使用する方法
■6.6.1 IPFSコマンドの使い方
■6.6.2 IPFSの拡張性
■6.6.3 IPFS用のAPI
■■6.7 本章のまとめ
■■■第7章 IPFSの開発(応用編)
■■7.1 IPFS内で動的コンテンツを発信する方法
■■7.2 IPFSネットワーク内で長期的にデータを保存する方法
■■7.3 IPFS Merkle DAGを使ってみる
■7.3.1 Merkle DAGの構成を作成する
■7.3.2 子ブロックのデータを組み込む
■7.3.3 ブロックとオブジェクトの区別
■7.3.4 ブロックを操作する
■7.3.5 オブジェクトを操作する
■■7.4 IPFS Pubsub機能の使い方
■7.4.1 ノード環境を整える
■7.4.2 ノードBを実行する
■7.4.3 AノードとBノードを繋げる
■7.4.4 Aノードを実行する
■7.4.5 Pubsub情報
■■7.5 IPFSのプライベートネットワークの作成と使用について
■7.5.1 環境の準備
■7.5.2 秘密鍵を共有する
■7.5.3 秘密鍵をノードにアップロードする
■7.5.4 bootstrapノードを追加する
■7.5.5 各ノードの動作と確認
■■7.6 本章のまとめ
■■■第8章 IPFSプロジェクトの実践
■■8.1 go-ipfsを用いてGit分散型サービスを最適化する方法
■8.1.1 インストール
■8.1.2 Gitリポジトリを初期化する
■8.1.3 IPFSネットワークにマウントさせる
■8.1.4 Gitを使ってIPFSからクローンリポジトリを作成する
■■8.2 js-ipfsを利用してストリーミングツールを開発する
■8.2.1 Node.jsの開発環境を整える
■8.2.2 webpackを使ってプロジェクトを作成する
■8.2.3 ストリーミングツールのモジュールを開発する
■8.2.4 ステータスモジュールを開発する
■8.2.5 js-ipfsモジュールをインストールする
■8.2.6 ドラッグしてアップロードする機能を実装する
■8.2.7 IPFS内のデータをストリーミングツールで読み取る
■8.2.8 コンテンツ再生のステータス状態を設定する
■8.2.9 開発のまとめ
■■8.3 本章のまとめ
著者情報
ドン ティェンイー
ドン ティェンイー,ダイ ジャラェ,フゥァン ユーミン,菊池 将和 訳
ダイ ジャラェ
フゥァン ユーミン
菊池 将和