什么是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。