• 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的永久文件存储和区块链的不可篡改、时间戳证明特性结合,非常适合在版权保护、身份及来源证明等方面加以应用。

  • 相关阅读:
    js引用类型赋值不改变原对象值
    VS2017启动实例调试(谷歌浏览器)闪退问题
    ext6时间控件(带时分秒)
    extjs列表中文件上传与下载(带有重命名操作)
    c# word(1) 向标签处添加文字
    关于页面加载后执行使用afterrender
    ExtJS,grid多选框列
    vue起手式
    Javascript诞生与历史
    markdown语法说明
  • 原文地址:https://www.cnblogs.com/coderzjz/p/14924489.html
Copyright © 2020-2023  润新知