zoukankan      html  css  js  c++  java
  • IPFS在windows平台下的安装与简单使用-更新中

    理论基础

    IPFS(星际文件系统),是一个分布式文件系统协议。IPFS协议定义了文件在分布式系统中如何存储、索引、传输。IPFS的目标是通过一个文件系统将网络中的所有的设备连接在起来

    简介

    1. 基于内容寻址,而非基于域名寻址。文件具有唯一存在的唯一性,一个文件加入到IPFS的网络,基于计算对内容赋予一个唯一加密的哈希值
    2. 提供文件的历史版本控制器(如git),并且让多个节点使用保存不同版本的文件;
    3. IPFS的网络运行着一条区块链,即用来存储互联网文件的哈希值表,每次有网络访问,即要在链上查询该内容(文件)的地址;
    4. 通过使用代币(FileCoin)的激励作用,让各节点有动力去存储数据。FileCoin是一个由加密货币驱动的存储网络。矿工通过为网络提供开放的硬盘空间获得FileCoin,而用户则用FileCoin来支付在去中心化网络中存储加密文件的费用。

    工作机制

    IPFS为每一个文件分配一个独一无二的hash值,这个方式使得IPFS可以支持基于文件内容寻址。IPFS在整个网络范围内去掉重复的文件,并且为每一个文件建立版本管理。

    当查询文件的时候,IPFS网络根据文件的hash值进行查找。为了让用户更好的记文件存放的hash,IPFS利用IPNS将hash值映射一个比较容易记忆的IPNS名字,每个节点除了存储自己需要的数据,还需要存储一张hash表,用来记录文件存储的位置,进行文件的查询下载。

    实验操作

    IPFS环境搭建

    Ubuntu 18.04.5 LTS 在此平台开发用正常步骤 之后演示是在win10平台

    sudo apt-get update 更新一下软件列表

    还需安装golang sudo apt-get install golang-go -y,安装过的可以忽略

    下载IPFS

    wget https://gitee.com/plusz/go-ipfs.git 这里用gitee同步的github镜像

    或者直接 git clone https://gitee.com/plusz/go-ipfs.git

    WINDOWS平台下载地址:https://dist.ipfs.io/#go-ipfs (选windows binary,需要梯子)

    配置环境变量

    将解压的路劲添加到PATH环境变量,不加也行

    image-20210623202829231

    在解压路径下ipfs version 查看版本

    image-20210623202937727

    初始化本地仓库

    和git类似,ipfs节点也需要先初始化一个本地仓库

    执行 ipfs init

    image-20210623203056169

    此处的peer identity 即是属于自身的IPFS网络哈希值,相当于ID,通过ID可以访问到节点

    安装

    输入上面最后一行的内容

    image-20210623203513191

    出现这个即为安装成功

    ipfs安装的默认配置

    IPFS安装后的配置放在系统用户文件夹目录下C:Usersxxxx.ipfs , xxxx 为pc名,config为配置信息,可以按需修改,这里暂时不修改

    运行

    1. 输入 ipfs daemon 启动IPFS服务监听

    目的是用于监听IPFS网络通信数据,使用的监听端口是5001。注意要并保持开启状态,才能守护监听的进程。

    image-20210623203908992

    2. IPFS的基础命令

    通过ipfs help可以查看一些基础命令

    image-20210623204049806

    基本命令:
    init ——初始化IPFS本地配置
    Add ——添加一个文件到IPFS
    cat —— 展示IPFS对象数据
    get —— 下载IPFS对象
    ls —— 从一个对象中列出链接
    refs —— 从一个对象中列出链接哈希
    数据结构命令:
    block —— 与数据存储中的原始块交互
    object —— 与原始DAG节点交互
    高级命令:
    daemon —— 开启一个开始运行的后台进程
    mount —— 挂载一个IPFS只读的挂载点
    name —— 发布并解析IPFS名字
    key —— 创建并列出IPFS名字密钥对
    pin —— 将对象锁定到本地存储
    网络命令:
    id —— 展示IPFS节点信息
    bootstrap —— 添加或删除引导文件
    swarm —— 管理p2p网络连接
    工具命令:
    config —— 管理配置
    version —— 展示IPFS版本信息
    update —— 下载并应用go-ipfs更新
    commands —— 列出所有可用命令
    

    此时我们通过ipfs id 可以查看属于自己的通信ID信息

    image-20210623204201541

    输入ipfs config show 可以查看配置信息

    image-20210623204238016

    ipfs swarm peers 查看附近也在使用IPFS网络节点的伙伴,如果没有数据说明附近没人使用。

    image-20210623204334485

    这里可以看到附近还是有很多IPFS节点的

    3. 调用IPFS网络中的文件

    输入 ipfs cat /ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg >cat.jpg

    我们即从mW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ的节点里下载了名为cat.jpg的一张图片到本地。

    4. 上传文件

    文件夹内新建一个测试文件

    image-20210623204712591

    通过命令ipfs add ipfsTest.txt 上传文件,并且返回一个唯一哈希值

    image-20210623204936464

    在命令行输入ipfs cat + 哈希值既可以看到内容

    image-20210623205107814

    可视化页面

    在IPFS网络状态开启时可以通过http://localhost:5001/webui查看到IPFS可视化操作界面

    im306

    查看节点消息

    image-20210623205458119

    与上面在命令行里查看是一样的ID

    将刚才上传的文件hash复制到搜索框检查后

    image-20210623210321142

    从上图可知,这个CID值的HASH值不是我们想要的HASH值,这是由于原本的hash太长了,一堆数字读起来不容易,所以需要再进行编码,压缩其长度,且容易被传播,为此,IPFS采用了Base58这种编码。

    在右侧可以看到CID信息

    image-20210623210420445

    IPFS现在的multihash值,都是以1220开头的,按照Base58的算法,算出来的结果都是以Qm开头的。
    IPFS如何计算文件hash?
    IPFS采用了SHA2-256算法,对任意长度的内容,生成的hash值长度固定,都是32个字节。在Linux下,直接用sha256sum可以计算SHA2-256格式的HASH值。虽然目前用的是SHA-256,但是可以支持多种HASH算法,可以升级算法,但是不会有大的架构改动。于是,IPFS采用了multihash这种简单的HASH表示方法,支持多种HASH算法。如果未来修改算法,用的仍然是multihash,保证了表达方式的持续性。
    multihash是一种自识别hash。multihash多重哈希遵循TLV模式(type-length-value)。其实就是一个字符串,由三部分组成:HASH算法编码、HASH值得长度(字节数)、HASH值。
    SHA2-256的编码为Ox12,其HASH摘要长度为32字节(十六进制数为0x20)。把1220加到前面所得HASH至的开头。例如本例文件的multihash编码(十六进制)。

    image-20210623210630611

    简而言之:

    原始数据添加元数据封装为IPFS文件—>计算SHA2-256—>封装成multihash—>转化为Base58

    上传图片、视频文件

    上传了一张1mb的图片后

    image-20210624151448073

    可以看到有很多的link,我们继续上传一个更大的视频文件

    image-20210624151750265

    检查刚上传的视频文件可以看到拥有更多的LINKS

    image-20210624152111702

    这里的links就是IPFS存储并共享文件的机制所生成的

    再打开一个links[0]可以看到还有更多的子集

    image-20210624154808590

    ​ IPFS上的文件都存储在IPFS对象中,每个对象最多可以存储256KB的数据,也可以包含连接其他IPFS对象的链接。

    ​ 那么超过256KB的文件怎么办呢?比如一个图片或者一个视频,这些大型文件会被分割成数个IPFS对象。每一个对象都是256KB。之后系统会生成一个空白IPFS对象与包含这个文件的其他所有IPFS对象链接。

    ​ IPFS的数据结果非常简单但却非常强大。这一结构使我们可以把它作为文件系统来使用。这是一个包含了一些文件的简单索引结构,可以将其转成IPFS对象,每一个文件和索引都生成一个IPFS对象。一旦一个文件加入了网络就不能被修改了,这是一个不能篡改的数据存储库,非常类似于区块链。

    这也有利于我们大文件存储区块链的应用实例

    上传大文件

    ​ 根据上述性质可以将IPFS和区块链完美结合,用户可以使用IPFS来处理大量数据,然后把对应的加密哈希存储到区块链中并打上时间戳。这样就无需将数据本身放在链上,不但可以节省区块链的网络带宽,还可以对其进行有效保护。关于文件的安全性,一方面可以加密后存入IPFS,另一方面也可利用IPFS实现文件分布式共享。

      IPFS弥补了现有区块链系统在文件存储方面的短板,将IPFS的永久文件存储和区块链的不可篡改、时间戳证明特性结合,非常适合在版权保护、身份及来源证明等方面加以应用。

  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/coderzjz/p/14924489.html
Copyright © 2011-2022 走看看