核心算法1

拜占庭协定 

拜占庭的故事大概是这么说的:拜占庭帝国拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。 

在这个分布式网络里:每个将军都有一份实时与其他将军同步的消息账本。账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情(不受protocol限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识。

区块链几个主要算法,你懂多少?-巴士资讯


核心算法2

非对称加密技术 

在上述拜占庭协定中,如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致。谁都可以发起进攻的信息,但由谁来发出呢?其实这只要加入一个成本就可以了,即:一段时间内只有一个节点可以传播信息。当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。在如今看来,非对称加密技术完全可以解决这个签名问题。非对称加密算法的加密和解密使用不同的两个密钥,这两个密钥就是我们经常听到的“公钥”和“私钥”。公钥和私钥一般成对出现,如果消息使用公钥加密,那么需要该公钥对应的私钥才能解密;同样,如果消息使用私钥加密,那么需要该私钥对应的公钥才能解密。

区块链几个主要算法,你懂多少?-巴士资讯


核心算法3

容错问题 

我们假设在此网络中,消息可能会丢失、损坏、延迟、重复发送,并且接受的顺序与发送的顺序不一致。此外,节点的行为可以是任意的:可以随时加入、退出网络,可以丢弃消息、伪造消息、停止工作等,还可能发生各种人为或非人为的故障。我们的算法对由共识节点组成的共识系统,提供的容错能力,这种容错能力同时包含安全性和可用性,并适用于任何网络环境。

区块链几个主要算法,你懂多少?-巴士资讯


核心算法4

Paxos 算法(一致性算法)

 Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。节点通信存在两种模型:共享内存和消息传递。Paxos算法就是一种基于消息传递模型的一致性算法。

区块链几个主要算法,你懂多少?-巴士资讯


核心算法5

共识机制 

区块链共识算法主要是工作量证明和权益证明。拿比特币来说,其实从技术角度来看可以把PoW看做重复使用的Hashcash,生成工作量证明在概率上来说是一个随机的过程。开采新的机密货币,生成区块时,必须得到所有参与者的同意,那矿工必须得到区块中所有数据的PoW工作证明。与此同时矿工还要时时观察调整这项工作的难度,因为对网络要求是平均每10分钟生成一个区块。

区块链几个主要算法,你懂多少?-巴士资讯


核心算法6

分布式存储

分布式存储是一种数据存储技术,通过网络使用每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在网络中的各个角落。所以,分布式存储技术并不是每台电脑都存放完整的数据,而是把数据切割后存放在不同的电脑里。就像存放100个鸡蛋,不是放在同一个篮子里,而是分开放在不同的地方,加起来的总和是100个。

区块链几个主要算法,你懂多少?-巴士资讯

比如IPFS它是一个去中心化的分布式的存储系统。

我们每天使用的网络是建立在底层通讯协议上的,这个底层通讯协议就是 OSI 参考模型,分为7层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

物理层和数据链路定义了信号怎么让网卡接受并识别。

网络层和传输层定义了网络节点之间如何寻址,也叫 TCP/IP层。

会话层、表示层、应用层其实可以合称为应用层,http协议在这一层让当今的互联网生态繁荣发展,手机,电脑,pad 使用浏览器体现了 HTTP 协议的应用。

物理层和数据链路定义了信号怎么让网卡接受并识别。

网络层和传输层定义了网络节点之间如何寻址,也叫 TCP/IP层。

会话层、表示层、应用层其实可以合称为应用层,http协议在这一层让当今的互联网生态繁荣发展,手机,电脑,pad 使用浏览器体现了 HTTP 协议的应用。

以上协议都是建立在中心化的网络上的,中心化网络带来的问题现在已经相当的突出,文字审查,信息垄断等,而IPFS是一个点对点的传输网络,每个文件在这个网络上都有一个唯一的hash指纹 id。那么,文件寻址通过这个id就可以了。

用户将自己的硬盘贡献出来成为矿工,获取filecoin得到回报。存储文件的过程大约如下:

1.用户发出订单(用 filecoin出价,请求存储文件),系统撮合矿工和订单,一旦撮合成功,进入第二步。

2.用户发送文件给矿工,矿工收到文件之后放到数据库里,进行加密,验证之后放到链上。

3.矿工不断以复制证明的方式和规则来证明他们在工作,客户端支付的金额是分期付款进行的,随着出块,线性向前推进给矿工进行支付。

4.文件索引:用户请求文件并支付filecoin到检索市场之后,相应速度最快的矿工拿到这个文件的分发权。

为了确保矿工诚实地工作并且能公平获取代币,在共识算法上,IPFS使用的是复制量证明。这种共识能够防范以下三种常见的攻击方式:女巫攻击,外源攻击和生成攻击,他们的共同特点是不诚实的矿工实际存储的数据大小要比声称存储的数据小,这样不诚实的矿工就能获得本不该他获得的报酬。

女巫攻击(Sybil Attack):利用n个身份,承诺存储n份数据D,而实际上存储小于n份(比如1份),但是却提供了n份存储证明,攻击成功。

外部数据源攻击(Outsourcing Attack):当攻击者矿工收到检验者要求提供数据D的证明的时候,攻击者矿工从别的矿工那里生成证明,证明自己一直存储了数据D,而实际上没有存储,攻击成功

生成攻击(Generation Attack):攻击者A可以使用某种方式生成数据D,当检验者验证的时候,攻击者A就可以重新生成数据D来完成存储证明,攻击成功

Filecoin 基于 Storage Provider 单位时间提供给网络的空间来决定他们的投票权,这种机制就叫 PoSt,PoSt 是由一系列 Proof of Replication(PoReps)推算得来。因为存储了所要求的数据的 replicas 的 Provider 需要向客户出示证明( Proofs),方式就是通过解决 Client 提出的密码学问题(Cryptographic Problems),这跟比特币的挖矿形式上是一样的,不同之处在于,这个密码学问题是基于数据文件(sealed version of data)的,而作为存储提供商,必须在其实际保存了客户的全部文件副本的情况下才能解决该问题,因为只有 Provider 可以轻易访问这些数据 。当他们提出证明时,可以很容易的被其他节点验证,而这些节点无需存有数据。

ipfs上挖矿主要需要做以下几件事情:

1.文件存储。拥有硬盘容量将在共识机制上扮演比较重要的角色,容量越大越好。

2.打包区块

3.文件检索请求服务。当有用户要求检索文件时,最快交付给用户的矿工将获取挖矿奖励收益。所以拥有带宽+SSD的矿工将具有一定的优势。