IPFS与区块链

IPFS(InterPlanetary File System)点对点的分布式超媒体分发协议.

安装与使用

地址: http://ipfs.io

下载对应平台的安装包, 解压缩后将可执行文件放在一个目录下, 一般为 /usr/local/bin/.

基础命令 & 环境配置

初始化

ipfs init

文件和配置都在 ~/.ipfs 目录下.

编辑配置

export EDITOR=/usr/bin/vim
ipfs config edit

查看节点信息

ipfs id

启动节点

ipfs daemon

配置跨域

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

webui

http://localhost:5001/webui

注意, 我使用的是 vagrant VirtualBox 虚拟机, 需要在虚拟机做 4001->4001, 5001->5001, 8080->8080 端口映射, 并且在 ~/.ipfs/config 中将对应监听的 127.0.0.1 改为 0.0.0.0.

文件操作 & 网站发布

添加内容

ipfs add index.html

之后会返回一个哈希字符串, 用于访问该内容.

ipfs cat <hash>

添加目录

ipfs add -r public

之后会返回该目录下的每个文件 和 目录的哈希字符串, 用于访问该字符串.

ipfs cat <filehash>
ipfs cat /ipfs/<filehash>
ipfs cat /ipfs/<folderhash>/filename

在线预览

https://ipfs.io/ipfs/<file|folderhash>

此方法可以用于部署分布式的静态网站.

我的网站: https://ipfs.io/ipfs/QmQCN1Y72n7p9T6VJt85oiDJmxYkUo3Dj5F7g1HAdMZK5t

添加网站到 IPNS

ipfs name publish /ipfs/<上面网站的hash地址>

得到一个新的哈希值, 次哈希值用于域名, 在线预览

http://ipfs.io/ipns/<域名哈希值>

我的域名: https://ipfs.io/ipns/QmbznkUEEPTbcZtjqTfaeAxgoRdwzeRP7wkXLmwBzq2aMa

多网站部署的时候, 需要给不同网站生成单独的密钥

ipfs key gen --type=rsa --size=2048 website1
ipfs name publish --key=website1 /ipfs/<上面网站的hash地址>

检查网站是否部署解析成功

ipfs name resolve <域名哈希值>

看看是否解析到了上面配置的地址.

我的问题

通过 5001 页面添加的文件, 可以使用 ipfs files ls 进行查看, 怎么进行访问?

通过 ipfs add 的有对应的内容怎么查看列表?

命令行

USAGE
  ipfs - 全球 p2p merkle-dag 文件系统.

SYNOPSIS
  ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...

OPTIONS

  -c,              --config   string - 配置文件地址
  -D,              --debug    bool   - 开启 debug 模式
  --help                      bool   - 显示帮助 完整版(本文档)
  -h                          bool   - 显示帮助 简约版
  -L,              --local    bool   - 本地执行命令, 不使用后台运行
  --api                       string - 手动指定 api 地址 (默认 /ip4/127.0.0.1/tcp/5001).
  --enc,           --encoding string - 编码方式(json, xml, or text). 默认: text.
  --stream-channels           bool   - 是否输出数据流 channel.
  --timeout                   string - 命令执行超时时间.

SUBCOMMANDS
  BASIC COMMANDS
    init          初始化本地数据库
    add <path>    添加文件
    cat <ref>     获取 IPFS 中存储的文件元数据
    get <ref>     下载 IPFS 对象
    ls <ref>      List links from an object
    refs <ref>    List hashes of links from an object

  DATA STRUCTURE COMMANDS
    block         Interact with raw blocks in the datastore
    object        Interact with raw dag nodes
    files         像unix系统一样与数据交互
    dag           Interact with IPLD documents (experimental)

  ADVANCED COMMANDS
    daemon        开启不退出的程序
    mount         Mount an IPFS read-only mountpoint
    resolve       Resolve any type of name
    name          Publish and resolve IPNS names
    key           Create and list IPNS name keypairs
    dns           Resolve DNS links
    pin           Pin objects to local storage
    repo          Manipulate the IPFS repository
    stats         Various operational stats
    p2p           Libp2p stream mounting
    filestore     Manage the filestore (experimental)

  NETWORK COMMANDS
    id            自己在 IPFS 中的地址信息
    bootstrap     添加或删除 bootstrap 连接
    swarm         管理 p2p 网络
    dht           Query the DHT for values or peers
    ping <ID>     衡量一个地址的延迟性
    diag          分析系统当前执行内容

  TOOL COMMANDS
    config        管理配置信息(show展示当前配置)
    version       当前版本信息
    update        更新
    commands      列举所有可用命令(父命令+子命令)

  使用 'ipfs <command> --help' 了解更多该命令的内容

  ipfs 使用本地文件系统存储数据. 默认存储路径为 ~/.ipfs.
  自定义路径设置环境变量 $IPFS_PATH, 例如:

    export IPFS_PATH=/path/to/ipfsrepo

  退出状态:

  CLI 命令行退出时的错误号为:

  0     正确执行
  1     执行失败

  使用 'ipfs <subcmd> --help' 了解更多子命令
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.