IPFS和梅克尔森林
什么是IPFS?
IPFS是InterPlanetary File System的缩写。它是一种点对点的可以使Web更快,更安全,更开放的分布式文件系统。我们需要用IPFS把当前版本的Web切换成分布式版本Web。实际上,IPFS的目标是取代HTTP。
为什么要取代HTTP呢?
1、疯狂的带宽成本:
当前使用 HTTP的Web基于一个单一的客户端——服务器模型,它下载任何类型的文件都必须通过中央服务器。想象一下,如果你能从你附近的节点获得相同文件,那么你就可以使用更少的带宽更快地下载文件。在视频传输方面,P2P方法可以节省60%的带宽成本。
IPFS使得高效地分发大量数据变得可能,零重复意味着节省存储空间。
2、404出现得过于频繁:
网页的平均寿命为100天。在那(100天)之后,人们查看网页就可以期待看到404出现了。现在的网络是如此脆弱,链接总是过期和无效,这就好比把书本给焚烧掉一般(不能保存信息)。
IPFS提供历史版本保留(如git),可以轻松地为数据镜像设置可恢复网络。
3、中心化的基础设施:
我们的所有数据都存储在主服务器上。如果服务器崩溃了,我们就完了。如果Twitter崩溃了,我们就不能发推文了。如果Facebook崩溃了,好吧,它足够崩溃了哈哈。
IPFS仍然忠实于网络的最初愿景:开放式和扁平化,并提供了使该愿景成为现实的技术。
4、离线是新的在线:
在发展中国家,在自然灾害期间,面对临时性的不良网络,我们该怎么办?只是干坐着等吗?我们使用的网络是20世纪的,我们可以做得更好。
IPFS支持创建具有多种适应性网络,无论是否具有Internet骨干网连接,都可实现网络的持久可用性。
IPFS如何运作?
因此,如果您想要检索数据结构或使用IPFS将文件保存在Web上,你將不需要访问中央服务器。您请求网络中的节点为您提供该文件的路径。您的节点会给您一些称为该文件的“加密哈希”的内容。它是该文件的唯一指纹。
假设你想得到/foo/bar/baz.png这个文件,它的加密哈希是WmXGTaGWTx1uUtfSb2sBAvArMEVLK4rQEc4g5bv7wwdz1U。(这可以使用SHA1,SHA2或任何其他算法生成)。你点击这个链接连入网络。
维基百科已经开始使用IPFS:
URL的格式为:
https//ipfs.io/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Anasayfa.html
关于Merkle Trees的一小节
关于Merkle链接的研究论文可以在这里找到。Ralph Merkle是Merkle数据结构背后的大脑。
这里能够找到关于什么是Merkle树的说明。
Merkle Tree在C ++中的基本实现。
#include
#include
#include
#include
using namespace std;
// Hashing functions.
int multiplyThem(int a, int b) {
return a*b;
}
int addThem(int a, int b) {
return a+b;
}
class Merkle {
private:
vector values;
int (*hasher)(int, int);
public:
Merkle(int (*f)(int,int)) {
this->hasher = f;
}
int size() {
return values.size();
}
void add(int value) {
values.push_back(value);
}
int root() {
vector current;
current = getHashedParents(this->values);
while (current.size() != 1) {
current = getHashedParents(current);
}
return current[0];
}
private:
vector getHashedParents(const vector &children) {
vector result;
for (int i=0; i < children.size(); ) {
int a = children[i], b = children[i];
if (++i < children.size()) {
b = children[i++];
}
int hash = this->hasher(a,b);
printf("hash(%d, %d)=>%d ", a, b, hash);
result.push_back(hash);
}
printf("\n");
return result;
}
};
int main(int argc, char** argv) {
Merkle merkle(multiplyThem);
merkle.add(1);
merkle.add(2);
merkle.add(3);
merkle.add(4);
merkle.add(5);
printf(“Merkle Root = %d\n\n”, merkle.root());、
merkle = Merkle(addThem);
merkle.add(1);
merkle.add(2);
merkle.add(3);
merkle.add(4);
merkle.add(5);
printf(“Merkle Root = %d\n\n”, merkle.root());
return 0;
}
IPFS的核心是IPLD
IPLD是Inter Planetary Linked Data的缩写。文件/数据结构使用Merkle链接相互链接。
(Merkle DAG是什么?它是一个Merkle有向无环图。它类似于Merkle树。但是,Merkle DAG不需要平衡,它的非叶节点可以包含数据。)
在IPFS中,两个节点之间的链接采用加密哈希的形式。这是由于Merkle DAG数据结构。Merkle DAG为IPFS提供了许多有用的属性,包括:
1. 内容寻址:所有内容都使用加密哈希作为唯一标识,包括链接也是一样。
2. 防篡改:所有内容均通过校验结果进行验证。如果数据被篡改或损坏,IPFS会检测到它,因为哈希值会发生变化。
3. 无重复:所有保存完全相同内容的对象都相等(即它们的哈希值相等),并且只存储一次。
只要将Merkle root发送给某人,您就可以将大量数据移交给该人。因为,Merkle root基本上保留了它之下的所有块的签名。
系统的互用性也可以存在于梅克尔森林中,其中每棵树代表一棵单独的Merkle树。在森林中,一棵树可以是比特币,可以是以太币,可以是常规的SQL数据库。因此,这些基于加密哈希函数的内容在这些树之间交换信息时是高效的。其只发送哈希,而不是发送整个文件。想象一下,使用以太坊进行某些交易,并在交易中添加一个Git页面。
目前这种系统用于:
Bitcoin
Ethereum
Git
Bit Torrent
还有更多,但最重要的是:
立即开始使用IPFS!
入门| IPFS文档
如果你还没有安装,请安装IPFS。在本教程期间安装IPFS,如果您有任何疑问,请随时访问…ipfs.io
再重申一次,它将成为一项突破性技术,将Web从Web2.0推向Web3.0。
IPFS和梅克尔森林相关推荐
- Merkle Tree(梅克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶 ...
- 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!
2019独角兽企业重金招聘Python工程师标准>>> 区块链100讲上期我们讲了哈希算法和公开密钥算法,说到哈希算法提到了一个名词"Merkle tree",梅 ...
- CEX的梅克尔树储备证明是什么?
由于FTX因挪用用户资金资不抵债被挤兑后暴雷,各大交易所都纷纷表示会推出自己的100%梅克尔树储备证明,以证明自己的资产储备是100%充足的,不会挪用,也不会发生类似事件. 那么,什么是梅克尔树储备证 ...
- 区块链入门系列之梅克尔帕特里夏树
区块链入门系列文章 区块链基本概念和名词解释 P2P 共识算法 梅克尔-帕特里夏树 从零开始搭建区块链 这里写自定义目录标题 区块链入门系列文章 前言 Merkle树 MPT 总结 前言 在讲基本概念 ...
- 梅克尔树Merkle trees
世人皆知区块链,却不知梅克尔树呀 最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成: 梅克尔树(Merkle trees)是区块链的基本组 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范
Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范 2017/4/15 posted in Solidity深入浅出系列 Merkle Patricia Tree1,梅克尔帕特 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)详细介绍
Merkle Patricia Tree [1],梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能 ...
- GO语言实现简单梅克尔树根哈希值求解
1.思路 今天在看一本区块链的书籍发现了区块链头部有存储梅克尔树根哈希值,感觉这个梅克尔树根哈希值真是非常厉害,简单的一段文本就可以保证所有数据不被修改.算法思路也很简单,就自己实现了下,就是两两组合 ...
- 快速学习-梅克尔-帕特里夏树
梅克尔-帕特里夏树 Merkel-Patricia Tree(MPT) MPT是什么 Merkel Patricia Tree (MPT),翻译为梅克尔-帕特里夏树 MPT 提供了一个基于密码学验证的 ...
最新文章
- 数据结构,堆和栈和队列的概念
- Ubuntu16.04安装NVIDIA驱动+CUDA9.0+cuDNN7.0
- 刚刚 ECCV 2020放榜!新鲜论文出炉啦!(附部分论文和代码汇总)
- PHP ftp_mkdir 函数
- iOS之Xcode运行时环境变量汇总说明
- junit5和junit4_JUnit 5 –设置
- java xml数据解析_java xml解析,数据读取
- 5-1WordCount单词计数
- stackless python初体验
- [golang note] 工程组织
- 转(每天淘汰你自己)
- maven + grunt + tomcat + cmd + sublime
- hbase 预分区_hbase的rowKey设计原则
- Go语言实战 (William,Kennedy 等著)
- rman异机恢复数据库
- Spring Aop 源码笔记和源码阅读个人技巧分享
- 华南技术盛会:BingoDay2017今在天河人才港盛大举行
- 分数加减法混合计算机,1649.新人教版五年级数学下册第三课 分数加减混合运算(教案)(教学设计)(国家级一等奖、适合公开课).doc...
- linux 下部署tomcat问题
- 领先招聘和支付平台Deel筹资1.56亿美元,成为独角兽企业