IPFS资源-图片文件夹资源HASH地址

IPFSatangge 发表了文章 • 0 个评论 • 6 次浏览 • 2018-06-03 13:33 • 来自相关话题

Index of /ipfs/QmRAdWMvzesDpfxhgWKAJP9H8BpMNPrfshtiCh595ndHDZIDActionsQmRAdWMvzesDpfxhgWKAJP9H8BpMNPrfshtiCh595ndHDZRAW|DAG|QmRvCBvZLycvSk4S... 查看全部
<ol style="list-style-type: decimal;"><li><p>Index of /ipfs/QmRAdWMvzesDpfxhgWKAJP9H8BpMNPrfshtiCh595ndHDZ</p></li><li><table><thead><tr class="firstRow"><th>ID</th><th>Actions</th></tr></thead><tbody><tr><td><code>QmRAdWMvzesDpfxhgWKAJP9H8BpMNPrfshtiCh595ndHDZ</code></td><td><a href="http://localhost:8080/ipfs/QmRAdWMvzesDpfxhgWKAJP9H8BpMNPrfshtiCh595ndHDZ">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmRAdWMvzesDpfxhgWKAJP9H8BpMNPrfshtiCh595ndHDZ">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmRvCBvZLycvSk4SQMdgurU5bZFdMSH3mZyZDhJS9sAakq</code></td><td><a href="http://localhost:8080/ipfs/QmRvCBvZLycvSk4SQMdgurU5bZFdMSH3mZyZDhJS9sAakq">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmRvCBvZLycvSk4SQMdgurU5bZFdMSH3mZyZDhJS9sAakq">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv</code></td><td><a href="http://localhost:8080/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn</code></td><td><a href="http://localhost:8080/ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmWdseneLQaZVeQqWkWMDxhrxkiAigfpWCC5M2dDEJdHDS</code></td><td><a href="http://localhost:8080/ipfs/QmWdseneLQaZVeQqWkWMDxhrxkiAigfpWCC5M2dDEJdHDS">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmWdseneLQaZVeQqWkWMDxhrxkiAigfpWCC5M2dDEJdHDS">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmXoeHR5TkvUAaBSxvBUBKXRm2kS1rL5eSNDeTGU8BLvh7</code></td><td><a href="http://localhost:8080/ipfs/QmXoeHR5TkvUAaBSxvBUBKXRm2kS1rL5eSNDeTGU8BLvh7">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmXoeHR5TkvUAaBSxvBUBKXRm2kS1rL5eSNDeTGU8BLvh7">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmaQSsHBdpw9Hv9rwc7AVtgyjyE8BiaCNgPf1Lp9GzJrWD</code></td><td><a href="http://localhost:8080/ipfs/QmaQSsHBdpw9Hv9rwc7AVtgyjyE8BiaCNgPf1Lp9GzJrWD">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmaQSsHBdpw9Hv9rwc7AVtgyjyE8BiaCNgPf1Lp9GzJrWD">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>Qmafg3cyfVBzCZJygZD6cDZ29qHypi1xso8vXq3tJXd26t</code></td><td><a href="http://localhost:8080/ipfs/Qmafg3cyfVBzCZJygZD6cDZ29qHypi1xso8vXq3tJXd26t">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/Qmafg3cyfVBzCZJygZD6cDZ29qHypi1xso8vXq3tJXd26t">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmbWLbGtBqxy9GH1tkpx1sgrwMQ2gzT2V3erbQJYzzBs3j</code></td><td><a href="http://localhost:8080/ipfs/QmbWLbGtBqxy9GH1tkpx1sgrwMQ2gzT2V3erbQJYzzBs3j">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmbWLbGtBqxy9GH1tkpx1sgrwMQ2gzT2V3erbQJYzzBs3j">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmcieRRKuXuRon3qHEgooUaJS8PRtzSynB2WyCNZ66LcKJ</code></td><td><a href="http://localhost:8080/ipfs/QmcieRRKuXuRon3qHEgooUaJS8PRtzSynB2WyCNZ66LcKJ">RAW</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#/objects/QmcieRRKuXuRon3qHEgooUaJS8PRtzSynB2WyCNZ66LcKJ">DAG</a>|<a href="http://localhost:5001/ipfs/QmPhnvn747LqwPYMJmQVorMaGbMSgA7mRRoyyZYz3DoZRQ/#"></a></td></tr><tr><td><code>QmdA54tHYz2nbL2uzsgmBbLzPhxz9gZsWpFj9g1cnUfPQp</code></td><td><br/></td></tr></tbody></table></li><li><p><br/></p></li></ol>

IPFS 环境搭建

IPFS-Storjatangge 发表了文章 • 0 个评论 • 6 次浏览 • 2018-06-03 13:14 • 来自相关话题

边学边用】IPFS 环境搭建 (windows)daxiang (45) 在 ipfs •  4个月前IPFS是我比较看好的一个项目,它有可能替代现有的HTTP协议,因为越来越好奇IPFS的技术,所以也找了很多相关的资料... 查看全部
<h1>边学边用】IPFS 环境搭建 (windows)</h1><p><strong><a href="https://steemit.com/@daxiang">daxiang&nbsp;(45)</a></strong>&nbsp;在&nbsp;<a href="https://steemit.com/trending/ipfs">ipfs</a>&nbsp;•&nbsp;&nbsp;4个月前</p><p><img src="https://steemitimages.com/DQmUFaxQmCh5BiXTtG4dWU9JDbHBf1pAXokzLC1GwXxxEtG/20180201145635.jpg" alt="20180201145635.jpg"/></p><p>IPFS是我比较看好的一个项目,它有可能替代现有的HTTP协议,因为越来越好奇IPFS的技术,所以也找了很多相关的资料研究了一番。</p><p>今天也根据官网的文档开始一步步搭建ipfs运行环境,我们先来看一下IPFS的简介:</p><p>IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。</p><p>IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。</p><p>IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。</p><p>1、下载IPFS</p><p>打开官网<a href="https://ipfs.io/">https://ipfs.io/</a>&nbsp;,点击Try it<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmYxR1R3D3DrR2MWye4Vt1X7U5hxzRrkr5AbTkbFwNJoBu/111.jpg" alt="111.jpg"/></p><p>点击 Install IPFS now<br/><img src="https://steemitimages.com/DQmWbPj7PgDDD6NHkUGn6hB7fZTFJRKNphi68S2h9pnX1qY/222.jpg" alt="222.jpg"/></p><p><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmSgQ2TBFKQY4hBPsrKvfcK8qVKcDnkeh5aGTYk4aePBUZ/333.jpg" alt="333.jpg"/></p><p>下载对应版本的IPFS安装文件<br/><img src="https://steemitimages.com/DQmSAhrjbC9aBVTWojBFKQv71Ms8hJ1xUfzzYV2aNLrPJ7u/444.jpg" alt="444.jpg"/></p><p>下载完之后,将文件解压到C盘根目录<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmYoadiBiaobQxjciCs7WVbP3RpmnN7iGLrDPMXhxjNrag/555.jpg" alt="555.jpg"/></p><p>2、安装IPFS</p><p>打开CMD,输入 cd C:/go-ipfs 进入ipfs文件目录<br/><img src="https://steemitimages.com/DQmcmFkZRpmEhGYHoXLSVCQy66Yomoy9KrhNW3oFYAQvfcX/666.jpg" alt="666.jpg"/></p><p>输入 dir 查看目录信息,然后输入ipfs init 开始初始化 ipfs网络环境,并且系统会分配一个属于你自己的IPFS网络哈希值(类似你在IPFS网络中的一张身份证ID)。有了这个ID,别人就可以访问到你的节点<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmeycoXNP77Cfu2sbNg612LnNPcaBETMUg5w8P2v8H3TJ3/777.jpg" alt="777.jpg"/></p><p>输入上面获取的内容 ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme 出现Hello and Welcome to IPFS! 那恭喜你!说明你的电脑已经成功安装IPFS并已经加入到IPFS网络了。<br/><img src="https://steemitimages.com/DQmW7PA48ws4Ya6V6aKvMdomsoKdvSxNyVrFbXDWLdbHT18/888.jpg" alt="888.jpg"/></p><p>3、IPFS环境配置<br/>IPFS安装的默认配置将存放到你的用户文件夹根目录下 文件夹名.ipfs,接下来打开config,里面的是ipfs的一些基础配置数据,可以根据自己的需求修改里面的配置<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmTan2MVZRbN6UkrZt1LSMvTTsi7hutXRcFmvWsYQ1j2xr/999.jpg" alt="999.jpg"/></p><p>配置修改请参考官网文档<br/><img src="https://steemitimages.com/DQmTR55xMT7pfQ9sfTCXsTZh9SEe98CBzLJJULn8DfMoG7f/1111.jpg" alt="1111.jpg"/></p><p>4、运行测试</p><p>输入ipfs daemon启动IPFS服务监听,目的是用于监听IPFS网络通信数据,使用的监听端口是5001。注意要并保持开启状态,才能守护监听的进程<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmSDc5VpwCMor6qAwj5ZNdm6kECkUde4BffU64eTqXirpP/3333.jpg" alt="3333.jpg"/></p><p>另开一个cmd,同样进入ipfs目录,试着执行一些基础命令</p><p>使用ipfs help,获取一些常用的命令<br/><img src="https://steemitimages.com/DQmNjNDLRoCatQFdJrWaGAvXYpWWLK527xZW8qETyGQ8Hia/6666.jpg" alt="6666.jpg"/></p><p>如 ipfs id,可以查看你的通信ID信息<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmV1PYWxEPpWuYfjZL3PVP1cQPKj8yuR6Cym6fiK3rH7Jx/7777.jpg" alt="7777.jpg"/></p><p>使用ipfs swarm peers 可以查看附近也在使用IPFS网络节点伙伴,如果列出有数据说明你并不是一个人在使用IPFS网络<br/><img src="https://steemitimages.com/DQma1TvjA6gdZiyKbVuFx5ZkXftHKkyxeoSb3HpjQqYJ8rM/8888.jpg" alt="8888.jpg"/></p><p>5、尝试调用一个ipfs网络中的文件:</p><p>打开官网点击 右上角 Docs -&gt; 选择目录 Getting Started<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmUHRvFwWKZDSmAjS6yjaYZ5mwcP1VV8T3jgYQjaV3T5BM/1112.jpg" alt="1112.jpg"/></p><p>找到Going online,复制代码 ipfs cat /ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg &gt;cat.jpg<br/><img src="https://steemitimages.com/DQmWnz8TH2aDMGznkcrrv3QzFYY4WGVEeq7uPq96iE2wkPd/1122.jpg" alt="1122.jpg"/></p><p>粘贴到CMD,回车确认即可获得ipfs网络的的一个猫的图片资源,也说明我们的ipfs环境可以访问网络中的文件了。<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmaQ3DbCxScZoYTdrEAsa5aTzAAitDkCUFufeDKXMmZhPX/2233.jpg" alt="2233.jpg"/></p><p>6、可视化界面</p><p>IPFS网络状态保持开启,此时浏览器输入<a href="http://localhost:5001/webui">http://localhost:5001/webui</a>&nbsp;你可以看到一个漂亮的可视化IPFS管理界面,里面可以做一些基础的资源获取查看操作<br/><img src="https://steemitimages.com/DQmVAvNCpg7GJQLbEVqbQTvBcKGrHvNnEfr6hzaJbGimy9p/9999.jpg" alt="9999.jpg"/></p><p>6、上传一个文件以及在ipfs获取自己上传的文件</p><p>将自己的文件放在ipfs配置目录,如我的daxiang.txt这个文档<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmdiSKRC2qVaPGvFSApqfxgeCdDYxKx6zSMW3YXG8hv7Xs/1234.jpg" alt="1234.jpg"/></p><p>执行命令ipfs add daxiang.txt,显示如下,说明我的文件已经加入了我的ipfs网络节点中,并且生成了一个daxiang.txt这个文件的唯一哈希值QmQ8TAwaaomyMTp9oaffr2SmzcaQ6FedsaWiPdPuQqdA5Z<br/><img src="https://steemitimages.com/DQmPMd9RsFMrwWSjfGthG7N2YiQczTqtKciieikjndFSWGH/12345.jpg" alt="12345.jpg"/></p><p>此时我们可以通过上面返回的文件哈希值获取我们上传的文件,在刚才的可视化界面把哈希值粘贴到搜索栏即可得到我们上传的文件信息<br/><img src="https://steemitimages.com/0x0/https://steemitimages.com/DQmXE8zUJc8b3aERAowN9bMtigBTPySxmCykZkeWNBd6im1/123456.jpg" alt="123456.jpg"/></p><p>另:我们也可以使用控制台CMD 输入命令 ipfs cat QmQ8TAwaaomyMTp9oaffr2SmzcaQ6FedsaWiPdPuQqdA5Z 获得文件信息</p><p>注意:我们刚才的文件获取操作都是只在我们本机内网建立的ipfs环境中,我们尝试使用<img src="https://steemitimages.com/0x0/https://ipfs.io/ipfs/QmQ8TAwaaomyMTp9oaffr2SmzcaQ6FedsaWiPdPuQqdA5Z"/>&nbsp;查看信息,出现没有找到资源的提示,说明我们上传的文件还没有同步到ipfs外网,所以访问不了。</p><p>接下来执行下面的命令同步节点数据到IPFS网络:<br/>先把刚在运行的ipfs daemon服务停止(Ctrl + c),然后重新启动 ipfs daemon<br/>再次在浏览器访问&nbsp;<img src="https://steemitimages.com/0x0/https://ipfs.io/ipfs/QmQ8TAwaaomyMTp9oaffr2SmzcaQ6FedsaWiPdPuQqdA5Z"/>&nbsp;,可以看到我们上传的文件,说明我们现在已经成功把文件上传到ipfs网络节点了。<br/><img src="https://steemitimages.com/DQmTHzRJJTDjDq9S9ubdUitSnDGtEk6ji49gNEiKXq75Btp/123123.jpg" alt="123123.jpg"/></p><p>以上简介的IPFS的环境搭建和基础的几个命令操作,之后我还好作进一步学习研究,你也可以一起来玩哦。</p><p><br/></p>

【IPFS】Windows搭建IPFS服务

IPFS-Storjatangge 发表了文章 • 0 个评论 • 6 次浏览 • 2018-06-03 13:12 • 来自相关话题

简介IPFS(InterPlanetary File System)是一个点对点的分布式文件系统,没有单点故障,一旦文件同步所有节点,文件将永远存在下载解压下载地址:https://dist.ipfs.io/#go-ipfs (选windows binary)解压创建一... 查看全部
<h1>简介</h1><blockquote><p>IPFS(InterPlanetary File System)是一个点对点的分布式文件系统,没有单点故障,一旦文件同步所有节点,文件将永远存在</p></blockquote><hr/><h1><a></a>下载解压</h1><ul><li><p>下载地址:<a href="https://dist.ipfs.io/#go-ipfs">https://dist.ipfs.io/#go-ipfs</a>&nbsp;(选windows binary)</p></li><li><p>解压</p></li></ul><p><img src="https://img-blog.csdn.net/20180207105443266?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbnMyMjUwMjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" title=""/></p><hr/><h1><a></a>创建一个ipfs节点</h1><ul><li><p>执行:<code>.\ipfs.exe init</code></p></li></ul><p><img src="https://img-blog.csdn.net/20180207105648675?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbnMyMjUwMjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" title=""/></p><hr/><h1><a></a>查看节点ID</h1><ul><li><p>执行:<code>.\ipfs.exe id</code></p></li></ul><p><img src="https://img-blog.csdn.net/20180207105936651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbnMyMjUwMjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" title=""/></p><ul><li><p>每个节点都有一个唯一的ID,这里为&nbsp;<code>QmRCbQvpivTtrbTaSjYqVUN82gzwzzy9hX2pzxi3Ggyqga</code></p></li></ul><hr/><h1><a></a>启动节点服务器</h1><ul><li><p>执行:<code>.\ipfs.exe daemon</code></p></li></ul><p><img src="https://img-blog.csdn.net/20180207110325654?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbnMyMjUwMjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" title=""/></p><ul><li><p>打开&nbsp;<code>http://localhost:5001/webui</code>&nbsp;浏览web ui界面</p></li></ul><p><img src="https://img-blog.csdn.net/20180207110540933?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbnMyMjUwMjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" title=""/></p><hr/><h1><a></a>往节点中新增文件或目录</h1><ul><li><p>新增文件:&nbsp;<code>.\ipfs.exe add hello.txt</code></p></li><li><p>新增目录:&nbsp;<code>.\ipfs.exe add -r hello/</code></p></li><li><p>备注:可以通过文件hash直接访问文件</p></li><li><p><code>.\ipfs.exe cat /ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc</code></p></li><li><p><code>https://ipfs.io/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc</code></p></li></ul><hr/><h1><a></a>将节点ID与文件Hash进行绑定</h1><ul><li><p>绑定后,只需访问&nbsp;<code>https://ipfs.io/ipns/节点ID</code>&nbsp;就可以访问对应的文件或目录了</p></li><li><p>注意:文件或目录更新后,需要重新进行绑定</p></li><li><p>绑定操作:&nbsp;<code>.\ipfs.exe name publish 文件或目录的hash值</code></p></li></ul><p style="text-align: left;"><br/></p>

Windows10部署IPFS资源节点

IPFS-Storjatangge 发表了文章 • 0 个评论 • 6 次浏览 • 2018-06-03 13:11 • 来自相关话题

1 IPFS简介IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求... 查看全部
<h3>1 IPFS简介</h3><p>IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。</p><p>IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。</p><p>IPFS提供了一个友好的WEB访问接口,用户可通过<a href="https://link.jianshu.com?t=http%3A%2F%2Fipfs.io%2Fhash">http://ipfs.io/hash</a> 获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。</p><h3>2 IPFS本地环境安装</h3><p>通过地址<a href="https://link.jianshu.com?t=https%3A%2F%2Fdist.ipfs.io%2F%23go-ipfs">https://dist.ipfs.io/#go-ipfs</a> 可以下载最新版本压缩包,官方提供多平台版本,可以根据需要选择,本文使用windows版本。<br/></p><p><img class="" src="//upload-images.jianshu.io/upload_images/10119836-76f6978221b7580a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><p><br/></p><p>下载完成之后,解压,得到文件夹go-ipfs</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-335a50d097b02d96.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><h3>3 项目配置</h3><h4>3.1 创建ipfs节点</h4><p>为了运行项目,我们可以通过ipfs.exe init 在本机建立一个IPFS节点</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-70e19b2421045dfa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><h4>3.2 修改ipfs默认存储空间</h4><p>执行完ipfs.exe init 命令之后,会在根目录生成一个 .ipfs 的文件夹存储节点数据。</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-7750b611fca7dd50.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><p>存储节点默认存储大小为10G,如果你想修改存储空间,可以修改config配置文件,找到StorageMax,将10G修改为你需要的大小。</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-f2fb2bccb9d7ed6d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><h4>3.3 查看本机ipfs节点</h4><p>每个节点都有一个唯一的ID,通过命令 ipfs.exe id 可以查看本机节点ID</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-30336a218105d5bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png<br/></p><p>其中QmSx3sGf6NtMB4yvmMMVaFUxTkyeFr3VWv3ZVHwNPx7vTL 为本机 ID</p><h4>3.4 启动节点服务器</h4><p>通过命令 ipfs.exe daemon 可以启动节点服务器</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-36c542f1d3a64f2b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><h4>3.5 验证</h4><h5>打开一个新终端</h5><p>执行命令:ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme,显示如下结果</p><p><br/><img class="" src="//upload-images.jianshu.io/upload_images/10119836-63aecb59972ad193.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image.png</p><h5>浏览器输入网址</h5><p>打开<a href="https://link.jianshu.com?t=http%3A%2F%2Flocalhost%3A5001%2Fwebui">http://localhost:5001/webui</a>会看到一个漂亮的UI界面。<br/></p><p><img class="" src="//upload-images.jianshu.io/upload_images/10119836-506a268e8c225ea0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/><br/><br/>作者:程序员大叔日记<br/>链接:https://www.jianshu.com/p/8d78fdcdb7a3<br/>來源:简书<br/>著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</p><p><br/></p>

IPFS入门-HelloWorld

IPFS-Storjatangge 发表了文章 • 0 个评论 • 7 次浏览 • 2018-06-03 13:08 • 来自相关话题

本文由币乎(bihu.com)内容支持计划奖励目录新建一个HelloWorld.html文件查看ipfs使用命令将HelloWorld.htm添加到ipfs节点同步节点文件从IPFS网络查看文件1 新建一个HelloWorld.html文件新增一个文件夹,在文件夹新建一个Hell... 查看全部
<h2>本文由币乎(bihu.com)内容支持计划奖励</h2><h2>目录</h2><blockquote><ol><li><p>新建一个HelloWorld.html文件</p></li><li><p>查看ipfs使用命令</p></li><li><p>将HelloWorld.htm添加到ipfs节点</p></li><li><p>同步节点文件</p></li><li><p>从IPFS网络查看文件</p></li></ol></blockquote><h4>1 新建一个HelloWorld.html文件</h4><p>新增一个文件夹,在文件夹新建一个HelloWorld.html文件:</p><p><img class="" src="//upload-images.jianshu.io/upload_images/10119836-0bb01bf276dfb0e4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700"/>image</p><p>文件内容是一段简单html:</p><pre>&lt;html&gt;&lt;head&gt;&lt;title&gt;IPFS,Hello&nbsp;World!&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;IPFS,Hello&nbsp;World!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</pre><h3>2 查看ipfs使用命令</h3><p>新建一个终端,执行命令ipfs.exe help,可以查到相关使用命令,输入命令如下:</p><pre>D:\ipfs\go-ipfs&gt;ipfs.exe&nbsp;helpUSAGE
&nbsp;&nbsp;ipfs&nbsp;-&nbsp;Global&nbsp;p2p&nbsp;merkle-dag&nbsp;filesystem.

&nbsp;&nbsp;ipfs&nbsp;[--config=&lt;config&gt;&nbsp;|&nbsp;-c]&nbsp;[--debug=&lt;debug&gt;&nbsp;|&nbsp;-D]&nbsp;[--help=&lt;help&gt;]&nbsp;[-h=&lt;h&gt;]&nbsp;[--local=&lt;local&gt;&nbsp;|&nbsp;-L]&nbsp;[--api=&lt;api&gt;]&nbsp;&lt;command&gt;&nbsp;...

SUBCOMMANDS
&nbsp;&nbsp;BASIC&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initialize&nbsp;ipfs&nbsp;local&nbsp;configuration
&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&lt;path&gt;&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;a&nbsp;file&nbsp;to&nbsp;IPFS
&nbsp;&nbsp;&nbsp;&nbsp;cat&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;IPFS&nbsp;object&nbsp;data
&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Download&nbsp;IPFS&nbsp;objects
&nbsp;&nbsp;&nbsp;&nbsp;ls&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;links&nbsp;from&nbsp;an&nbsp;object
&nbsp;&nbsp;&nbsp;&nbsp;refs&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;hashes&nbsp;of&nbsp;links&nbsp;from&nbsp;an&nbsp;object

&nbsp;&nbsp;DATA&nbsp;STRUCTURE&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;raw&nbsp;blocks&nbsp;in&nbsp;the&nbsp;datastore
&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;raw&nbsp;dag&nbsp;nodes
&nbsp;&nbsp;&nbsp;&nbsp;files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;objects&nbsp;as&nbsp;if&nbsp;they&nbsp;were&nbsp;a&nbsp;unix&nbsp;filesystem
&nbsp;&nbsp;&nbsp;&nbsp;dag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;IPLD&nbsp;documents&nbsp;(experimental)

&nbsp;&nbsp;ADVANCED&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;daemon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start&nbsp;a&nbsp;long-running&nbsp;daemon&nbsp;process
&nbsp;&nbsp;&nbsp;&nbsp;mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mount&nbsp;an&nbsp;IPFS&nbsp;read-only&nbsp;mountpoint
&nbsp;&nbsp;&nbsp;&nbsp;resolve&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resolve&nbsp;any&nbsp;type&nbsp;of&nbsp;name
&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Publish&nbsp;and&nbsp;resolve&nbsp;IPNS&nbsp;names
&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create&nbsp;and&nbsp;list&nbsp;IPNS&nbsp;name&nbsp;keypairs
&nbsp;&nbsp;&nbsp;&nbsp;dns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resolve&nbsp;DNS&nbsp;links
&nbsp;&nbsp;&nbsp;&nbsp;pin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pin&nbsp;objects&nbsp;to&nbsp;local&nbsp;storage
&nbsp;&nbsp;&nbsp;&nbsp;repo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manipulate&nbsp;the&nbsp;IPFS&nbsp;repository
&nbsp;&nbsp;&nbsp;&nbsp;stats&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Various&nbsp;operational&nbsp;stats
&nbsp;&nbsp;&nbsp;&nbsp;p2p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Libp2p&nbsp;stream&nbsp;mounting
&nbsp;&nbsp;&nbsp;&nbsp;filestore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage&nbsp;the&nbsp;filestore&nbsp;(experimental)

&nbsp;&nbsp;NETWORK&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;info&nbsp;about&nbsp;IPFS&nbsp;peers
&nbsp;&nbsp;&nbsp;&nbsp;bootstrap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;or&nbsp;remove&nbsp;bootstrap&nbsp;peers
&nbsp;&nbsp;&nbsp;&nbsp;swarm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage&nbsp;connections&nbsp;to&nbsp;the&nbsp;p2p&nbsp;network
&nbsp;&nbsp;&nbsp;&nbsp;dht&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;the&nbsp;DHT&nbsp;for&nbsp;values&nbsp;or&nbsp;peers
&nbsp;&nbsp;&nbsp;&nbsp;ping&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Measure&nbsp;the&nbsp;latency&nbsp;of&nbsp;a&nbsp;connection
&nbsp;&nbsp;&nbsp;&nbsp;diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print&nbsp;diagnostics

&nbsp;&nbsp;TOOL&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage&nbsp;configuration
&nbsp;&nbsp;&nbsp;&nbsp;version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;ipfs&nbsp;version&nbsp;information
&nbsp;&nbsp;&nbsp;&nbsp;update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Download&nbsp;and&nbsp;apply&nbsp;go-ipfs&nbsp;updates
&nbsp;&nbsp;&nbsp;&nbsp;commands&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;all&nbsp;available&nbsp;commands

&nbsp;&nbsp;Use&nbsp;&#39;ipfs&nbsp;&lt;command&gt;&nbsp;--help&#39;&nbsp;to&nbsp;learn&nbsp;more&nbsp;about&nbsp;each&nbsp;command.

&nbsp;&nbsp;ipfs&nbsp;uses&nbsp;a&nbsp;repository&nbsp;in&nbsp;the&nbsp;local&nbsp;file&nbsp;system.&nbsp;By&nbsp;default,&nbsp;the&nbsp;repo&nbsp;is
&nbsp;&nbsp;located&nbsp;at&nbsp;~/.ipfs.&nbsp;To&nbsp;change&nbsp;the&nbsp;repo&nbsp;location,&nbsp;set&nbsp;the&nbsp;$IPFS_PATH
&nbsp;&nbsp;environment&nbsp;variable:&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;IPFS_PATH=/path/to/ipfsrepo

&nbsp;&nbsp;EXIT&nbsp;STATUS

&nbsp;&nbsp;The&nbsp;CLI&nbsp;will&nbsp;exit&nbsp;with&nbsp;one&nbsp;of&nbsp;the&nbsp;following&nbsp;values:

&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Successful&nbsp;execution.
&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Failed&nbsp;executions.</pre><h3>3 将HelloWorld.html添加到ipfs节点</h3><p>首先我们将HelloWord.html添加到本地节点,在终端输入一下命令:</p><blockquote><p>D:\ipfs\go-ipfs&gt;ipfs.exe add D:\ipfs\lean\HelloWorld.html<br/>109 B / 109 B [==================================================================================================================================<br/>added QmZ52xEibwKm28x4942KsLAs4njhF3QtkbNcs4pC4LCyBp HelloWorld.html</p></blockquote><p>当执行完ipfs.exe add HelloWorld.html 命令之后,就会将HelloWorld.html 添加到ipfs当前节点中,并且会对HelloWorld.html 文件生产一个唯一的hash:QmSzPqkCCBHmyymof83g8xPZjiZHyVz1UkNuGXUGutFPaK</p><p>如果想看本地ipfs节点数据,可以通过输入下面命令:</p><blockquote><p>D:\ipfs\go-ipfs&gt;ipfs.exe cat QmZ52xEibwKm28x4942KsLAs4njhF3QtkbNcs4pC4LCyBp<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;title&gt;IPFS,Hello World!&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;p&gt;IPFS,Hello World!&lt;/p&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;</p></blockquote><h3>4 同步节点文件</h3><p>虽然文件已经添加到当前自己的IPFS节点中,如果想同步到IPFS网络上,还需要进行同步操作,接下来执行同步命令,将节点文件同步到IPFS网络,输入命令:</p><blockquote><p>D:\ipfs\go-ipfs&gt;ipfs.exe daemon<br/>Initializing daemon...<br/>Swarm listening on /ip4/127.0.0.1/tcp/4001<br/>Swarm listening on /ip4/169.254.35.144/tcp/4001<br/>Swarm listening on /ip4/169.254.36.228/tcp/4001<br/>Swarm listening on /ip4/192.168.0.103/tcp/4001<br/>Swarm listening on /ip6/::1/tcp/4001<br/>Swarm listening on /p2p-circuit/ipfs/QmNaTdLDsVymhfhNxbPVkSN9jAbrZHYWvg9b83j2PLWUcy<br/>Swarm announcing /ip4/127.0.0.1/tcp/4001<br/>Swarm announcing /ip4/169.254.35.144/tcp/4001<br/>Swarm announcing /ip4/169.254.36.228/tcp/4001<br/>Swarm announcing /ip4/192.168.0.103/tcp/4001<br/>Swarm announcing /ip4/192.168.1.2/tcp/16143<br/>Swarm announcing /ip6/::1/tcp/4001<br/>API server listening on /ip4/127.0.0.1/tcp/5001<br/>Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080<br/>Daemon is ready</p></blockquote><p><br/><br/>作者:程序员大叔日记<br/>链接:https://www.jianshu.com/p/9945b47b4ea9<br/>來源:简书<br/>著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</p><p><br/></p>

【IPFS】IPFS部署分布式项目到开发机的基础实践

IPFS-Storjatangge 发表了文章 • 0 个评论 • 7 次浏览 • 2018-06-03 13:06 • 来自相关话题

什么是IPFSIPFS 是一个点对点的分布式文件系统,它希望将所有的计算设备都连接到同一个文件系统中。IPFS能做到去中心化的分布式部署IPFS旨在替代HTTP和为我们所有人建立更好的网络。安装以下地址进行下载 https://dist.ipfs.io/go-ipfs/... 查看全部
<h1>什么是IPFS</h1><blockquote><p>IPFS 是一个点对点的分布式文件系统,它希望将所有的计算设备都连接到同一个文件系统中。</p></blockquote><p>IPFS能做到去中心化的分布式部署</p><blockquote><p>IPFS旨在替代HTTP和为我们所有人建立更好的网络。</p></blockquote><h1><a></a>安装</h1><p>以下地址进行下载&nbsp;<br/><a href="https://dist.ipfs.io/go-ipfs/v0.4.10/go-ipfs_v0.4.10_darwin-amd64.tar.gz">https://dist.ipfs.io/go-ipfs/v0.4.10/go-ipfs_v0.4.10_darwin-amd64.tar.gz</a></p><blockquote><p>wget&nbsp;<a href="https://dist.ipfs.io/go-ipfs/v0.4.10/go-ipfs_v0.4.10_darwin-amd64.tar.gz">https://dist.ipfs.io/go-ipfs/v0.4.10/go-ipfs_v0.4.10_darwin-amd64.tar.gz</a>&nbsp;<br/>tar xvfz go-ipfs_v0.4.10_darwin-amd64.tar.gz&nbsp;<br/>mv go-ipfs/ipfs /usr/local/bin/ipfs</p></blockquote><p>GO环境&nbsp;<br/><a href="https://storage.googleapis.com/golang/go1.8.3.darwin-amd64.pkg">https://storage.googleapis.com/golang/go1.8.3.darwin-amd64.pkg</a></p><blockquote><p>go version&nbsp;<br/>go version go1.8.3 darwin/amd64</p></blockquote><h1><a></a>实践</h1><p>初始化</p><pre>ipfs&nbsp;init

initializing&nbsp;IPFS&nbsp;node&nbsp;at&nbsp;/Users/xiaoyu/.ipfs
generating&nbsp;2048-bit&nbsp;RSA&nbsp;keypair...done
peer&nbsp;identity:&nbsp;QmSTt7gDRf5RhWDQRAp516d9hDf5ZTeyi5mcjqnL61n9okto&nbsp;get&nbsp;started,&nbsp;enter:
ipfs&nbsp;cat&nbsp;/ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme

ipfs&nbsp;cat&nbsp;/ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme

Hello&nbsp;and&nbsp;Welcome&nbsp;to&nbsp;IPFS!

██╗██████╗&nbsp;███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗&nbsp;&nbsp;███████╗
██║██╔═══╝&nbsp;██╔══╝&nbsp;&nbsp;╚════██║
██║██║&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;██║&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;███████║
╚═╝╚═╝&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;╚═╝&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;╚══════╝

If&nbsp;you&#39;re&nbsp;seeing&nbsp;this,&nbsp;you&nbsp;have&nbsp;successfully&nbsp;installed
IPFS&nbsp;and&nbsp;are&nbsp;now&nbsp;interfacing&nbsp;with&nbsp;the&nbsp;ipfs&nbsp;merkledag!&nbsp;-------------------------------------------------------|&nbsp;Warning:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
|&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;alpha&nbsp;software.&nbsp;Use&nbsp;at&nbsp;your&nbsp;own&nbsp;discretion!&nbsp;|
|&nbsp;&nbsp;&nbsp;Much&nbsp;is&nbsp;missing&nbsp;or&nbsp;lacking&nbsp;polish.&nbsp;There&nbsp;are&nbsp;bugs.&nbsp;&nbsp;|
|&nbsp;&nbsp;&nbsp;Not&nbsp;yet&nbsp;secure.&nbsp;Read&nbsp;the&nbsp;security&nbsp;notes&nbsp;for&nbsp;more.&nbsp;&nbsp;&nbsp;|&nbsp;-------------------------------------------------------Check&nbsp;out&nbsp;some&nbsp;of&nbsp;the&nbsp;other&nbsp;files&nbsp;in&nbsp;this&nbsp;directory:

&nbsp;&nbsp;./about
&nbsp;&nbsp;./help
&nbsp;&nbsp;./quick-start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;--&nbsp;usage&nbsp;examples
&nbsp;&nbsp;./readme&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;--&nbsp;this&nbsp;file
&nbsp;&nbsp;./security-notes12345678910111213141516171819202122232425262728293031323334353637</pre><p>也就是这个文档,我们可以访问下面的文件进行访问</p><ul><li><p>./about</p></li><li><p>./help</p></li><li><p>./quick-start</p></li><li><p>./readme</p></li><li><p>./security-notes</p></li></ul><h1><a></a>quick-start</h1><pre>ipfs&nbsp;cat&nbsp;/ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/quick-start&nbsp;1</pre><pre>#&nbsp;0.1&nbsp;-&nbsp;Quick&nbsp;Start&nbsp;//快速开始This&nbsp;is&nbsp;a&nbsp;set&nbsp;of&nbsp;short&nbsp;examples&nbsp;with&nbsp;minimal&nbsp;explanation.&nbsp;It&nbsp;is&nbsp;meant&nbsp;asa&nbsp;&quot;quick&nbsp;start&quot;.&nbsp;Soon,&nbsp;we&#39;ll&nbsp;write&nbsp;a&nbsp;longer&nbsp;tour&nbsp;:-)


Add&nbsp;a&nbsp;file&nbsp;to&nbsp;ipfs://添加文件

&nbsp;&nbsp;echo&nbsp;&quot;hello&nbsp;world&quot;&nbsp;&gt;hello
&nbsp;&nbsp;ipfs&nbsp;add&nbsp;hello


View&nbsp;it:&nbsp;//查看文件

&nbsp;&nbsp;ipfs&nbsp;cat&nbsp;&lt;the-hash-you-got-here&gt;


Try&nbsp;a&nbsp;directory:&nbsp;//添加文件夹

&nbsp;&nbsp;mkdir&nbsp;foo
&nbsp;&nbsp;mkdir&nbsp;foo/bar
&nbsp;&nbsp;echo&nbsp;&quot;baz&quot;&nbsp;&gt;&nbsp;foo/baz
&nbsp;&nbsp;echo&nbsp;&quot;baz&quot;&nbsp;&gt;&nbsp;foo/bar/baz
&nbsp;&nbsp;ipfs&nbsp;add&nbsp;-r&nbsp;foo


View&nbsp;things:&nbsp;//列出查看文件和文件夹

&nbsp;&nbsp;ipfs&nbsp;ls&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;ls&nbsp;&lt;the-hash-here&gt;/bar
&nbsp;&nbsp;ipfs&nbsp;cat&nbsp;&lt;the-hash-here&gt;/baz
&nbsp;&nbsp;ipfs&nbsp;cat&nbsp;&lt;the-hash-here&gt;/bar/baz
&nbsp;&nbsp;ipfs&nbsp;cat&nbsp;&lt;the-hash-here&gt;/bar
&nbsp;&nbsp;ipfs&nbsp;ls&nbsp;&lt;the-hash-here&gt;/baz


References:&nbsp;//重定向

&nbsp;&nbsp;ipfs&nbsp;refs&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;refs&nbsp;-r&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;refs&nbsp;--help


Get://对比文件

&nbsp;&nbsp;ipfs&nbsp;get&nbsp;&lt;the-hash-here&gt;&nbsp;-o&nbsp;foo2
&nbsp;&nbsp;diff&nbsp;foo&nbsp;foo2


Objects://列出对象

&nbsp;&nbsp;ipfs&nbsp;object&nbsp;get&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;object&nbsp;get&nbsp;&lt;the-hash-here&gt;/foo2
&nbsp;&nbsp;ipfs&nbsp;object&nbsp;--help


Pin&nbsp;+&nbsp;GC:

&nbsp;&nbsp;ipfs&nbsp;pin&nbsp;add&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;repo&nbsp;gc
&nbsp;&nbsp;ipfs&nbsp;ls&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;pin&nbsp;rm&nbsp;&lt;the-hash-here&gt;
&nbsp;&nbsp;ipfs&nbsp;repo&nbsp;gc


Daemon:

&nbsp;&nbsp;ipfs&nbsp;daemon&nbsp;&nbsp;(in&nbsp;another&nbsp;terminal)
&nbsp;&nbsp;ipfs&nbsp;id


Network:

&nbsp;&nbsp;(must&nbsp;be&nbsp;online)
&nbsp;&nbsp;ipfs&nbsp;swarm&nbsp;peers
&nbsp;&nbsp;ipfs&nbsp;id
&nbsp;&nbsp;ipfs&nbsp;cat&nbsp;&lt;hash-of-remote-object&gt;


Mount:

&nbsp;&nbsp;(warning:&nbsp;fuse&nbsp;is&nbsp;finicky!)
&nbsp;&nbsp;ipfs&nbsp;mount
&nbsp;&nbsp;cd&nbsp;/ipfs/&lt;the-hash-here&gt;
&nbsp;&nbsp;ls


Tool:&nbsp;//工具

&nbsp;&nbsp;ipfs&nbsp;version
&nbsp;&nbsp;ipfs&nbsp;update
&nbsp;&nbsp;ipfs&nbsp;commands
&nbsp;&nbsp;ipfs&nbsp;config&nbsp;--help&nbsp;&nbsp;open&nbsp;http://localhost:5001/webuiBrowse:

&nbsp;&nbsp;webui:

&nbsp;&nbsp;&nbsp;&nbsp;http://localhost:5001/webui

&nbsp;&nbsp;video:

&nbsp;&nbsp;&nbsp;&nbsp;http://localhost:8080/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXse

&nbsp;&nbsp;images:

&nbsp;&nbsp;&nbsp;&nbsp;http://localhost:8080/ipfs/QmZpc3HvfjEXvLWGQPWbHk3AjD5j8NEN4gmFN8Jmrd5g83/cs

&nbsp;&nbsp;markdown&nbsp;renderer&nbsp;app:

&nbsp;&nbsp;&nbsp;&nbsp;http://localhost:8080/ipfs/QmX7M9CiYXjVeFnkfVGf3y5ixTZ2ACeSGyL1vBJY1HvQPp/mdown123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113</pre><h1><a></a>尝试运行</h1><pre>ipfs&nbsp;daemon

Initializing&nbsp;daemon...
Adjusting&nbsp;current&nbsp;ulimit&nbsp;to&nbsp;2048...
Successfully&nbsp;raised&nbsp;file&nbsp;descriptor&nbsp;limit&nbsp;to&nbsp;2048.Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/127.0.0.1/tcp/4001Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/192.168.0.106/tcp/4001Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/192.168.1.5/tcp/50092Swarm&nbsp;listening&nbsp;on&nbsp;/ip6/::1/tcp/4001API&nbsp;server&nbsp;listening&nbsp;on&nbsp;/ip4/127.0.0.1/tcp/5001Gateway&nbsp;(readonly)&nbsp;server&nbsp;listening&nbsp;on&nbsp;/ip4/127.0.0.1/tcp/8080Daemon&nbsp;is&nbsp;ready12345678910111213</pre><p>注意此时终端的命令没有结束,也就是说目前的启动是不能关闭终端的</p><p>此时访问之前的图片网址<code>http://localhost:8080/ipfs/QmZpc3HvfjEXvLWGQPWbHk3AjD5j8NEN4gmFN8Jmrd5g83/cs</code>,展示效果如下,文件访问成功。</p><p><img src="https://img-blog.csdn.net/20170814231927498?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlhbmRpYW54aXl1X2dlZWs=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title=""/></p><p>同理,访问视频文件和markdown文件也能正常访问。</p><p>在demo中给的webui实际上是一个管理后台,可以查看这个项目被放到了全球多少个节点上。</p><p><br/></p>

入门篇 - IPFS+IPNS+个人博客搭建

IPFS-Storjatangge 发表了文章 • 0 个评论 • 6 次浏览 • 2018-06-03 13:04 • 来自相关话题

入门篇 - IPFS+IPNS+个人博客搭建1. 如何在IPFS新增一个文件1.1 新建file.txt文件打开终端,切换到桌面,新建一个文件夹1121,切换到1121中,通过vi新建一个文件file.txt,文件里面输入春哥微信号liyc1215保存并且退出。localhost... 查看全部
<h1>入门篇 - IPFS+IPNS+个人博客搭建</h1><h2>1. 如何在IPFS新增一个文件</h2><h3><a></a>1.1 新建file.txt文件</h3><p>打开终端,切换到桌面,新建一个文件夹<code>1121</code>,切换到<code>1121</code>中,通过<code>vi</code>新建一个文件<code>file.txt</code>,文件里面输入春哥微信号<code>liyc1215</code>保存并且退出。</p><pre>localhost:Desktop&nbsp;yuechunli$&nbsp;pwd
/Users/liyuechun/Desktoplocalhost:Desktop&nbsp;yuechunli$&nbsp;mkdir&nbsp;1121localhost:Desktop&nbsp;yuechunli$&nbsp;cd&nbsp;1121/localhost:1121&nbsp;yuechunli$&nbsp;vi&nbsp;file.txtlocalhost:1121&nbsp;yuechunli$&nbsp;cat&nbsp;file.txt&nbsp;liyc1215localhost:1121&nbsp;yuechunli$&nbsp;12345678</pre><h3><a></a>1.2 查看ipfs相关命令</h3><pre>localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;help
USAGE
&nbsp;&nbsp;ipfs&nbsp;-&nbsp;Global&nbsp;p2p&nbsp;merkle-dag&nbsp;filesystem.

&nbsp;&nbsp;ipfs&nbsp;[--config=&lt;config&gt;&nbsp;|&nbsp;-c]&nbsp;[--debug=&lt;debug&gt;&nbsp;|&nbsp;-D]&nbsp;[--help=&lt;help&gt;]&nbsp;[-h=&lt;h&gt;]&nbsp;[--local=&lt;local&gt;&nbsp;|&nbsp;-L]&nbsp;[--api=&lt;api&gt;]&nbsp;&lt;command&gt;&nbsp;...SUBCOMMANDS
&nbsp;&nbsp;BASIC&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initialize&nbsp;ipfs&nbsp;local&nbsp;configuration&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&lt;path&gt;&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;a&nbsp;file&nbsp;to&nbsp;IPFS
&nbsp;&nbsp;&nbsp;&nbsp;cat&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;IPFS&nbsp;object&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Download&nbsp;IPFS&nbsp;objects
&nbsp;&nbsp;&nbsp;&nbsp;ls&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;links&nbsp;from&nbsp;an&nbsp;object
&nbsp;&nbsp;&nbsp;&nbsp;refs&nbsp;&lt;ref&gt;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;hashes&nbsp;of&nbsp;links&nbsp;from&nbsp;an&nbsp;object

&nbsp;&nbsp;DATA&nbsp;STRUCTURE&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;raw&nbsp;blocks&nbsp;in&nbsp;the&nbsp;datastore
&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;raw&nbsp;dag&nbsp;nodes&nbsp;&nbsp;&nbsp;&nbsp;files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;objects&nbsp;as&nbsp;if&nbsp;they&nbsp;were&nbsp;a&nbsp;unix&nbsp;filesystem
&nbsp;&nbsp;&nbsp;&nbsp;dag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interact&nbsp;with&nbsp;IPLD&nbsp;documents&nbsp;(experimental)

&nbsp;&nbsp;ADVANCED&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;daemon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start&nbsp;a&nbsp;long-running&nbsp;daemon&nbsp;process
&nbsp;&nbsp;&nbsp;&nbsp;mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mount&nbsp;an&nbsp;IPFS&nbsp;read-only&nbsp;mountpoint
&nbsp;&nbsp;&nbsp;&nbsp;resolve&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resolve&nbsp;any&nbsp;type&nbsp;of&nbsp;name
&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Publish&nbsp;and&nbsp;resolve&nbsp;IPNS&nbsp;names
&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create&nbsp;and&nbsp;list&nbsp;IPNS&nbsp;name&nbsp;keypairs
&nbsp;&nbsp;&nbsp;&nbsp;dns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resolve&nbsp;DNS&nbsp;links
&nbsp;&nbsp;&nbsp;&nbsp;pin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pin&nbsp;objects&nbsp;to&nbsp;local&nbsp;storage
&nbsp;&nbsp;&nbsp;&nbsp;repo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manipulate&nbsp;the&nbsp;IPFS&nbsp;repository
&nbsp;&nbsp;&nbsp;&nbsp;stats&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Various&nbsp;operational&nbsp;stats
&nbsp;&nbsp;&nbsp;&nbsp;p2p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Libp2p&nbsp;stream&nbsp;mounting
&nbsp;&nbsp;&nbsp;&nbsp;filestore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage&nbsp;the&nbsp;filestore&nbsp;(experimental)

&nbsp;&nbsp;NETWORK&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;info&nbsp;about&nbsp;IPFS&nbsp;peers
&nbsp;&nbsp;&nbsp;&nbsp;bootstrap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;or&nbsp;remove&nbsp;bootstrap&nbsp;peers
&nbsp;&nbsp;&nbsp;&nbsp;swarm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage&nbsp;connections&nbsp;to&nbsp;the&nbsp;p2p&nbsp;network
&nbsp;&nbsp;&nbsp;&nbsp;dht&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;the&nbsp;DHT&nbsp;for&nbsp;values&nbsp;or&nbsp;peers
&nbsp;&nbsp;&nbsp;&nbsp;ping&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Measure&nbsp;the&nbsp;latency&nbsp;of&nbsp;a&nbsp;connection
&nbsp;&nbsp;&nbsp;&nbsp;diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print&nbsp;diagnostics

&nbsp;&nbsp;TOOL&nbsp;COMMANDS
&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage&nbsp;configuration&nbsp;&nbsp;&nbsp;&nbsp;version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;ipfs&nbsp;version&nbsp;information
&nbsp;&nbsp;&nbsp;&nbsp;update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Download&nbsp;and&nbsp;apply&nbsp;go-ipfs&nbsp;updates
&nbsp;&nbsp;&nbsp;&nbsp;commands&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;all&nbsp;available&nbsp;commands1234567891011121314151617181920212223242526272829303132333435363738394041424344454647</pre><h3><a></a>1.3 将file.txt添加到ipfs节点</h3><pre>localhost:1121&nbsp;yuechunli$&nbsp;ls
file.txtlocalhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;add&nbsp;file.txt&nbsp;added&nbsp;QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T&nbsp;file.txtlocalhost:1121&nbsp;yuechunli$&nbsp;cat&nbsp;file.txt&nbsp;liyc1215localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;cat&nbsp;QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
liyc1215localhost:1121&nbsp;yuechunli$&nbsp;123456789</pre><p>当执行完<code>ipfs add file.txt</code>这个命令以后,会将<code>file.txt</code>添加到<code>ipfs</code>当前的节点中,并且会对<code>file.txt</code>文件生成一个唯一的<code>hash``QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T</code>,如果想查看本地<code>ipfs</code>节点的数据,可以通过<code>ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T</code>进行查看。</p><p>⚠️:当我试图通过<code>http://ipfs.io/ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T</code>进行数据访问时,无法访问,如下图所示:</p><p><img src="/ueditor/php/upload/image/20180603/1528002276937245.gif" alt="" title=""/></p><p>⚠️:虽然数据已经添加到当前的你自己的<code>IPFS</code>节点中,但是并没有同步到<code>IPFS</code>网络,所以暂时在网络上无法访问。</p><p>⚠️:重要:接下来执行下面的命令同步节点数据到<code>IPFS</code>网络,再试图在网络上查看数据。</p><ul><li><p>同步节点</p></li></ul><p>新建一个终端,执行<code>ipfs daemon</code>。</p><pre>localhost:.ipfs&nbsp;yuechunli$&nbsp;ipfs&nbsp;daemon
Initializing&nbsp;daemon...
Adjusting&nbsp;current&nbsp;ulimit&nbsp;to&nbsp;2048...
Successfully&nbsp;raised&nbsp;file&nbsp;descriptor&nbsp;limit&nbsp;to&nbsp;2048.Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/111.196.246.151/tcp/3637Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/127.0.0.1/tcp/4001Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/169.254.170.167/tcp/4001Swarm&nbsp;listening&nbsp;on&nbsp;/ip4/192.168.0.107/tcp/4001Swarm&nbsp;listening&nbsp;on&nbsp;/ip6/::1/tcp/4001API&nbsp;server&nbsp;listening&nbsp;on&nbsp;/ip4/127.0.0.1/tcp/5001Gateway&nbsp;(readonly)&nbsp;server&nbsp;listening&nbsp;on&nbsp;/ip4/127.0.0.1/tcp/8080Daemon&nbsp;is&nbsp;ready123456789101112</pre><ul><li><p>从<code>IPFS</code>网络查看数据</p></li></ul><p>浏览器访问<a href="https://ipfs.io/ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T">https://ipfs.io/ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T</a></p><p><img src="/ueditor/php/upload/image/20180603/1528002276227923.png" alt="黎跃春 微信" title=""/></p><h2><a></a>2. 通过ipfs创建目录存储文件</h2><p>在着上面的步骤走,我们可以通过<code>ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T&nbsp;<br/>liyc1215</code>查看添加到<code>ipfs</code>网络的<code>file.txt</code>文件的内容,如下:</p><pre>localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;cat&nbsp;QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7Tliyc1215localhost:1121&nbsp;yuechunli$&nbsp;123</pre><p>当然,我们也可以通过<code>ipfs</code>的相关命令在<code>ipfs</code>的根目录下面创建文件夹,并且将<code>file.txt</code>文件移动或者拷贝到我们创建的文件夹中。</p><p>⚠️:cp不会改变文件hash,mv会改变hash寻址。</p><pre>localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;cat&nbsp;QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
liyc1215localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;files&nbsp;mkdir&nbsp;/LiYueChunlocalhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;files&nbsp;cp&nbsp;/ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T&nbsp;/LiYueChun/file.txtlocalhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;files&nbsp;ls&nbsp;/
LiYueChunlocalhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;files&nbsp;ls&nbsp;/LiYueChun/
file.txtlocalhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;files&nbsp;read&nbsp;/LiYueChun/file.txtliyc1215localhost:1121&nbsp;yuechunli$&nbsp;1234567891011</pre><h2><a></a>3. 如何在IPFS新增一个目录</h2><h3><a></a>3.1 使用ipfs add -r可以上传一整个目录</h3><pre>localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;add&nbsp;-r&nbsp;ipfs-tutorial/added&nbsp;QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc&nbsp;ipfs-tutorial/contactme.txt
added&nbsp;QmfKdWsguobA3aDPvSxLB3Bq4HMKyqKSgFr2NFUuVH8n31&nbsp;ipfs-tutorial/eth-fabric.png
added&nbsp;QmXe8jTxTh5MZP6BK5cnj19mXNTKVMzNyUJZUHuYyr5dk1&nbsp;ipfs-tutorial/gongzhonghao.png
added&nbsp;QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek&nbsp;ipfs-tutorial12345</pre><h4>3.2 通过路径访问contactme.txt文件数据</h4><p>如果我们上传的是目录,那么可以通过下面几种方式访问到<code>contactme.txt</code>文件的数据。</p><pre>localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;cat&nbsp;QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
微信:liyc1215
区块链技术交流群:348924182公众号:区块链部落localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;cat&nbsp;/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
微信:liyc1215
区块链技术交流群:348924182公众号:区块链部落localhost:1121&nbsp;yuechunli$&nbsp;ipfs&nbsp;cat&nbsp;/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt微信:liyc1215
区块链技术交流群:348924182公众号:区块链部落localhost:1121&nbsp;yuechunli$&nbsp;12345678910111213</pre><h3><a></a>3.3 通过Hash查看数据IPFS网络数据</h3><ul><li><p>访问目录:<a href="https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek">https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek</a></p></li></ul><p><img src="/ueditor/php/upload/image/20180603/1528002277650866.png" alt="" title=""/></p><ul><li><p>通过目录访问文件:<a href="https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt">https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt</a>&nbsp;<br/><img src="/ueditor/php/upload/image/20180603/1528002277725965.png" alt="" title=""/></p></li><li><p>通过文件hash直接访问:<a href="https://ipfs.io/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc">https://ipfs.io/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc</a></p></li></ul><p><img src="/ueditor/php/upload/image/20180603/1528002277945017.png" alt="" title=""/></p><h2><a></a>4. 创建简易的网页发布到IPFS</h2><p>在这里我先自己写一个简单的网页给大家演示,先在桌面新建一个<code>site</code>文件夹,然后按照下面的步骤在<code>site</code>文件夹中建立<code>index.html</code>和<code>style.css</code>文件。</p><h3><a></a>4.1 创建一个index.html文件</h3><pre>&lt;!DOCTYPE&nbsp;html&gt;&lt;html&nbsp;lang=&quot;en&quot;&gt;&lt;head&gt;
&nbsp;&nbsp;&lt;meta&nbsp;charset=&quot;UTF-8&quot;&gt;
&nbsp;&nbsp;&lt;title&gt;Hello&nbsp;IPFS!&lt;/title&gt;
&nbsp;&nbsp;&lt;link&nbsp;rel=&quot;stylesheet&quot;&nbsp;href=&quot;./style.css&quot;&nbsp;/&gt;&lt;/head&gt;&lt;body&gt;
&nbsp;&nbsp;&lt;h1&gt;Hello&nbsp;IPFS!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;1234567891011</pre><h3><a></a>4.2 创建一个style.css文件</h3><pre>h1&nbsp;{&nbsp;&nbsp;color:&nbsp;green;}123</pre><h3><a></a>4.3 添加到ipfs</h3><pre>localhost:Desktop&nbsp;yuechunli$&nbsp;ipfs&nbsp;add&nbsp;-r&nbsp;site/
added&nbsp;QmWG5rbgT9H77TGq49RXNoqN8M7DNKMnMX425nkmCB6BjS&nbsp;site/index.htmladded&nbsp;QmfGLJ3mryLvicQqzdsghq4QRhptKJtBAPe7yDJxsBGSuy&nbsp;site/style.cssadded&nbsp;QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp&nbsp;site1234</pre><p>最后一行是项目根目录的<code>hash</code>,你先通过<code>ipfs daemon</code>同步网络,然后可以通过<code>https://ipfs.io/ipfs/&lt;你的项目根目录hash&gt;</code>,即<code>https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp</code>访问项目。</p><h3><a></a>4.4 网络同步</h3><pre>localhost:Desktop&nbsp;yuechunli$&nbsp;ipfs&nbsp;daemon1</pre><h3><a></a>4.5 访问网站</h3><p>浏览器打开<a href="https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp">https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp</a>,效果图如下:</p><p><img src="/ueditor/php/upload/image/20180603/1528002277423295.png" alt="" title=""/></p><h3><a></a>4.6 发布到IPNS</h3><p>当我们修改网站内容重新添加到<code>ipfs</code>时,<code>hash</code>会发生变化,当我们网站更新时,我们可以将网站发布到IPNS,在IPNS中,允许我们节点的域名空间中引用一个<code>IPFS hash</code>,也就是说我们可以通过节点<code>ID</code>对项目根目录的<code>IPFS HASH</code>进行绑定,以后我们访问网站时直接通过节点·ID<code>访问即可,当我们更新博客时,重新发布到</code>IPNS`即可。</p><pre>localhost:~&nbsp;yuechunli$&nbsp;ipfs&nbsp;name&nbsp;publish&nbsp;QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
Published&nbsp;to&nbsp;QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP:&nbsp;/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
localhost:~&nbsp;yuechunli$&nbsp;ipfs&nbsp;id{&nbsp;&nbsp;&nbsp;&nbsp;&quot;ID&quot;:&nbsp;&quot;QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP&quot;}123456</pre><p>当我们执行<code>ipfs name publish</code>命令时,会返回我们的节点<code>ID</code>,你可以通过<code>ipfs id</code>进行查看验证是否是你的节点<code>ID</code>。</p><p>⚠️:验证</p><pre>$&nbsp;ipfs&nbsp;name&nbsp;resolve&nbsp;&lt;peerId&gt;1</pre><pre>localhost:~&nbsp;yuechunli$&nbsp;ipfs&nbsp;name&nbsp;resolve&nbsp;QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRplocalhost:~&nbsp;yuechunli$&nbsp;123</pre><p>⚠️:当然我们现在就可以通过<code>IPNS</code>进行访问了。</p><pre>https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP1</pre><p>⚠️⚠️⚠️:注意上面是ipns而不是ipfs。</p><p><img src="/ueditor/php/upload/image/20180603/1528002278378323.png" alt="" title=""/></p><p>⚠️:如果你网站数据修改,需要重新发布到IPNS。</p><h2><a></a>5. 发布个人博客</h2><p>你可以通过<code>Hugo</code>按照官方文档创建一个漂亮的静态博客<a href="http://gohugo.io/getting-started/quick-start/">Hugo官方网站</a>,当然你也可以自己编写,或者使用其他开源项目搭建。</p><h3><a></a>5.1 搭建静态博客</h3><p>大家可以自己搭建,也可以直接下载我的博客源码直接搭建。</p><p>源码地址:<a href="http://github.com/liyuechun/ipfs_blogger">http://github.com/liyuechun/ipfs_blogger</a></p><h3><a></a>5.2 节点ID替换</h3><ul><li><p>查看你的节点ID</p></li></ul><pre>localhost:ipfs_pin&nbsp;yuechunli$&nbsp;ipfs&nbsp;id
{&nbsp;&nbsp;&nbsp;&nbsp;&quot;ID&quot;:&nbsp;&quot;《your&nbsp;peer&nbsp;id》&quot;}localhost:ipfs_pin&nbsp;yuechunli$&nbsp;12345</pre><p>在上面的源码中全局搜索将源码里面的<code>QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP</code>替换成你自己的<code>ID</code>。</p><p>接下来重复<a href="https://blog.csdn.net/liyuechun520/article/details/78599374?locationNum=2&fps=1#4-%E5%88%9B%E5%BB%BA%E7%AE%80%E6%98%93%E7%9A%84%E7%BD%91%E9%A1%B5%E5%8F%91%E5%B8%83%E5%88%B0IPFS">4. 创建简易的网页发布到IPFS</a>的操作步骤即可。</p><h3><a></a>5.3 浏览博客</h3><p>浏览器打开<a href="https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP/">https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP/</a>查看项目效果。</p><p><img src="/ueditor/php/upload/image/20180603/1528002278731773.png" alt="IPFS 博客项目效果图" title=""/></p><p><br/></p>

Filecoin: 一个去中心式存储网络

IPFS-Storjatangge 发表了文章 • 0 个评论 • 7 次浏览 • 2018-06-03 12:58 • 来自相关话题

4.Filecoin:一个DSN架构Filecoin DSN是一个建立在激励机制上,可审计、可查证的去中心化存储网络。客户向矿工支付代币来获取数据存储和检索数据服务,矿工提供存储空间和传输带宽来获得回报。矿工们只有当网络能够查证他们在正确提供服务的时候才能获得报酬。在本节中,我们... 查看全部
<h2>4.Filecoin:一个DSN架构</h2><p>Filecoin DSN是一个建立在激励机制上,可审计、可查证的去中心化存储网络。客户向矿工支付代币来获取数据存储和检索数据服务,矿工提供存储空间和传输带宽来获得回报。矿工们只有当网络能够查证他们在正确提供服务的时候才能获得报酬。</p><p>在本节中,我们通过DSN的定义和“时空证明”来梳理Filecoin DSN架构。</p><p><strong>4.1&nbsp;</strong><strong>设置</strong></p><p><strong>4.1.1&nbsp;</strong><strong>参与者</strong></p><p>任何用户都可以成为、存储矿工和/或检索矿工。</p><ul><li><p>客户在DSN中通过Put和Get请求存储或检索数据,并支付代币。</p></li><li><p>存储矿工为网络提供数据存储。存储矿工通过提供磁盘空间和响应Put请求来参与Filecoin运作。要想成为存储矿工,用户必须用与存储空间成比例的抵押品来抵押。存储矿工通过在特定时间内存储数据,来响应用户的Put请求。存储矿工生成时空证明并提交到区块链网络,来证明他们在特定时间内存储了数据。如果数据失效或丢失,存储矿工将被罚没部分抵押品。存储矿工也可以挖掘新区块。如果挖到了新区块,矿工就能获得挖取新块的奖励和新区块中的交易费用。</p></li><li><p>检索矿工为网络提供数据检索服务。检索矿工通过提供用户Get请求所需要的数据来参与Filecoin运作。和存储矿工不同,他们不需要抵押品,不需要提交存储数据,也不需要提供存储证明。存储矿工同样可以担任检索矿工。检索矿工可以直接从客户或者从检索市场赚取收益。</p></li></ul><p><strong>4.1.2&nbsp;</strong><strong>网络,</strong><strong>N</strong></p><p>我们将运行在Filecoin各个节点上的全体用户抽象为一个实体:网络。这个网络作为中介运行整个管理协议。简单来说,区块链中的每个新区块,都由全节点构成的网络来管理。网络可以管理可用存储,验证抵押品,审核存储证明以及修复可能存在的故障。</p><p><strong>4.1.3&nbsp;</strong><strong>账本</strong></p><p>我们的协议应用在基于账本的货币上。一般来说,我们管这个叫账本 L。在任意给定的时间t(也叫时期)内,所有的用户都能访问t时期的账本Lt,它是这段时期内交易序列的记录。账本只能被追加,不能被篡改。Filecoin DSN协议可以运行在任意可验证Filecoin证明的账本上。在第六节中我们会展示了如何基于有效工作建立一个账本。</p><p><strong>4.1.4&nbsp;</strong><strong>市场</strong></p><p>存储的需求和供给在两个Filecoin市场相遇:存储市场和检索市场。这两个市场属于去中心化交易所,我们第5节中对其进行阐述。简而言之,客户和矿工们通过向各自的市场提交订单来为服务定价。交易所为客户和矿工们提供了匹配交易和牵线的方法。运行管理协议后,如果服务请求被成功提供,网络会确保矿工得到奖励,客户得到服务。</p><p><strong>4.2&nbsp;</strong><strong>数据结构</strong></p><p><strong>片段</strong>&nbsp;片段指客户在DSN所存数据的某一部分。例如,数据可以被随意划分为许多片段,每个片段可以由不同的存储矿工来存储。</p><p><strong>扇区</strong>&nbsp;扇区指存储矿工向网络提供的磁盘空间。矿工将客户的数据片段存储到扇区,并以此赚取代币。为了存储片段,矿工们必须向网络抵押他们的扇区。</p><p><strong>分配表</strong>&nbsp;分配表是一个数据表,记录数据片段的流向和其分配的扇区。分配表在账目下的区块中都会更新,它的Merkle根存储在最新的区块中。在实际操作中,该表用来维持DSN的状态,证明验证的过程中能够保证快速查找。详细内容请参考图5。</p><p><strong>订单</strong>&nbsp;订单是请求或提供服务的声明。客户向市场提交出价来请求服务(分别在存储数据的存储市场和检索数据的检索市场),矿工们提交应答订单来提供服务。订单数据结构如图10所示。市场协议将在第5节详细介绍。</p><p><strong>订单簿</strong>&nbsp;订单簿是订单的集合。存储市场订单簿请查看第5.2.2节,检索市场订单簿第5.3.3节。</p><p><strong>抵押</strong>&nbsp;抵押是向网络提供存储(特别是扇区)的承诺。想要在存储市场接受订单,存储矿工必须将抵押提交给总账。抵押包括了抵押扇区的大小和存储矿工的抵押品(详见图5)。</p><p style="text-align:center"><img class="alignnone size-full wp-image-788" src="/ueditor/php/upload/image/20180603/1528001711427753.jpg" alt="" width="495" height="300"/></p><p><em>Figure 5: Data Structures in a DSN scheme</em></p><p><strong>4.3&nbsp;</strong><strong>协议</strong></p><p>本节中我们通过对客户、网络和矿工的介绍,对Filecoin DSN有了一个整体的概括。我们在图7中给出了Get和Put协议的方法,在图8中给出了Manage协议,并用图6给出了一个协议实例。Filecoin整体的协议概览请参见图1。</p><p><strong>4.3.1&nbsp;</strong><strong>客户周期</strong></p><p>本节会简要介绍客户周期的概念;下文中各协议的深入解释请参考第五节。</p><ol><li><p><strong>Put:客户在Filecoin 中存储数据。</strong></p></li></ol><p>客户通过向矿工支付代币可以对数据进行存储。Put协议在节中有详细介绍。</p><p>客户向存储市场的订单簿发起投标(通过向区块链提交订单),就启动了Put协议。当有匹配的矿工应答时,客户就可以将数据片段发送给矿工。双方签署交易订单,并将其发送到存储市场的订单簿。</p><p>客户应当能够通过提交多重订单(或者在订单中指定复制扇区)来决定数据的拷贝数量。更高的冗余度可以提高储存的容错率。</p><ol><li><p><strong>Get:客户从Filecoin中取回数据。</strong></p></li></ol><p>客户可以通过向检索矿工支付代币来获取DSN中的任何数据。Get协议在5.3节中有更详细的解释。</p><p>客户向检索市场的订单簿投标(向网络提交订单),就开始了get协议。当有匹配的矿工应答被找到,客户就会从矿工处得到数据片段。收到片段后,双方签署交易协议并提交到区块链,证明交易已完成。</p><p><strong>4.3.2&nbsp;</strong><strong>挖矿周期(对存储矿工)</strong></p><p>我们简单介绍一下挖矿周期。</p><ol><li><p><strong>Pledge:存储矿工向网络抵押存储。</strong></p></li></ol><p>存储矿工通过<strong>Manage.PledgeSector</strong>在区块链中存放抵押品,来保证向网络提供稳定的存储。抵押品为了保证服务而存在,如果矿工为所存储的数据生成了存储量证明,抵押品就会被退回。如果没有成功生成存储量证明,矿工就得不到抵押品了。</p><p>一旦抵押交易在区块链中出现,矿工就可以在存储市场中提供存。矿工们设置价格,并响应市场订单簿中的订单要求。</p><p><strong>Manage.PledgeSector</strong></p><ul><li><p>inputs:</p></li></ul><p>– current allocation table&nbsp;<strong>allocTable</strong></p><p>– pledge request<strong>&nbsp;pledge</strong></p><ul><li><p>outputs:&nbsp;<strong>allocTable&#39;</strong></p></li></ul><ol><li><p><strong>Receive Orders:存储矿工从存储市场获取存储请求。</strong></p></li></ol><p>一旦抵押交易出现在区块链中(在AllocTable中),矿工就能在存储市场中提供存储。他们设定价格并通过Put.AddOrders向市场订单簿响应订单。</p><p><strong>Put.AddOrders</strong></p><ul><li><p>inputs: list of orders<strong>.On</strong></p></li><li><p>outputs: bit&nbsp;<strong>b</strong>, equals 1 if successful</p></li></ul><p>通过<strong>Put.MatchOrders</strong>来对客户的报价订单进行匹配。</p><p><strong>Put.MatchOrders</strong></p><ul><li><p>inputs:</p></li></ul><p>–the current Storage Market&nbsp;<strong>OrderBoo</strong>k</p><p>– query order to match&nbsp;<strong>Oq</strong></p><ul><li><p>outputs: matching orders&nbsp;<strong>.On</strong></p></li></ul><p>一旦订单匹配,客户就将数据发给存储矿工。存储矿工接收到数据后,运行<strong>Put.ReceivePiece</strong>&nbsp;。数据接收完成后,矿工和客户签署交易订单并提交到区块链。</p><p><strong>Put.ReceivePiece</strong></p><ul><li><p>inputs:</p></li></ul><p>– signing key for Mj</p><p>– current orderbook&nbsp;<strong>OrderBook</strong></p><p>– ask order&nbsp;<strong>Oask</strong></p><p>– bid order&nbsp;<strong>Obid</strong></p><p>– piece&nbsp;<strong>p</strong></p><ul><li><p>outputs: deal order&nbsp;<strong>Odeal&nbsp;</strong>signed by&nbsp;<strong>Ci&nbsp;</strong>and&nbsp;<strong>Mj</strong></p></li></ul><ol><li><p><strong>Seal:存储矿工为数据片段准备未来证明。</strong></p></li></ol><p>存储矿工的存储空间被切分为很多扇区,每个扇区包括了分配给矿工的数据片段。网络通过分配表来记录每个存储矿工的扇区。当一个扇区被填满了,这个扇区就被密封(sealed)起来。密封是一种缓慢的顺序操作。密封可以将扇区中的数据转换成为唯一的物理副本,并与存储矿工的公钥相关联。密封在复制证明中是一项必须的操作,相关问题可参见第3.4节。</p><p><strong>Manage.SealSector</strong></p><ul><li><p>inputs:</p></li></ul><p>– miner public/private key pair&nbsp;<strong>M</strong></p><p>– sector index<strong>&nbsp;j</strong></p><p>– allocation table&nbsp;<strong>allocTable</strong></p><ul><li><p>outputs: a proof&nbsp;<strong>πSEAL</strong>, a root hash&nbsp;<strong>rt</strong></p></li></ul><ol><li><p><strong>Prove:存储矿工证明他们正在存储数据。</strong></p></li></ol><p>当存储矿工被分配了数据时,必须重复生成复制证明来确保他们正在存储数据(详情参看第3节)。证明被发布在区块链中,并由网络来验证。</p><p><strong>Manage.ProveSector</strong></p><ul><li><p>inputs:</p></li></ul><p>– miner public/private key pair&nbsp;<strong>M</strong></p><p>– sector index&nbsp;<strong>j</strong></p><p>– challenge&nbsp;<strong>c</strong></p><ul><li><p>outputs: a proof&nbsp;<strong>πPOS</strong></p></li></ul><p><strong>4.3.3&nbsp;</strong><strong>挖矿周期(对于检索矿工)</strong></p><p>本节简要概括检索矿工的挖矿周期。</p><ol><li><p><strong>Receive Orders:检索矿工从检索市场得到获取数据的请求。</strong></p></li></ol><p>检索矿工设置价格并发送到市场订单簿,并通过向网络发送报价。</p><p><strong>Get.AddOrders</strong></p><ul><li><p>inputs: list of orders&nbsp;<strong>.On</strong></p></li><li><p>outputs: none</p></li></ul><p>然后检索矿工检查是否与客户的订单报价匹配。</p><p><strong>Get.MatchOrders</strong></p><ul><li><p>inputs:</p></li></ul><p>– the current Retrieval Market&nbsp;<strong>OrderBook</strong></p><p>– query order to match<strong>&nbsp;Oq</strong></p><ul><li><p>outputs: matching orders O1..On</p></li></ul><ol><li><p><strong>Send:检索矿工向客户发送数据碎片。</strong></p></li></ol><p>一旦订单匹配,检索矿工就将数据发送给客户(第5.3节)。数据接收完成后,矿工和客户就签署交易订单提交到区块链。</p><p><strong>Put.SendPieces</strong></p><ul><li><p>inputs: – an ask order<strong>&nbsp;Oask</strong></p></li></ul><p>– a bid order<strong>&nbsp;Obid</strong></p><p>– a piece<strong>&nbsp;p</strong></p><ul><li><p>outputs: a deal order<strong>&nbsp;Odeal&nbsp;</strong>signed by&nbsp;<strong>Mi</strong></p></li></ul><p><strong>4.3.4&nbsp;</strong><strong>网络周期</strong></p><p>本节给出简单的网络操作概述。</p><ol><li><p><strong>Assign:网络将客户的数据片段分配给存储矿工的扇区。</strong></p></li></ol><p>客户通过向存储市场提交订单来启动Put协议。当询价单和报价单匹配的时候,参与各方共同为交易担保并向市场提交订单。此时,网络将数据分配给矿工,并将其记录到分配表中。</p><p><strong>Manage.AssignOrders</strong></p><ul><li><p>inputs:</p></li></ul><p>– deal orders<strong>&nbsp;O1deal..Ondeal</strong></p><p>– allocation table&nbsp;<strong>allocTable</strong></p><ul><li><p>outputs: updated allocation table&nbsp;<strong>allocTable&#39;</strong></p></li></ul><ol><li><p><strong>Repair:网络发现故障并试图修复</strong></p></li></ol><p>所有的存储分配都是全网公开的。在每个区块中,网络都会检查储存分配的证明是否存在,以确保它们有效,并按照下列要求正确工作:</p><ul><li><p>如果有部分证明丢失或失效,网络会罚没部分抵押品来惩罚存储矿工。</p></li><li><p>如果存在大量的证明丢失或失效(由系统参数Δfault定义),网络会认定存储矿工存在故障,将订单设定为失效,并为这部分数据引入新订单,重新进入市场。</p></li><li><p>如果所有该数据的存储矿工都发生故障,则认定该数据丢失,客户获得退款。</p></li></ul><p><strong>Manage.RepairOrders</strong></p><ul><li><p>inputs:</p></li></ul><p>– current time<strong>&nbsp;t</strong></p><p>– current ledger<strong>&nbsp;L</strong></p><p>– table of storage allocations<strong>&nbsp;allocTable</strong></p><ul><li><p>outputs: orders to repair&nbsp;<strong>O1.Ondeal</strong>, updated allocation table&nbsp;<strong>allocTable</strong></p></li></ul><p><img class="alignnone size-full wp-image-789" src="/ueditor/php/upload/image/20180603/1528001711287401.jpg" alt="" width="640" height="485"/></p><p><em>Figure 6: Example execution of the Filecoin DSN, grouped by party and sorted chronologically by row</em></p><p><strong>4.4&nbsp;</strong><strong>担保和要求</strong></p><p>以下是关于Filecoin DSN如何实现完整性、可恢复性、公开可验证性和激励兼容性的相关条款。</p><ul><li><p>完整性的实现:数据片段以加密的哈希值来命名,在Put请求后,客户只需要存储哈希即可通过Get操作来检索数据,并可对收到的数据进行完整性检查。</p></li><li><p>可恢复性的实现:在Put请求中,客户可以指定复制参数和纠删码的类型,还可以将存储方式指定为(f, m)-tolerant。它的意思是如果给定m个存储矿工存储数据时,最多可以容忍f个故障。使用更多的存储矿工进行存储,可以让客户增加数据恢复的机会,以防存储矿工下线或消失。</p></li><li><p>公开可验证和可审核性的实现:存储矿工需要提交其存储量证明 (πSEAL, πPOST)到区块链。网络中任意用户都可以在不访问数据本身的情况下,验证这些证明的有效性。由于这些证明都存储在区块链上,所有的操作过程都可以被随时查验。</p></li><li><p>激励兼容性的实现:一般来说,矿工通过提供存储数据获得回报。当矿工承诺存储数据时,他们必须生成证明。如果忽略了证明,矿工就会被惩罚(通过罚没部分抵押品),并且不会得到储存回报。</p></li><li><p>保密性的实现:如果客户希望维护数据的隐私性,就必须在提交到网络之前,对数据进行加密。</p></li><li><p><img src="/uploads/ueditor/20180603/1528001900207580.jpg" title="1528001900207580.jpg" alt="微信图片_20180603125741.jpg"/><br/></p></li></ul><h4><em>【翻译作者 &nbsp;| &nbsp;浙江大学IPFS研究会:王备 刘晨 burning 刘哲 | &nbsp;版权由区块先锋社区所有】</em></h4><p><br/></p>

戴嘉乐:详解IPFS的本质、技术架构以及应用

IPFS-Storjatangge 发表了文章 • 0 个评论 • 8 次浏览 • 2018-06-03 12:50 • 来自相关话题

本文是IPFS应用实践者戴嘉乐的分享内容 。戴嘉乐是前百度高级研发工程师,ipfser.org&巴比特专栏作者。戴嘉乐去年8月参与了FileCoin的众筹,从而了解到IPFS技术,独立开发了两款基于IPFS的开源应用,一个是与IPFS有关的wiki系统,另一个是IPFS相... 查看全部
<p style="text-align: center;"><img src="/uploads/ueditor/20180603/1528001417377550.jpg" title="1528001417377550.jpg" alt="interview-with-kyle-drake-juan-benet-on-the-ipfs.jpg"/></p><p>本文是IPFS应用实践者戴嘉乐的分享内容 。戴嘉乐是前百度高级研发工程师,ipfser.org&amp;巴比特专栏作者。戴嘉乐去年8月参与了FileCoin的众筹,从而了解到IPFS技术,独立开发了两款基于IPFS的开源应用,一个是与IPFS有关的wiki系统,另一个是IPFS相关的地理位置检索系统。</p><p><img alt="戴嘉乐:详解IPFS的本质、技术架构以及应用-IPFS中国社区" class="aligncenter size-full wp-image-186493" src="http://cdn.8btc.com/wp-content/uploads/2018/03/201803301359125422.jpg" width="750" height="450"/></p><p>&nbsp;</p><h2>IPFS是什么?</h2><p>&nbsp;</p><p>IPFS的中文名是星际文件系统,由Juan Benet在2014年5月份发起。Juan Benet的个人经历很传奇,他毕业于斯坦福大学,在创建IPFS项目之前,他创办的第一家公司被雅虎收购。2015年,他创建的IPFS在YCombinator孵化竞赛中拿到了巨额的投资,同时成立了协议实验室。这个实验室团队由14位核心开发者以及社区中上百位代码贡献者组成的。</p><p>IPFS本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由的互联网时代。</p><p>我们每天上网使用APP刷朋友圈、微博都在使用HTTP协议,它基于TCP/IP的计算机应用层面,从服务器传输超文本数据到本地浏览器,本地浏览器或APP渲染后呈现给用户。基于这样的网络环境构成了CS或BS架构,最后注入BAT这样大型网络提供商。</p><p>互联网平台所提供的网络服务大致经过了三种模式的迭代历程:</p><p>第一个模式属于集中化,例如早期的12306因为没法分散去做,只有一个中心服务群,所有买票的流量直接搭载在这个服务群上,承载的压力非常大。</p><p>第二个模式属于分散集群,类似于O2O百团大战时各个网站需要建立不同区域下的服务群,它们背后的IDC机房,会让同样的服务在一个局域内分散,这就减轻了中心服务器的压力。</p><p>前两种模式容易产生一些弊端:在第一种模式里,服务高度依赖中心网络。大公司或者创业公司无法承受宕机,运维有一个KPI指数叫SLA,稳定性没有到99.9%的话,基本不合格。SLA需要消耗特别大的成本,大公司需要雇一批运维专家或专业人士,去保障系统的稳定性。在第二种模式里,存储数据有丢失的风险。大家经常开玩笑的电缆被挖断,员工删库跑路,都是隐患。</p><p>同时,这两种模式的带宽成本相对高很多,会造成一定带宽资源的浪费。比如《中国有嘻哈》第一期海选的视频播放量有10亿次,假设视频文件大小是1GB,播放整个视频需要消耗1000PB的带宽量。如果按照0.001美元1GB带宽成本,爱奇艺光一期节目需要支付一百万美金给ISP(互联网服务提供商)。</p><p>IPFS有希望成为第三种模式。IPFS想打造一个点对点的网络拓扑,相当于颠覆HTTP所代表的分布关系,它具有内容可寻址的特点,通过文件内容生成唯一的哈希标识,一定程度上节约了空间开销的成本。</p><p>HTTP协议使用的域名寻址,最终会映射到最底层,找到某个域名所对应的IP地址下的某个主机,以及某个文件目录的某个文件。它不关心是否存在相同的文件,但内容寻址会通过唯一的标识去访问,并且提前检验这个标识是否已经被存储过。如果被存储过,直接从其它节点读取它,不需要重复存储,一定意义上节约了空间。</p><p>举个具体场景的例子。假设我想要看《环太平洋》这部电影,小明之前下载过这部电影,他启动了IPFS节点,将这个视频文件加入了IPFS网络。他会得到一个哈希指纹b,同时发布到公共网关,得到了一个/IPFS/b的路径名。</p><p>他把哈希指纹和路径名都告诉我,我要做的事情是启动一个本地节点,对该网关发一个寻址PIN的请求,IPFS自动索引分布式哈希表的哈希值,找到指纹b所对应的节点列表。</p><p>大的视频通常不会都存在一个节点,可能分片存在其它一些子节点上,IPFS把这些节点列表全部并行抓取,最后由本地的manager拼成完整的文件。并行的速度远远大于直接下载完整文件的速度,我很快就能在本地化的浏览器上看到电影,还可以继续分享给其他人。</p><p>&nbsp;</p><h2>IPFS的架构</h2><p>&nbsp;</p><p>IPFS至少有八层子协议栈,从上至下为身份、网络、路由、交换、对象、文件、命名、应用,每个协议栈各司其职,又互相搭配。</p><p><img alt="戴嘉乐:详解IPFS的本质、技术架构以及应用-IPFS中国社区" class="aligncenter size-full wp-image-186494" src="http://cdn.8btc.com/wp-content/uploads/2018/03/201803301400091513.jpg" width="786" height="441"/></p><p>身份层和路由层可以一起解释。对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定,KAD协议实质是构建了一个分布式松散Hash表,简称DHT,每个加入这个DHT网络的人都要生成自己的身份信息,然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。如同微信名片分享,在无法通过直接搜索微信号的情况下,如果你要找一个人,可以通过有这个人联系方式的朋友分享名片来建立联系。</p><p>网络层比较核心,使用的LibP2P可以支持任意传输层协议。NAT技术能让内网中的设备共用同一个外网IP,我们都体验过的家庭路由器就是这个原理。</p><p>交换层,是类似迅雷这样的BT工具。迅雷其实是模拟了P2P网络,并创建中心服务器,当服务器登记用户请求资源时,让请求同样资源的用户形成一个小集群swarm,在这里分享数据。这种方式有弊端,一位服务器是由迅雷统一维护,如果出现了故障、宕机时,下载操作无法进行。</p><p>中心化服务还可以限制一些下载请求,人们发明了一种更聪明的方式就是Bittorrent,让每一个种子节点所要存储的数据,通过哈希表存储在里面,BT工具相对不太受监管,服务更加稳定。</p><p>IPFS团队把BitTorrent进行了创新,叫作Bitswap,它增加了信用和帐单体系来激励节点去分享,我推断FileCoin有很大概率是基于Bitswap,用户在Bitswap里增加数据会增加信用分,分享得越多信用分越高。如果用户只去检索数据而不存数据,信用分会越来越低,其它节点会在嵌入连接时优先选择信用分高的。</p><p>这一设计可以解决女巫攻击,信用分不可能靠机器刷去提高,一直刷检索请求,信用分越刷越低。请求次数和存储量的变量之间有一个比较精妙的算法,类似一个抛物线,前期可以容忍很多东西,达到一定次数后不再信任。</p><p>对象层和文件层适合结合来谈,它们管理的是IPFS上80%的数据结构,大部分数据对象都是以MerkleDag的结构存在,这为内容寻址和去重提供了便利。文件层是一个新的数据结构,和DAG并列,采用Git一样的数据结构来支持版本快照。</p><p>命名层具有自我验证的特性(当其他用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态),并且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,增强可阅读性。</p><p>最后是应用层,IPFS核心价值就在于上面运行的应用程序,我们可以利用它类似CDN的功能,在成本很低的带宽下,去获得想要的数据,从而提升整个应用程序的效率。</p><p>新的技术取代老的技术,无非就两点:第一,能提高系统效率;第二,能够降低系统成本。IPFS把这两点都做到了。</p><p>我整理了一个IPFS族谱关系图,同时也是一个纵向数据流图。刚才所说的八层协议,其实每一层的实现都绑定在对应的模块下,进行了一个直观的图表设计。</p><p><img alt="戴嘉乐:详解IPFS的本质、技术架构以及应用-IPFS中国社区" class="aligncenter size-full wp-image-186495" src="http://cdn.8btc.com/wp-content/uploads/2018/03/201803301400341605.jpg" width="788" height="440"/></p><p>IPFS的团队在开发时,采用高度模块集成化的方式,像搭积木一样去开发整个项目。协议实验室团队2015年创立,到17年的时间里都在做IPLD、LibP2P、Multiformats这三个模块的开发,它们服务于IPFS底层。</p><p>Mutiformats是一系列hash加密算法和自描述方式(从值上就可以知道值是如何生成)的集合,它具有SHA1\SHA256 \SHA512\Blake3B等6种主流的加密方式,用以加密和描述nodeID以及指纹数据的生成。</p><p>LibP2P是IPFS核心中的核心,面对各式各样的传输层协议以及复杂的网络设备,它可以帮助开发者迅速建立一个可用P2P网络层,快速且节约成本,这也是为什么IPFS技术被众多区块链项目青睐的缘由。</p><p>IPLD其实是一个转换中间件,将现有的异构数据结构统一成一种格式,方便不同系统之间的数据交换和互操作。现在IPLD支持的数据结构,是比特币、以太坊的区块数据,也支持IPFS和IPLD。这也是IPFS为什么受到区块链系统欢迎的原因之二,它的IPLD中间件可以把不同的区块结构统一成一个标准进行传递,为开发者提供了成功性比较高的标准,不用担心性能、稳定和bug。</p><p>IPFS应用了这几个模块的功能,集成为一种容器化的应用程序,运行在独立节点上,以Web服务的形式,供大家使用访问。</p><p>最后是Filecoin, 作为去年7月才宣布的项目,它的开发进度至今保密。Filecoin把这些应用的数据价值化,通过类似比特币的激励政策和经济模型,让更多的人去创建节点,去让更多的人使用IPFS。</p><p>我更希望大家把IPFS和FileCoin分开来看,如果IPFS玩得好,可以创建很多FileCoin项目出来,它本身的价值和意义没有IPFS这么大。</p><p>&nbsp;</p><h2>IPFS的应用意义</h2><p>&nbsp;</p><p>第一,可以为内容创作带来一定的自由。Akasha是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。</p><p>同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。</p><p>第二,可以降低存储和带宽成本。我之前也举过爱奇艺的例子,而做视频比较成功的项目叫「Dtube」。它是一个搭建在Steemit上的去中心化视频播放平台,其用户上传的视频文件都经过IPFS协议进行存储,具有唯一标识。相较于传统视频网站,它降低了同资源冗余程度,同时大大节约了海量用户在播放视频时所产生的带宽成本。</p><p>第三个,可以与区块链完美结合。区块链的本质是分布式账本,本身的瓶颈之一就是账本的存储能力,目前大部分公链的最大问题是没法存储大量的超媒体数据在自己的链上。比特币至今全部的区块数据也才30-40G左右,以太坊这样可编程的区块链项目也只能执行和存储小段合约代码,DApp想发展成超级App,受到了极大的限制。</p><p>运用IPFS技术解决存储瓶颈是目前来看的过渡方案,最典型的应用就是EOS。EOS引以为傲的是可以支持百万级别TPS的并发量,其中除了DPOS共识机制的功劳之外,还归功于其底层存储设计是采取IPFS来解决大型数据的传输效率。</p><p>EOS将自己打包好的区块数据通过IPLD进行异构处理,统一成一种便于内容寻址的数据结构类型,并挂载到IPFS的link上,让IPFS网络承担存储和P2P检索的逻辑,而不消耗EOS区块链系统本身太多的计算资源。</p><p>第四,可以为传统应用提供分布式缓存方案。&nbsp;IPFS-GEO 是我自己之前写的,它是一个为传统LBS应用提供分布式缓存的项目,可以将地理位置坐标数据通过GeoHash算法转化成一维字符串,并将与之相关联的具有检索价值的数据存入IPFS网络,由IPFS网络标识唯一性,并分布在各个邻近节点上。</p><p>当检索请求到来时,系统先通过字符串近似度范围比较,缩小检索范围,加快检索效率,通过NodeID从附近节点拿到超媒体数据,达到类似分布式缓存的效果,大大提高了LBS应用整个检索动作的效率。</p><p>&nbsp;</p><h2>IPFS的明星应用</h2><p>&nbsp;</p><p>OpenBazaar是IPFS上的一个明星应用,我给它取了一个中文名叫开放集市,前一段时间刚拿到比特大陆500万美元的投资。</p><p>在之前的1.0版本,OpenBazaar被称之为黑市,那时没有应用IPFS,利用ZeroMQ来实现P2P交易,一定程度也绕过了中心化的检查,把交易的手续费作为红利给到用户。同时它整合了比特币作为支付渠道,轰动一时,用户数量在短时间内迅速提升。</p><p>开放集市在2.0版本发布之后,考虑到法律等因素,官方加入了一层审查机制,同时支持了比特币之外的BCH等数字货币,并且整合和重构IPFS,取代了之前的ZeroMQ。</p><p>现在,众多开放集市上的商店在没有用户上线的情况下,也可以在主机上就被运行。以前必须同时登陆才可以交易,现在利用IPFS相当于实现了离线店铺。这同时意味着,访问你的店铺的人越多,店铺数据被复制越多,有利于优质的店铺宣传和推广,这是一定意义上的价值回归。</p><p>我把它称为明星项目,不光因为它是基于IPFS而且做得不错,还因为它对IPFS全部的重构,它把IPFS所有的源码、协议和各种配套设施都重新开,不仅重构了IPFS的分支,改了协议名,同时也更改了协议头,一定意义上把OB的网络和主的IPFS网络隔离开。</p><p>OpenBazaar希望有更集中化的控制,想建立自己的矿场和机房来保证服务的稳定,在去中心和中心化之间选择了一个中间点。我觉得目前大部分的传统应用和公司,也可以这样去考虑。完全去中心化不太可能,所以可以取其精华、去其糟粕。</p><p><br/></p>

利用IPFS构建自己的去中心化分布式Wiki系统

IPFS-Storjatangge 发表了文章 • 0 个评论 • 5 次浏览 • 2018-06-03 12:35 • 来自相关话题

IPFS全称InterPlanetary File System,中文名:星际文件系统,是一个旨在创建持久且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Pro... 查看全部
<blockquote><p>IPFS全称InterPlanetary File System,中文名:星际文件系统,是一个旨在创建持久且分布式存储和共享文件的网络传输协议。<br/>它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Protocol Labs (协议实验室)在开源社区的帮助下发展。其最初由Juan Benet设计。<br/>IPFS是点对点的超媒体协议,可以让网络更快、更安全、更开放。它是一个面向全球的、点对点的分布式版本文件系统,试图将所有具有相同文件系统的计算设备连接在一起。<br/>官网:<a href="https://ipfs.io/">https://ipfs.io/</a></p></blockquote><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs_io.png"/></p><h2>一、IPFS 简介</h2><p>IPFS—又称“星际文件系统”。简单点说,它是一个点对点的分布式文件系统(和比特币技术一样),通过底层协议,可以让存储在IPFS系统上的文件,在全世界任何一个地方快速获取,且不受防火墙的影响(无需网络代理)。</p><p>我们现在所使用的互联网协议被称作——超文本协议HTTP。这种协议具有超中心化特性。</p><p>也就是说,你从互联网上下载文件或者是浏览网页,一次只能从一个数据中心获取你所需要的资料。如果这个数据中心出现故障,或者被限制或是攻击,就会出现文件丢失或者网页无法打开的问题。比如你存在某云盘的资料突然无法下载,或者你想浏览的网页因为某些政策原因无法打开。</p><p>而IPFS的目的就是解决这些问题。在某些方面,IPFS类似Web,你一样可以基于IPFS进行互联网地址的链接。但IPFS是去中心化的,它不存在Web的主网故障问题。所以,<strong>IPFS完全取代掉HTTP也并非天方夜谭</strong>。</p><h3>1.1 IPFS与HTTP的区别</h3><h4>HTTP的四大痛点</h4><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/IPFS%20is%20the%20Distributed%20Web.png"/></p><p>&nbsp;</p><ul><li><p>HTTP效率低下,服务器成本昂贵</p></li></ul><p>使用HTTP协议从一台计算机服务器上一次只能下载一个文件,而不是同时从多台计算机中获取文件。通过P2P方式的视频传输可以节省带宽成本的60%。</p><ul><li><p>历史文件被删除</p></li></ul><p>网页的平均使用寿命为100天,大量的网站文件不能得以长期保存。有些重要的文件因操作不当,也有可能永远在互联网消失。</p><ul><li><p>中心化的网络限制了机会</p></li></ul><p>互联网一直是人类进步的催化器,但中心化的网络容易被控制,是对互联网良性发展的的威胁。</p><ul><li><p>网络应用太依赖骨干网</p></li></ul><p>为保证数据的可靠性,我们开发的应用程序太依赖大型的中心服务器,并通过大量的备份来保证数据的安全。</p><p>HTTP协议已经用了20年的历史,从HTTP 1.0 到现在的HTTP5,网页的展示越来越美观丰富,<strong>但它背后的Browser/Server 模式是从来没变的</strong>。</p><h4>IPFS区别于HTTP痛点的特质</h4><ul><li><p>互联网信息永久存储</p></li></ul><p>IPFS像是一个分布式存储网络(类似于SIA),任何存储在系统里的资源,包括文字、图片、声音、视频,以及网站代码,通过IPFS进行哈希运算后,都会生成唯一的地址。今后,你只要通过这个地址就可以打开它们。并且这个地址是可以被分享的。</p><p>而由于加密算法的保护,该地址具备了不可篡改和删除的特性(在某种意义上,如果破解密码还是有可能被篡改或删除,但概率极低)。所以,一旦数据存储在IPFS中,它就会是永久性的。比如我们经常会遇到的某个资源删除无法访问的问题。</p><p>这种情况,在IPFS上就不会发生。即便是把该站点撤销,只要存储该站点信息的网络依然存在,该网页就可以被正常访问。存储站点的分布式网络越多,它的可靠性也就越强。</p><p>与SIA不同的是,IPFS存储的一般是公共信息,普通大众都可以获得的。有一种说法认为,<strong>如果IPFS完全取代HTTP,那么此后,人类历史将会被永久保存,且不会被篡改</strong>。</p><p>这也就意味着,人类所做的每一件事情都会被记录,不管是正确的、抑或是错误的。</p><ul><li><p>解决过度冗余问题,实现共享经济</p></li></ul><p>如果你喜欢某部电影,又担心电影资源丢失,通常的做法是,你会把这部电影下载在自己的电脑上。比如电影《阿凡达》,在2016年一年的下载次数就达到了1658万次,总下载数量更是惊人。那么一个无法避免的问题是:同样的一部电影被反复储存,造成了内存资源极大浪费。这就是HTTP协议的弊端。同样的资源备份的次数过多,就会造成过度冗余的问题。</p><p>而IPFS的出现可以很好的解决这个问题。IPFS会把存储文件,做一次哈希计算,只字不差的两个文件哈希值相同。所以,用户只需要使用相同的哈希值,就可以访问那个文件,这个哈希值就是文件的地址。只要获取这个地址,就可以共享资源了。</p><p>基于上面的永久存储特性,你再也不用担心某个电影找不到了,也不用备份,<strong>因为全球电脑上只要有那么几个人存储着,你就能拿到它。而不是重复存储几十万份</strong>。</p><ul><li><p>同时基于内容寻址,而非基于域名寻址。</p></li></ul><p>IPFS的网络上运行着一条区块链,即用来存储互联网文件的哈希值表,每次有网络访问,即要在链上查询该内容(文件)的地址。</p><p>文件(内容)具有存在的唯一性,一个文件加入了IPFS的网络,将基于计算对内容赋予一个唯一加密的哈希值。这将改变我们使用域名访问网络的习惯。</p><p>提供文件的历史版本控制器(类似Git),并且让多节点使用保存不同版本的文件。</p><ul><li><p>节点存储激励,代币分成</p></li></ul><p>通过使用代币(FileCoin)的激励作用,让各节点有动力去存储数据。 Filecoin 是一个由加密货币驱动的存储网络<strong>。矿工通过为网络提供开放的硬盘空间获得Filecoin,而用户则用 Filecoin 来支付在去中心化网络中储存加密文件的费用</strong>。</p><h3>1.2 IPFS工作原理</h3><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfswork.jpg"/></p><p>&nbsp;</p><ul><li><p>每个文件及其中的所有块都被赋予一个称为加密散列的唯一指纹。</p></li><li><p>IPFS通过网络删除重复具有相同哈希值的文件,通过计算是可以判断哪些文件是冗余重复的。并跟踪每个文件的版本历史记录。</p></li><li><p>每个网络节点只存储它感兴趣的内容,以及一些索引信息,有助于弄清楚谁在存储什么。</p></li><li><p>查找文件时,你通过文件的哈希值就可以在网络查找到储存改文件的节点,找到想要的文件。</p></li><li><p>使用称为IPNS(去中心化命名系统),每个文件都可以被协作命名为易读的名字。通过搜索,就能很容易地找到想要查看的文件。</p></li><li><p>从IPFS的介绍可以看出, IPFS设想的是让所有的网络终端节点不仅仅只充当 Browser或Client的角色,其实人人都可以作为这个网络的运营者,人人都可以是服务器。</p></li></ul><p>&nbsp;</p><h3>1.3 IPFS应用场景</h3><p>&nbsp;</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-app.jpeg"/></p><p>&nbsp;</p><h2>二、IPFS 配置</h2><h3>2.1 IPFS 下载</h3><p>下载地址:https://dist.ipfs.io/#go-ipfs</p><p>本篇博客下载并使用的版本是:<strong>go-ipfs Version v0.4.13 for OS X 64bit</strong></p><h3>2.2 IPFS 安装</h3><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs_install1.png"/></p><p><code>ipfs --help&nbsp;//打开命令行,输入,出现Log信息时,表示安装成功</code></p><h3>2.3 IPFS本地部署</h3><h4>2.3.1 创建节点</h4><p>在本地全局目录下新建仓库:</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs_init.png"/></p><h4>2.3.2 节点配置</h4><p><code>cd ~/.ipfs</code></p><p><code>export EDITOR=/usr/bin/vim</code></p><p><code>ipfs config edit</code><br/>执行完<code>ipfs config edit</code>后会打开一个ipfs节点配置文件,可以修改配置参数,后面会演示此文件的修改细节。</p><h4>2.3.3 节点ID</h4><p>每个节点都会存在一个唯一标识,查看节点ID方式如下:</p><p><code>ipfs&nbsp;id</code></p><h4>2.3.4 启动节点服务器</h4><p><code>ipfs&nbsp;daemon</code></p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-daemon-error.png"/></p><p>出现了5001端口被占用的情况,这边可以通过对<strong>节点配置文件的修改</strong>来解决,如下所示:</p><ul><li><p>找到所有配置5001端口的地方</p></li><li><p>替换成5002端口</p></li></ul><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-config-edit.png"/></p><p>再次启动节点,服务成功启动如下所示:</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-run-successful.png"/></p><h4>2.3.5 配置CORS跨域资源共享</h4><p>为了方便后续前端的开发和数据访问,提前对跨域资源共享<code>CORS</code>进行配置,<code>ctrl-c</code>&nbsp;退出<code>ipfs</code>,然后按照下面的步骤进行跨域配置:<br/><code>ipfs&nbsp;config --json API.HTTPHeaders.Access-Control-Allow-Methods &#39;[&quot;PUT&quot;,&nbsp;&quot;GET&quot;,&nbsp;&quot;POST&quot;,&quot;OPTIONS&quot;]&#39;&nbsp;ipfs&nbsp;config --json API.HTTPHeaders.Access-Control-Allow-Origin &#39;[&quot;*&quot;]&#39;</code></p><h4>2.3.6 验证</h4><p>浏览器打开 http://localhost:5002/webui ,出现Web Console 图形化控制台</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/webui-connection.png"/></p><p>这里可以看到所有run在主网上的节点信息,和本地节点相关的配置数据。</p><h2>三、IPFS 项目实践</h2><blockquote><p><strong>利用 IPFS 构建一个去中心化、不可篡改的分布式Wiki系统</strong></p></blockquote><h3>3.1 新建workplace</h3><p>考虑到方便后期开源和推广,这边我是托管在github上,<strong>大家可以选择自己熟悉的代码托管服务,也可以克隆我的工程 -&gt;&nbsp;<a href="https://github.com/daijiale/ipfs-wiki-system">ipfs-wiki-system</a>,在其基础上进行你的二次开发,有任何问题,欢迎提交issue给我</strong></p><p><code>mkdir&nbsp;workplace</code></p><p><code>cd workplace</code></p><p><code>git clone git@github.com:daijiale/ipfs-wiki-system.git</code></p><h3>3.2 wiki系统搭建</h3><p><code>cd workplace/ipfs-wiki-system/wiki-release</code></p><p><code>ll</code></p><p>可以看到如下文件:</p><p><strong>wiki-release</strong></p><ul><li><p><strong>index.html</strong>&nbsp;//markdown模板渲染</p></li><li><p><strong>navigation.md</strong>&nbsp;//导航markdown</p></li><li><p><strong>index.md</strong>&nbsp;//首页markdown</p></li></ul><p>大家可以参考<code>ipfs-wiki</code>&nbsp;Demo,根据自己的需求,通过<a href="https://baike.baidu.com/item/markdown/3245829?fr=aladdin">markdown</a>自定义不同的wiki内容和目录。</p><h3>3.3 挂载本地节点</h3><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/publish-to-block.png"/></p><p>记住文件根目录的Hash值:QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm</p><h3>3.4 发布到主网</h3><p><code>ipfs</code>&nbsp;daemon</p><p>https://ipfs.io/ipfs/QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm/#!index.md</p><h3>3.5 发布到IPNS</h3><p>由于ipfs的hash对应着一个不可变的内容,每次更新网站之后,website的hash都会变,旧的link不能访问到新的内容。</p><p>ipfs提供了<code>ipns</code>来解决更新的问题。</p><p>ipfs允许用户使用一个私有密钥来对哈希附加一个引用,使用一个公共密钥哈希(简称pubkeyhash)表示你的网站的最新版本。</p><p>具体操作是:</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipns.png"/></p><p>通过上述方式,就完成了website和一个固定的link的绑定:<br/><code>QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78</code></p><h3>3.6 绑定验证</h3><p><code>ipfs name resolve QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78 /ipfs/QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm</code></p><p>&nbsp;</p><p><strong>IPNS访问固定节点Hash:</strong></p><p><a href="https://ipfs.io/ipns/QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78">https://ipfs.io/ipns/QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78</a></p><p>验证成功,出现如下效果:</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-wiki-demo.png"/></p><p>&nbsp;</p><h3>3.7 去中心化验证</h3><p>&nbsp;</p><p>以之前发布到主网的节点为第一节点,我们本地再新建一个节点,用以模拟第二节点的身份,打开Web Console:</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-web-consolve.png"/></p><p>在第二节点上,我们依然可以通过<code>IPFS HASH</code>查询到第一节点主网上的&nbsp;<code>ipfs-wiki-system</code>目录文件数据</p><p>同时,我们也能看到:控制台显示记录了我们发布至主网数据的区块节点数已经扩散至275个。</p><p><img src="http://daijiale-cn.oss-cn-hangzhou.aliyuncs.com/djl-blog-pic/ipfs/ipfs-peer-id.png"/></p><p>&nbsp;</p><p>也就是说,来自另外全球其他274地方的个体,在自己的&#39;&#39;记账本&#39;&#39;中记下了你之前发布的数据,<strong>哪怕其中个别服务器宕机(天灾人祸,挖断电缆,世界末日等等),只要有一个节点安好,你的数据都不会丢失</strong>,真正意义实现了<strong>去中心化的服务机制</strong>。</p><p><br/></p>