请选择 进入手机版 | 继续访问电脑版

Hi,Tokens

 找回密码
 立即注册
查看: 805|回复: 4

区块链基础知识

  [复制链接]

30

主题

76

帖子

267

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
267
发表于 2018-4-13 11:39:06 | 显示全部楼层 |阅读模式
公有链,私有链、联盟链,它们分别代表着什么意思?

公有链是指全世界任何人都可以随时进入到系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是“完全去中心化”的,因为没有任何个人或者机构可以控制或篡改其中数据的读写。公有链一般会通过代币机制来鼓励参与者竞争记账,来确保数据的安全性。比特币、以太坊都是典型的公有链。

         私有链是指其写入权限由某个组织和机构控制的区块链,参与节点的资格会被严格限制。由于参与节点是有限和可控的,因此私有链往往可以有极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击,并且能做到身份认证等金融行业必需的要求。

        联盟链是指有若干个机构共同参与管理的区块链,每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。

        许可链是指参与到区块链系统中的每个节点都是经过许可的,未经许可的节点是不可以接入到系统中,因此私有链和联盟连都属于许可链。有些许可链是没有代币机制,因为不需要通过代币来鼓励节点竞争记账。

        私有链可以有效地解决传统金融机构的效率、安全和欺诈问题,但是这种改变是日积月累的。私有链并不会颠覆金融系统。可是,公有链有潜力通过软件取代传统金融机构的大多数功能,从根本上改变金融体系的运作方式。



#热议区块链# 一句话解释各种币的用途
1、 BTC:数字黄金
2、 ETH:智能合约和电子现金
3、 BCH:比特币克隆版
4、 XRP:企业转账网络
5、 LTC:更快版本的比特币
6、 DASH:隐私性更强的比特币克隆版
7、 NEO:中国版以太坊
8、 NEM:新经运动数字资产
9、 XMR:匿名数字现金
10、ETC:以太坊克隆版
11、IOTA:物联网转账
12、QTUM:智能合约
13、OMG:银行业、汇款、交易所
14、ZEC:匿名数字现金
15、BCC:类似麦道夫的投资基金
16、LISK:用JAVA编写的分布式APP
17、ADA:分层的数字现金和智能合约
18、TETHER:1美元
19、XLM:数字现金的IOU
20、EOS:在WEBASSEMBLY上的分布式APP
21、HSR:区块链交换器
22、WAVES:分布式交易所和众筹
23、STRATIS:C语言版本的分布式APP
24、KMD:分布式ICO
25、ARK:区块链交换器
26、ETN:克隆版门罗币
27、BCN:匿名版数字现金
28、STEEM:用代币投票的REDDIT
29、ARDR:可以生成区块链的母链
30、BNB:抵偿币安交易费
31、AUGUR:分布式预测市场
32、PPT:区块链的票据金融系统
33、DCR:拥有自主管理机制的比特币
34、PAY:数字货币支付卡
35、MAID:出租硬盘空间
36、BITCOINDARK:克隆版XZC
37、BTS:分布式交易所
38、GNT:出租计算机计算能力
39、PIVX:不会通货膨胀的克隆版DASH
40、GAS:支付NEO的转账费
41、TRX:APP内支付
42、VTC:克隆版比特币
43、MONA:日本版狗狗币
44、FCT:分布式数据记录
45、BAT:分布式广告网络
46、SALT:基于数字货币的抵押网络
47、KNC:分布式交易所
48、DOGE:可爱版比特币克隆币
49、DGD:由公司管理的黄金数字货币化
50、WTC:物联网区块链         
51、Powr:澳洲电力共享区块链
52、UCT(优物链):澳洲5G物联网区块链






本帖被以下淘专辑推荐:

回复

使用道具 举报

30

主题

76

帖子

267

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
267
 楼主| 发表于 2018-4-13 11:43:06 | 显示全部楼层
王涛 2018-03-13 15:12 发布在

近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读。作为第一批区块链技术的实现,传统比特币与以太坊在共识机制、存储机制、智能合约机制、跨链通讯机制等领域并没有非常严密的设计,从而引发了一些在数据库与存储领域比较常见的问题,导致其数据规模无法无限增加(当前仅几百GB就产生了严重的性能瓶颈,几乎不可能到达上百TB规模),吞吐量极为有限,使其不可能适应通用分布式数据存储或通用结算体系的要求。
作为数据库内核行业十几年的老兵,笔者将会从共识、存储、智能合约、多链、快速检索、以及通用接口等几个维度对区块链技术进行阐述,并会与数据库及大数据分布式计算技术进行横向对比。
区块链的本质即分布式多活数据库。
从产品功能的角度看,当前的区块链产品与数据库相比存在极大的差距。尤其是对于在业界存在了几十年的关系型数据库,其主要核心功能包括增删改查,而主要结构则包括SQL解析、日志、数据管理、以及索引管理几大模块。
而大数据技术兴起后,业界开始使用PC服务器替代传统小型机,为了避免服务器掉电导致的数据页损坏,分布式数据库或存储普遍使用三副本对数据进行冗余保存。
尽管从功能上看,当前区块链技术仅仅是数据库的一个微小子集,但是其一系列设计机制,与传统数据库的内核理念极为相似。譬如,从其传输和存储的数据结构上来看,区块链的链式结构来源于传统数据库的事务日志。任何数据库的DBA都知道,数据库的事务日志本质上就是不可更改的链式结构,事务中的每一条操作记录都会有一个反向指针指向该事务中的上一条记录。因此,区块链的链式结构本质上脱胎于数据库事务日志,同时增加了区块之间的反向哈希值作为指针,且引入了默克尔树结构进行快速数据校验。因而,我们可以安全地进行认为:区块链的链式结构在存储体系中等价于数据库的事务日志。本质上数据库的任何操作同样是不可篡改的,只不过当前大部分数据库不会对外暴露事务日志的解析工具,仅保存每一条记录的最终状态而已。
(图1:数据库体系结构,黄色部分代表区块链同样包含的组建)

1.1 一致性原理对比
在分布式数据库中,当前普遍采用PAXOS或RAFT算法进行数据多份冗余的一致性协商。一般来说,在分布式数据库体系中,每个数据分片由至少3个互相冗余备份的节点构成,而在正常运行时的数据库每个分片都会存在一个主节点与两个从节点。其中主节点负责数据的读写操作,从节点进行只读操作。当主节点写入数据时,其事务日志会被实时同步给其他从节点进行回放,以达到主从节点之间数据一致性的目标。
(图2:数据库主从节点同步)
那么对比区块链的体系,可以认为数据库领域的主节点即日志生成节点,其每次生成事务日志的功能,与区块链中每次出块时矿工的功能完全等价。唯一不同的是,数据库在每次操作时对日志实时广播到从节点中,并且在事务提交时进行一致性判断。而区块链则采用检查点方式,每个节点接收自己的交易请求,并将请求广播到其他节点中,而每一次出块操作即产生一个检查点,该检查点包含的信息即出块节点向区块中写入的所有记录。这些记录被发送到其他节点后,每个节点对数据块中的记录进行验证并永久写入自身的交易日志(即区块文件)。
(图3:区块链节点互相对等)
但是,区块链和数据库在一致性选择上最大的不同在于哪个节点成为检查点发起的节点。数据库由于采用了主从机制,主节点永远是日志的发起节点,而从节点永远是日志回放与验证节点。但是区块链则不同,其采用某些算法(例如PoW、PoS、DPoS等)在多个参与节点之间定期选取一个节点进行检查点确认,这也是区块链号称自身安全的一个理由所在:在全网大量的节点中攻击者无法确定下一个检查点确认的节点是谁(当然,就算攻击者确定了下一个出块节点,还有一系列的数字签名机制保障事务不被伪造和篡改)。
因此我们可以安全地认为,从检查点节点选择的领域来看,传统分布式数据库确定主节点生成事务日志的机制,是区块链共识机制的一种简单实现。也就是说,如果区块链共识机制每次都选取同一个节点作为出块节点,其机制基本等价于分布式数据库的主从复制原理(数据库按照事务提交进行一致性验证,区块链不存在事务的概念,因此按照数据块进行一致性验证)。
(图4:数据库以提交回滚操作作为检查点,区块链以生成区块作为检查点)

1.2 共识算法
由于区块链体系中并不存在某个节点永久作为检查点确认的节点,而是每个参与节点都有机会被选举成为该角色,因此在每个节点都能够进行读写操作时,整个区块链体系从功能上等价于一个不支持事务机制的多活数据库。而具体使用哪种算法选择出块节点(PoW与PoS之争)、哪些节点在接收到数据块时该如何验证(PoS与DPoS之争)、节点之间的数据以什么方式进行传播(DAG与链式结构之争)、以及如何确保一条交易被大多数参与节点所接受(PBFT、Paxos、RAFT、以及各种分叉解决方案等算法之争,Hyperledger 1.0甚至直接使用中央Kafka做排序也是醉了),则是区块链共识算法需要回答的问题。不同的解决方式制约着区块链的一致性、性能、吞吐量、以及可靠性。
1.2.1 挖矿
挖矿是来自于比特币的一种说法,其本质在于多个节点通过PoW算法选举出一致性检查节点。关于PoW的说明业界已有无数文章分析,这里笔者不再赘述细节。实际上,从数据管理的角度来看,PoW是一种效率极为低下的暴力机制,通过不停地循环生成随机数并进行散列,通过网络预先广播的规则(复杂度),让每个参与的节点自证明其是否符合成为检查点的资格。
对比分布式数据库的Paxos或RAFT算法,每个参与节点默认自身有资格成为主节点,在原本的主节点无法连通的情况下通过最新事务号或其他原则相互投票,从而选举出新的主节点。而由于竞争节点过多,区块链作为一个拥有几万甚至几十万复制节点的多活数据库,继续采用Raft或Paxos算法一方面复杂度太高,另一方面无法解决拜占庭问题,因此比特币采用PoW机制,通过大家公认的某种机制,让每个参与节点首先自己判断是否符合要求(即生成了随机数后自己进行散列并验证)。当节点自身认为符合条件后,将之前生成的随机数以及打包好的日志(数据块)广播给集群中其他节点,从而大幅度减少了节点间相互投票所需的复杂度。
节点通过循环生成随机数并自我验证的过程,即PoW中所谓的“挖矿”阶段。
因此,如果把挖矿的概念扩展,不论是PoS、PoW或DPoS算法中,节点间竞争成为检查点的过程即挖矿过程。
1.2.2 PoW与PoS的选择
PoW是一种极为粗暴原始,但却又及其有效防止恶意攻击的选举算法。该算法与计算机内核中多线程协作的自旋锁有异曲同工之处,自旋锁的原理在于通过线程自身不停循环判断一个内存地址状态,直到该状态设置为空闲后,通过CPU原子操作将其置为锁定状态,以此和其他线程进行互斥的机制。这种机制和PoW极为相似。
而PoS更倾向于类似Raft投票机制,通过固定时间协调所有节点参与投票,根据某种规则(例如持有代币数量、或提供存储空间大小等)判断每个节点的权重,最后选取权重最高的节点作为检查点节点。而在数据库一致性选择的Raft算法中,普遍会根据最新事务号作为权重,多个节点之间优先选择包含最新事务记录的节点作为主节点。
因此,可以看到PoW与PoS最大的区别在于,PoW在算法复杂度足够高的前提下,基本不需要太多的节点间互相通讯和确认,对代码的实现要求极低。而PoS对于多节点间一致性验证、防伪等要求较高,但是很大程度上可以沿用传统一致性选举的思路进行一定程度的优化即可。
(图5:PoW与PoS流程对比)
但是PoW的缺点与自旋锁一样,对于计算资源的要求极高。一个被错误应用的自旋锁可以轻易消耗掉计算机中所有的CPU资源,同样PoW当前被人们诟病的最大问题也在于资源消耗。PoS在这方面则没有任何问题。
1.2.3 PoS与DPoS的选择
类似Paxos与Raft,集群内参与的节点越多则效率越慢。一个典型的分布式数据库,使用单副本的效率可能会是三副本的两倍,而三副本的效率则又是七副本的两至三倍。因此,为了满足足够的吞吐量,使用PoS在进行选举时务必不能在成千上万个节点之间进行投票选举,而是应当在有限的集合范围内进行投票验证。这就是DPoS的核心原理。
DPoS给出一种思路,将成千上万个PoS节点,通过某种机制(例如持有代币的数量)选举出若干(奇数个)节点,在这几个节点之间进行投票选举(在一些实现中甚至会在这些节点间以令牌环的方式进行轮询,进一步减少投票开销)出每次的检查点(出块)节点,而不用在网络中全部节点之间进行选择。
这种机制能够大幅度提升选举效率。在几十个最多上百节点之间进行一致性投票一般来说可以在秒级完成并达到共识,因此DPoS机制可以将检查点(事务确认时间)提升到秒级,通过减少投票节点的数量或采用令牌环机制甚至可以降低到毫秒级。
(图6:PoS对比DPoS)
但是,DPoS的性能无法无限提升。在一个完美的软件实现中,其性能与吞吐量则物理制约于节点间通讯的网络带宽。一般来说,对于公网环境中两个节点之间的带宽能够维持在上下行均5MB/s(50兆带宽)则相当优秀了,大部分情况下远远无法达到该数值。而如果每条交易日志需要100字节,由于网络即需要广播交易也需要广播日志,则网络带宽消耗加倍,因此在两个节点的单链中最大吞吐量不超过2.5万每秒(5MB/100字节/2=25000),假设集群中包含更多节点,则最大吞吐量需要根据其使用的P2P同步机制成比例缩减。如果需要进一步提升则需要进行分链(类似于数据库分片的概念),该主题将会在下面的章节详细讨论。
1.2.4 DAG与链式结构的选择
DAG与链式结构的本质区别在于异步与同步通讯。在前文中已经讨论过链式结构的本质等同于数据库事务日志,而出块操作则为检查点操作,那么链式结构体系可以看做是定期同步检查点的数据库事务同步机制。
而DAG则通过将事务操作进行异步处理来增加网络吞吐量,采用谣言传播算法在节点间发送操作日志,并通过某种机制(IOTA每次验证前两条交易,并计算一个PoW代表权重)将一个权重赋给该操作。
相比起同步操作的链式结构,DAG结构与任何异步机制一样,能够带来的提升在于吞吐量(真的么?后文会有描述),但是可能产生的问题则在于无法有效预测交易被确认的时间与周期,并且操作之间的顺序无法最终在多个节点间确认保持一致。
由于当前市面上DAG的实现相对较新,暂时还存在一些理论上未突破的局限性,包括:
  • 在对历史交易验证时采用随机方式,而没有任何先后规则,那么有可能产生某些交易在极端情况下没有任何其他节点对其验证,从而永远不会被确认。这个问题在IOTA中通过多次重试的方式解决,但是是否存在更好的一次性确认机制能更有效地解决该问题值得探讨;
  • 为了追踪每一笔交易与之前交易的关系,整个DAG图谱需要被随时检索和访问。在一个较大规模的系统中其交易图谱溯源会非常复杂,同时几乎不可能被全部保存在内存中以进行实时更新。而如果将这些数据保存在磁盘上,那么实时刷新每个Tangle的权重会造成大量随机I/O(也许可以通过大量部署SSD解决),因此从工程实现上来看优化难度较大;
  • 由于DAG的操作记录写入顺序不存在“区块”或“日志”这类检查点机制,因此每个节点各自为政,对于全局顺序无法得到保障。在这种情况下,在非等阶操作时可能存在不一致的问题(例如对同一条记录,在两个不同的节点同时执行转账(加减法)和计息(乘法)操作,两个节点得到的操作顺序有区别,导致账户余额最终结果不一致)。
如今从DAG衍生出一些其他数据结构(例如哈希树等),基本上只是从存储方式上有一些特定的优化,但是整体上与DAG所带来的问题保持一致。
笔者认为,DAG的异步数据分发思路完全可以与链式结构相辅相成。在最终理论完善之前其应用场景应当被谨慎选择,避免过早将其直接应用于通用化范式的场景。

1.3 结论
在区块链的共识机制中,其本质与分布式数据库的一致性算法存在极多的相似之处。拜占庭问题的引入仅仅从算法和选举节点数量上对网络结构做出一些调整,但是并不从本质上改变分布式系统一致性选举的机制。
(图7:区块链共识机制对比)
PoW采用简单粗暴但极为有效的方式,通过节点首先自证其资质后才进行广播的方式,大幅度减少了网络间的通讯压力,但与之带来的问题则在于自证资质的计算资源消耗极大。
PoS采用与传统分布式一致性验证类似的机制,通过代币数量(或存储容量等指标)作为权重依据,使用某种分布式算法选举出每次的检查点节点。这种机制的好处在于没有消耗计算资源的自证资质过程,但是带来的问题在于每次选举时在大量节点的网络中对网络压力极大。
DPoS作为PoS的变形,通过缩小选举节点的数量以减少网络压力,是一种典型的分治策略:将所有节点分为领导者与跟随者,只有领导者之间达成共识后才会通知跟随者。该机制能够在不增加计算资源的前提下有效减少网络压力,在优秀的软件实现中将会具有较强的应用价值。
DAG则采用异步机制替代链式检查点的同步策略,但是由于其核心不存在一个标准的一致性确认机制(即账本或日志体系),同时无法对操作顺序进行全局统一排序,因此短期看来理论基础还有待突破。但是,从长期看来,DAG是一种非常新颖且有前景的机制,为传统数据管理领域的思维打开了新的大门。


十分钟讲清楚区块链侧链技术
[size=0.8em]时间:18-04-08 18:15:17 点击:450 来源:SDK.cn

最近,区块链技术引起了广泛关注。虽然区块链技术目前正在快速发展,但是传统区块链技术要落地到商业应用,特别是金融应用,仍然存在很多问题需要解决,如交易性能、隐私保护等。解决这些问题的一种做法是重新开发新的区块链,但是这种做法会造成大量重复性工作,并且需要不断的发行新的数字资产。那么是否存在在不影响原有区块链工作的基础上,依托于原有区块链进行技术升级的解决方案,侧链就是在这种需求背景下被提出的。本文首先介绍了侧链的基本概念,接着分析了侧链的产生背景与工作原理,最后对目前主要存在的侧链进行了介绍。

01—基础概念

侧链协议本质上是一种跨区块链解决方案。通过这种解决方案,可以实现数字资产从第一个区块链到第二个区块链的转移,又可以在稍后的时间点从第二个区块链安全返回到第一个区块链。其中第一个区块链通常被称为主区块链或者主链,每二个区块链则被称为侧链。最初,主链通常指的是比特币区块链,而现在主链可以是任何区块链。侧链协议被设想为一种允许数字资产在主链与侧链之间进行转移的方式,这种技术为开发区块链技术的新型应用和实验打开了一扇大门。

02—产生背景

2012年,在比特币聊天室中,首次出现了关于侧链概念的相关讨论。当时比特币的核心开发团队正在考虑如何可以安全的升级比特币协议,以增加新的功能,但是直接在比特币区块链上进行功能添加比较危险,因为如果新功能在实践中发生软件故障,则会对现有的比特币网络造成严重影响。另外,由于比特币的网络结构特性,如果进行较大规模的改动,还需要获得多数比特币矿工的支持。这时,比特币核心开发者便提出了侧链方案。这种技术允许开发人员将新功能附加在其他的区块链,但是这些区块链仍然附着在现有比特币区块链上。这些区块链中新功能可以充分利用现有比特币的网络特性,而不会对现有的比特币网络造成危害。

2014年,这时已经出现了许多具有新功能的区块链,并产生了各种竞争币,如莱特币、狗狗币等。这时,比特币的核心开发团队担心这些竞争币的产生会稀释比特币的价值。他们认为,应该把比特币作为一种储备货币,并将新功能添加到侧链上。这样如果用户想使用其他的新的区块链功能,就不需要购买其他代币。为了将侧链由概念转化成现实,Adam Back、Matt Corallo等比特币核心开发者共同发起成立了Blockstream公司,并在同年十月,发布了白皮书《Enabling Blockchain Innovations with Pegged Sidechains》,首次明确提出了侧链的概念及其协议实现方案。

通过侧链,可以在主链的基础上,进行交易隐私保护技术、智能合约等新功能的添加,这样可以让用户访问大量的新型服务,并且对现有主链的工作并不造成影响。另外,侧链也提供了一种更安全的协议升级方式,当侧链发生灾难性的问题时,主链依然安然无恙。

03—实现方案

侧链实现的技术基础是双向锚定(Two-way Peg),通过双向锚定技术,可以实现暂时的将数字资产在主链中锁定,同时将等价的数字资产在侧链中释放,同样当等价的数字资产在侧链中被锁定的时候,主链的数字资产也可以被释放。双向锚定实现的最大难点是协议改造需兼容现有主链,也就是不能对现有主链的工作造成影响,其具体实现方式可以分为以下几类:

(一)单一托管模式

最简单的实现主链与侧链双向锚定的方法就是通过将数字资产发送到一个主链单一托管方(类似于交易所),当单一托管方收到相关信息后,就在侧链上激活相应数字资产。这个解决方案的最大问题是过于中心化。图1给出了以比特币为主链的单一托管模式的工作原理示意图:

(二)联盟模式

联盟模式是使用公证人联盟来取代单一的保管方,利用公证人联盟的多重签名对侧链的数字资产流动进行确认。在这种模式中,如果要想盗窃主链上冻结的数字资产就需要突破更多的机构,但是侧链安全仍然取决于公证人联盟的诚实度。图2给出了以比特币为主链的联盟模式的工作示意图:

单一托管模式与联盟模式的最大优点是它们不需要对现有的比特币协议进行任何的改变。

(三)SPV模式

SPV(Simplified Payment Verification)模式是最初的侧链白皮书《Enabling Blockchain Innovations with Pegged Sidechains》中的去中心化双向锚定技术最初设想。SPV是一种用于证明交易存在的方法,通过少量数据就可以验证某个特定区块中交易是否存在。在SPV模式中,用户在主链上将数字资产发送到主链的一个特殊的地址,这样做会锁定主链的数字资产,该输出仍然会被锁定在可能的竞争期间内,以确认相应的交易已经完成,随后会创建一个SPV证明并发送到侧链上。此刻,一个对应的带有SPV证明的交易会出现在侧链上,同时验证主链上的数字资产已经被锁住,然后就可以在侧链上打开具有相同价值的另一种数字资产。这种数字资产的使用和改变在稍后会被送回主链。当这种数字资产返回到主链上时,该过程会进行重复。它们被发送到侧链上锁定的输出中,在一定的等待时间后,就可以创建一个SPV证明,来将其发送回主区块链上,以解锁主链上的数字资产。SPV模式存在的问题是需要对主链进行软分叉。图3给出了以比特币主链的SPV模式的工作流程示意图:

(四)驱动链模式

驱动链概念是由Bitcoin Hivemind创始人Paul Sztorc提出的。在驱动链中,矿工作为‘算法代理监护人’,对侧链当前的状态进行检测。换句话说,矿工本质上就是资金托管方,驱动链将被锁定数字资产的监管权发放到数字资产矿工手上,并且允许矿工们投票何时解锁数字资产和将解锁的数字资产发送到何处。矿工观察侧链的状态,当他们收到来自侧链的要求时,他们会执行协调协议以确保他们对要求的真实性达成一致。诚实矿工在驱动链中的参与程度越高,整体系统安全性也就越大。如同SPV侧链一样,驱动链也需要对主链进行软分叉。图4给出了以比特币为主链的驱动链模式的工作流程示意图:

(五)混合模式

上述所有的模式都是对称的,而混合模式则是将上述获得双向锚定的方法进行有效的结合的模式。由于主链与侧链在实现机制存在本质的不同,所以对称的双向锚定模型可能是不够完善的。混合模式是在主链和侧链使用不同的解锁方法,例如在侧链上使用SPV模式,而在主链网络上则使用驱动链模式。同样,混合模式也需要对主链进行软分叉。

04—典型范例

目前,比较著名的侧链包括基于比特币网络的侧链BTC Relay、Rootstock的Liquid,以及非比特币的侧链如Lisk和国内的Asch等。

BTC Relay是由ConsenSys的推出的基于以太坊区块链的智能合约的侧链解决方案。BTC Relay把以太坊网络与比特币网络以一种安全去中心化的方式连接起来。BTC Relay通过使用以太坊的智能合约功能允许用户在以太坊区块链上验证比特币交易。以太坊DApp开发者可以从智能合约向BTC Relay进行API调用来验证比特币网络活动。

Liquid是Blockstream的开源侧链项目,使用了比特币双向锚定技术,Liquid目的是实现使得比特币可以在主链和侧链中互转,旨在提高隐私性、降低成本、加速交易所和经纪商之间的价值转移及结算流程。

Lisk是一个致力于为JavaScript开发者提供创建分布式应用程序的区块链平台,由德国的Max Kordek和Oliver Beddows于2016年初成立。它把每一个分布式应用程序都会在其自己且独一无二的区块链,也就是侧链上运行,这种封装使得主要的Lisk的主网高效,迅速和精简

Asch是国内推出的一个基于侧链技术的去中心化应用平台,由单青峰于2016年初成立。Asch平台提供的服务包括一个主链和一套应用软件开发工具包。Asch的主链主要负责构建基础设施、应用间的数据共享以及资产路由,应用软件开发工具包内置了侧链协议,主要负责构建具体的应用,通过侧链协议可以与主链进行资产互通。

05—总结

侧链是以融合的方式实现加密货币金融生态的目标,而不是像其它数字资产一样排斥现有的系统。侧链技术进一步扩展了区块链技术的应用范围和创新空间,使传统区块链可以支持多种资产类型,以及小微支付、智能合约、安全处理机制、财产注册等,并可以增强区块链的隐私保护。利用侧链,我们可以轻松的建立各种智能化的应用如金融合约,股票、期货、衍生品等。


回复

使用道具 举报

30

主题

76

帖子

267

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
267
 楼主| 发表于 2018-4-13 12:37:34 | 显示全部楼层
拜占庭容错(BFT)算法介绍
岳利鹏 发表于 2017-07-23 12:51


【原文作者:Jae Kwon,译者:郭光华】


2011年比特币将世界的注意力引向到了区块链。但可惜的是,比特币版本的区块链不能解决区块链行业的很多问题。那是因为:

1、比特币的POW共识会浪费大量能源。

2、交易非常缓慢,一笔交易需要花一个小时甚至更长的时间。

3、没有什么激励机制来激励POW矿工忠于一条链,所以会导致升级很困难。


我们需要一种安全的共识,并且不会给我们的地球施加巨大的能源成本。这种方法就是基于拜占庭容错(BFT)的权益证明(POS )。我们称之为BFT-PoS。


在我们深入了解BFT-PoS之前,我们只需要知道拜占庭错误,而不需要知道拜占庭将军问题 的细节。 在分布式系统中,数据需要在数百或数千个节点上进行复制,而计算机时不时会网络中断或脱机,所以需要有一些容错机制或共识算法。那么如果这些节点的一部分失败,整个系统仍然需要达成共识。


标准的容错共识算法(如RaftPaxos)假设当一个节点出现故障时,它只是停止工作而不回复消息。谷歌,Facebook和一些现有的数据库产品已经在他们的防火墙内使用了这一系列的共识算法,使机器有故障产生时也能确保服务仍然可用。


但这些算法不适用于公有区块链,因为公有区块链中没有防火墙。任何拥有算力(PoW)或代币(PoS)的人都可以参与,甚至可以试图破坏网络。为了达成共识,我们需要拜占庭的容错能力。在拜占庭故障中,故障节点能以完全任意的方式运行。节点甚至可以串通来尝试作恶,并最大限度地发挥其破坏力。


因此,本质上,BFT共识算法的目的是在不信任网络(如万维网)中的节点间建立信任。 BFT不是什么新概念,该概念首先在Lamport,Shostak和Pease于1982年的一篇学术论文中引入 。但是Lamport等人只在同步环境中(所有的消息总是及时到达)演示了算法的理论可行性。 但在现实世界中,你不能真正地相信互联网能及时交付任何东西。


所以在1988年,Dwork,Lynch,Stockmeyer(DLS)提出了一种在大多数异步环境中工作的算法。 1999年晚些时候,米格尔·卡斯特罗和芭芭拉·里斯科夫提出了一个实用的解决方案,用于持续的BFT协商一致,这仍然是迄今为止最先进的BFT算法。


但长久以来,主流媒体忽视了这些创作。 没有人明白BFT在学术界和诸如IBM和DARPA之类的主要机构之外的重要性,直到2009年Bitcoin来临。比特币是第一个开放式去中心化应用程序,为全球货币帐本提供BFT共识,但对拜占庭式将军的问题采用了一种全新的解决方案:PoW。在PoW中,谁的算力最强,谁最有可能打包交易出块,获得该块交易费和新产生的比特币。今天,许多矿业公司在生产矿机,也有许多矿工正在加入矿池。


另一方面,PoS完全消除了PoW的能源依赖。在PoS中,矿工被替换为在系统中拥有股权的“验证者”。验证者不必投资昂贵的处理系统,但他们必须购买“股权代币”。任何普通笔记本电脑都足以解决计算。 Peercoin,BitShares,Nxt等已经使用了某种形式的PoS,而Ethereum正在计划于不久的将来进行PoS。然而,虽然PoS具有实际意义,但是很多人都反对使用PoS,声称这是不可能的。但这根本不是事实。使用BFT,您绝对可以保护PoS。只是我们还没有看到任何公有链实现了BFT-PoS。


虽然该理论可能难以解释或理解,但适当的BFT算法提供的最终结果很容易掌握。 与PoW区块链不同,BFT-PoS块链根本不分叉。对于双花攻击,除非1/3或更多的验证者协调进行此类攻击。而且,当1/3或更多的验证者确实导致双重花费攻击时,我们可以计算确定哪些验证者需要对攻击负责,进而可以摧毁它们的权益代币并将其从网络中剔除,就好像矿工联合起来控制整个链一样。


至今,包括POW算法在内,还没有哪种共识算法可以达到BFT-PoS的容错水平。 BFT-PoS表现非常出色。今天,在全球有几百个验证节点的公有链中,你可以在3s内轻松获得交易确认。这一“即时确认”的最佳容错阈值理论已经被tendermint证明。虽然随着验证节点的增加共识速度会变慢,但遵循着Nielsen定律(网络带宽和响应速度增长),每年都可以增加一定的节点,而性能不会变。


此外,BFT-PoS还将增加移动钱包的安全性。目前存在的移动钱包很少充分利用了比特币提供的安全性,因为没有人愿意等待一个小时才能确认交易。相反,大多数钱包只是假设转账的人不会双花。而且,虽然我们没有时间在这里进行深入研究,但高效的移动钱包协议或“轻客户端SPV”协议是未来区块链互操作性的关键。


虽然PoW在比特币方面表现很好,但代价昂贵,速度慢,环境不友好。现在最好的选择是BFT-PoS。它是一种持久、节能的解决方案,在异步环境中运行良好。最重要的是,由于BFT是计算机科学界最好和最聪明的开发机构证明安全的。


回复

使用道具 举报

724

主题

1091

帖子

4057

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4057
发表于 2018-4-22 13:54:17 | 显示全部楼层
【导读】本文是 Fundamental challenges with public blockchains 的非完全翻译。原文作者 Preethi Kasireddy 是 Coinbase 的前员工,她写的技术文章非常适合新手阅读。
毫无疑问区块链技术有巨大的潜力。在 2017 年里,人们高昂的热情为 ICO 募集了数百亿资金,大大提升了加密货币市场的规模。
然而,另一面却没有得到足够重视:区块链存在一些技术壁垒(technical barriers),这导致难以有效地将它应用到主流人群里。这些技术壁垒包括:
  • 可扩展性的限制
  • 隐私保护的限制
  • 缺乏合约的形式化验证
  • 存储限制
  • 难以证明的共识机制
  • 缺乏治理和标准
  • 缺乏开发工具
  • 量子计算机的威胁
  • …还有

在这篇文章里,我会一一阐述这些技术壁垒,并分享一些可行的解决方案。
1. 可扩展性的限制
当前公有链的共识协议都存在这样的限制:网络中的全节点参与者需要处理全部交易。
为什么会这样?因为区块链本质上是「去中心化」——这意味着不存在一个中心团体来保护和维持系统。取而代之,网络的每个节点都会处理每笔交易并维持全状态副本,通过这种方式来保护系统。
去中心化共识机制的关键优势是安全保证、政治中立和抵抗审查等。然而,这是以扩展性为代价换来的,因为去中心化限制了区块链里全节点可处理交易的数量。
实质上这带来了两个影响
  • 低吞吐量:区块链可处理交易的数量十分有限
  • 缓慢的交易速度:处理一个区块的时间很长。比如比特币的区块时间是 10 分钟,以太坊的区块时间大约是 14 秒。在高峰期里花费的时间甚至更长。相较之下,Square 和 Visa 等服务的交易是即时确认的。

因此,公有链需要在低交易吞吐量和高中心化之间做一个权衡。
换句话说,随着区块链大小的增加,网络里全节点所需的存储、带宽和计算能力也会增加。当到达某个时刻,就只有少数节点才能提供足够资源来处理区块——这会带来中心化风险。
在那时,我们会回到需信任少数大节点的中心化系统里。然而我们想要的系统是:它既能每秒处理上千笔交易,又能带来一定程度的去中心化。
可扩展性的解决方案
理想状态下,我们希望我们设计的区块链有着与比特币和以太坊相近或更好的安全性,但同时又不希望网络里每个节点都要处理超过一定比例的交易。换句话说,我们需要一种机制,来限制验证交易的节点数量(注:因为减少验证节点数量可以提高吞吐量),同时又保证网络里的每笔交易都是合法可信。这听起来很容易,但在技术上非常困难。
可扩展性是平台走向成功的一个巨大障碍。下面是一些不同开发团队正在努力研究的解决方案。在这一篇文章里我已经对可扩展性解决方案进行了详细介绍,推荐大家阅读。这里只做一个简短总结
A.链下交易通道(off-chain payment channel)
该方案是在链下使用微支付通道网络处理大部分交易。区块链只作为清算层来处理一系列交易的最终清算,从而来减少底层区块链的负担。
这解决了我们前面讨论的吞吐量问题,区块链可处理交易的数量可提升一个量级。除此之外,由于交易都是在支付通道里处理的,无需等待区块确认,因此交易速度问题也得到了解决,消除了时延。
Raiden Network 和 Lightning Network 都是微支付通道网络的实例。
B.分片(Sharding)
分片的思想是把区块链的整体状态分割成不同的「片」,每部分状态都由不同的节点存储和处理。每个分片都只处理整体状态的一小部分,因此可以做到并行处理。区块链分片就像传统数据库的分片一样,但还需额外考虑如何在去中心化的节点集合里维持安全性和合法性。
C.链下计算(off-chain computation)
这个方案和状态通道很相似,但适用范围更广。其主要思想是以一种安全可证的方式,在链下处理一些在链上执行代价很高的计算。把计算和证明处理移到链下的独立协议里,可以提高交易吞吐量。一个实例是以太坊的 TrueBit。
D.DAG
DAG 是有向无环图(Directed Acyclic Graph)的缩写,这是一种有顶点和边的图结构。DAG 可以保证从一个顶点沿着若干边前进,最后不能回到原点。由此我们可以给顶点进行拓扑排序。
DAG
一些 DAG 协议,如 IOTA 的 Tangle,丢弃了全局的线性区块概念,使用 DAG 数据结构来维持系统状态。为了保证网络安全,这些协议需要用某种新方法,使节点不需要用线性方式处理每一笔交易。
另一种 DAG 协议 SPECTRE protocol,使用了区块的 DAG 技术,可以并行挖矿,从而带来更大的吞吐量和更快的交易确认时间。
DAG 技术还处在早期阶段。老实说,它们也存在一些需要被解决的底层限制和缺陷。
2. 隐私保护的限制
区块链上的交易并没有直接关联到你的身份,这看起来似乎是可以具有隐私保护的。每个人都可以匿名地生成钱包,并进行交易。
然而,事实远没有这么简单。
区块链技术的巨大前景之一是假名(pseudonymity)的使用:交易被记录在公共账本里,但是它们又与由数字和字母组成的地址保持关联。因为无需将真实世界的身份信息关联到地址上,交易的发起者似乎是不可能被追踪的。
然而,这种想法是错误的。没有将假名关联到个人信息,这确实可以保护隐私。然而只要有人建立了链接,则隐私就不再是秘密。一个例子是执法机构坦言他们在调查时,可以识别比特币用户,对他们进行反匿名(deanonymizing)。
这是怎么发生的呢?
商业网站的 Web Tracker 和 cookies 会轻易泄露与交易相关的信息。任何人,包括政府、执法机构和恶意用户都可以利用这些信息。
此外,区块链平台(如以太坊)的用户与智能合约进行着复杂交互。智能合约的所有细节,包括发送者和接受者、交易数据、执行的代码和合约内部存储的状态,都是公开。
大部分公司都不会考虑把重要的商业数据上传区块链中,因为黑客、竞争者和其他非授权组织都可以轻易看到这些信息。思考一下:
  • 电子医疗记录是十分隐私和敏感的信息。
  • 身份识别数据如身份证不能在智能合约上公开。
  • 凭证管理如密码和密钥都不能放在公开和不安全的智能合约中。
  • 金融文件如股权结构表或员工薪资都不能公开。
  • 这样的例子不胜枚举

隐私保护对于个人、组织和企业来说,都是一个本质挑战。许多人为区块链和数字货币着迷,是因为这个去信任和抵抗审查的系统能带来金融上的变革。矛盾的是,我们在使用的是一个公开且容易被追踪的账本。
隐私保护解决方案
下面是一些不同开发团队正在努力实现的方案
Elliptic Curve Diffie-Hellman-Merkle (ECDHM) addresses
理解 ECDHM 地址之前,你需要理解 Diffie-Hellman 密钥交换,其背后的思想在于双方之间建立一个共享的秘密。在公开网络里,这可以被用于交换秘密信息。
这是如何做到?
发送方和接收方共享 ECDHM 地址,然后通过共享的秘密将其转化成比特币地址。该比特币地址只会被拥有该秘密的人知道。唯一公开的东西只有可重复使用的 ECDHM 地址。因此,用户不用担心交易会被追踪。
Conceptual diagram that illustrates the general idea of the key exchange by using colors instead of very large numbers (Source: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)
ECDHM 地址方案包括 Peter Todd 提出的 Stealth Addresses,Justus Ranvier 提出的 BIP47 Reusable Payment Codes 和 Justin Newton 提出的 BIP75 Out of Band Address Exchange。然而,没有一个方案得到实际应用。
混合器(Mixer)
混合器的思想是把交易混到一个池里,收支平衡由池中的私有账本来记录。当池中的资金被花费后,原始交易就变得难以追踪了。观察区块链的人可以看到池的支付金额和收款人,但是无法追踪交易的发起人。混合器服务的一个例子是 CoinJoin。
不幸的是,混合器不是一个可靠的解决方案。研究者可以确定 CoinJoin 里的交易,他们证明,攻击者只要花费 $32,000,就能以 90% 的成功率识别交易。并且,研究者还证明混合器几乎无法抵御女巫攻击(Sybil attacks)和拒绝服务攻击(Denial-of-Service attacks)。
另一个令人不安的地方是,需要通过一个相对中心化的实体来维护混合器的私有账本,这意味着需要一个可信第三方来“混合”交易。
CoinJoin 不是默认交易方法,因此很少人参与到进混合池里,这导致匿名集合十分小。在人数少的集合里,可以很容易确认交易的来源。
另一种混合器方案是 CoinShuffle,这是德国萨尔布吕肯大学研究团队设计的去中心化混合协议。CoinShuffle 尝试解决 CoinJoin 里需要可信第三方来混合交易的问题。
门罗币(Menoro)
不同于其他的山寨币,门罗币不是比特币的分叉,而是基于另一种协议 CryptoNote。门罗币的最大特色是环签名(Ring Signature)方案。
环签名是一种群签名,群里的每个签名者都拥有一对私公钥对。不像传统的加密签名证明交易是单个签名者用私钥签的,群签名证明交易是群里的某个人签名的,但不会暴露具体是谁签的。
零知识证明(Zero-knowledge proofs)
零知识证明是指,在不揭露特定知识的情况下,证明者(prover)可以说服验证者(verifier)他们知道该知识。换句话说,零知识的输入是秘密的,证明者不会向验证者揭露任何知识。零知识证明可以被用在隐私保护方案里。例子包括:
例子1:质询/响应比赛
在计算机安全里,质询-响应认证(challenge-response authentication)是一个协议族。在协议里,一方进行提问(“质询“),另一方给出正确的答案(”响应”)以获得授权。在区块链里,这个“比赛”能被用于验证交易。如果某一交易是非法的,其他节点会注意到其非法性。这就需要提供可验证的证明(verifiable proof),来证实交易是非法的。如果验证失败,则会产生一个“质询”,要求交易的发起人生成一个“响应”,来证明交易是合法的。
这里有一个例子:假设只有 Bob 可以访问某些资源(如他的车)。Alice 现在也想访问它们(如开这辆车去杂货店)。Bob 发起一个质询,假设为“52w72y“。Alice 必须用一个字符串来响应 Bob 发起的质询。使用一个只有 Bob 和 Alice 知道的算法,这是找到答案的唯一方式。此外,Bob 每次发起的质询都会不一样。知道先前正确的响应,并不能给 Alice 带来任何的优势。
质询/响应比赛已经被使用在区块链,如以太坊里了。然而,我们需要相应的函数库和工具,来使这一类的认证方案更容易被使用。
例子2:zkSNARKs
zkSNARKs 到底是什么?让我们来逐步分解其定义:
  • zk=zero-knowledge(零知识)。不需要信息本身的条件下,可以证明该信息存在。
  • SNARK:Succinct Non-interactive Adaptive ARgument of Knowledge
  • 简洁(Succinct)表示证明简洁,可以被快速验证。
  • 非交互(Non-interactive)表示验证者不需要和证明者进行交互。取而代之,证明者会预先公开它的证明,而验证者可以检查它的正确性。
  • 适应性知识论证(Adaptive argument of knowledge)表示某些计算的证明。

尽管我希望有一天可以写一篇文章介绍 zkSNARKs,但这里我会跳过技术细节。zkSNARKs是一个的构建隐私保护的组件,它令人振奋且具有远大前景,但有几点需要注意
  • SNARKs 是资源密集型的
  • SNARKs 能让用户证明他们拥有访问某个秘密的权限。但用户有职责维护秘密,让它在需要的时候能被访问到。
  • SNARKs 需要一个启动阶段,来准备需要证明的电路或运算。该阶段由一组可信团体预先进行。这不仅意味着你需要信任进行该启动阶段的团体,还意味着不适合用 SNARKs 进行任意的运算,因为总需要一个准备阶段。

例子3:zkSNARKs + Zcash
Zcash 是基于 zk-SNARKs,具有隐私保护特点的加密货币。在 Zcash 所谓的“私密交易(shielded transactions)”里,每一个被使用的币都带有一组匿名集合。私密交易使用“私密地址(shielded addresses)”,它要求发送方或接收方生成一个零知识证明,以在不泄露交易信息的情况下,允许其他人验证交易。
Zcash transaction diagram


Zcash 无疑是一个值得关注的有趣项目。
例子4:zkSNARKs + Ethereum
在以太坊下一个要升级的协议 Metropolis 里,开发者将可以在链上高效地验证 zk-SNARKs。
我们可以在支持 SNARKs 的以太坊里做什么呢?可以把某些合约变量被设为不可见。秘密信息可以与那些遵守使用 SNARKs 的合约规则的用户存储在一起,而不是直接存储在链上。每一组用户群自身都需要一个可信的启动阶段,这会增加一些用于准备阶段的开销。但一旦电路被设置好,它就可以被任意数量的交易使用。
在支持 SNARKs 的以太坊里,你无法把隐私与用户分开,即做不到自治性隐私(autonomous privacy)。由于以太坊的 SNARKs 依赖用户在链下维护密钥,因此如果没有这些用户,就没有地方可以找到这些秘密。
例子5:zkSTARKs
ZK-SNARKs 有一个更年轻更闪耀的同胞兄弟:ZK-STARKs,其中“T“表示”透明(transparent)“。ZK-STARKs 解决了 ZK-SNARKs 的一个主要缺陷:需要依赖一个可信的启动阶段。由于 ZK-STARKs 只依赖哈希和信息论,因此它更简易;由于不再使用椭圆曲线和指数假设,面对量子计算机时它更加安全。
总而言之,尽管在上述的零知识证明隐私保护方案的前沿研究中,我们取得了惊人的进步,但仍然有许多工作需要去做。我们需要对零知识证明的函数库进行实证研究和实践检测,使其成熟。我们需要在不同公链上对 zkSNARKs 和 zkSTARKs 进行实验。在真实世界的场景里,Zcash 则需要在扩展性上给出令人满意的使用案例。我们离这些仍有很长的路要走。
代码混淆(Code Obfuscation)
另一种隐私保护机制是代码混淆。该方案要找到一种方式来混淆程序 P,混淆器(obfuscator)会产生第二个程序 O(P)=Q,使得在给 P 和 Q 相同的输入时,产生相同的输出。但是 Q 不会揭露与 P 内部构造相关的任何信息。这使得我们可以在 Q 内部隐藏如密码和身份证等的私密信息,但同时在程序里使用这些信息。
虽然研究者已经证明完全的黑盒混淆器是不可能实现的,但不可区分混淆器(indistinguishability obfuscation)是可以实现的,这是一种概念上弱化的混淆器。不可区分混淆器 O 的定义是,如果你使用两个同等的程序 A 和 B(如把相同值输入到 A 或 B 里去产生相同的输入)计算得到 O(A)=P 和 O(B)=Q,则在无法进入程序 A 或 B 的情况下,则在计算上分辨 P 来自于 A 还是 B 是不可行的。
最近,研究者 Craig Gentry, Amit Sahai 等人完成了不可区分代码混淆器。然而,该算法的计算开销十分高昂。
如果开销问题可以得到改善,则能带来巨大的潜在好处。
举个例子,假设以太坊的智能合约里有  Coinbase 的密码。则我们可以写出这样一个程序:当智能合约满足了特定条件后,合约通过中间节点初始化与 Coinbase 的 HTTPS 会话,使用密码进行登录,然后执行交易。由于合约里的信息被混淆了,因此中间节点或区块链的其他参与者都没法修改发出的请求和获取用户密码。
预言机(Oracle)
在区块链世界里,预言机是指在智能合约和外部数据源之间传递消息的角色。它在链上智能合约和链下外部数据源之间充当数据的运输者。因此,一种保护信息隐私性的方法是使用预言机从外部数据源中取出隐私数据。
可信任执行环境(Trusted Execution Environments)
可信任执行环境(TEE)是位于主处理器里的一个安全区域。在 TEE 里加载运行的代码和数据会得到隐私性和完整性的保护。TEE 可以与面向用户的操作系统并行运行,但比后者具有更好的隐私性和安全性。
3. 缺乏合约的形式化验证
智能合约的形式化验证仍然是一个未解决的巨大问题。首先,让我们通过“形式化证明(formal proof)”来理解“形式化验证(formally verify)”的意思。在数学上,“形式化证明”是一种数学证明,计算机可以通过基本的数学公里和推理规则(inference rules)来证明它。
在程序方面,形式化验证是一种判断程序是否能按预期运行的方法。具体的规约语言可以来描述输入和输出之间的函数关系。也就是说,如果在程序里声明了一个不变量,则我们应该证明这个声明的存在。
规范语言的一个例子是 Isabelle,它是一种通用证明辅助,可以在形式化语言里表达数学公式,还提供了工具在逻辑运算上来证明这些公式。另一种规范语言是 Coq,这是一种用来书写数学定义、执行算法和定理的形式语言。
对于编码在智能合约里的程序来说,为什么形式化验证十分重要?
一个原因是智能合约是不可逆的,这意味着一旦将它们部署到主网络里,你就无法升级或修改它们。因此在部署和使用智能合约之前,需要保证一切都不会出错。而且,智能合约是可公开访问的,存储在智能合约里的内容对任何人可见;每个人都可以调用智能合约里的公开方法。这带来了开放性和透明性,但也会吸引黑客攻击智能合约。
无论你多么小心谨慎,写出一个没有 bug 和完全可信的智能合约都是十分困难的。此外,在以太坊上,由 EVM 指令的设计方式,验证 EVM 代码也很困难。因此在以太坊上很难找到一种形式化验证的解决方案。但无论如何,形式化验证都是一种减少 bug 和攻击的强有力手段。比起传统方法(如代码测试和同行审查),它在很大程度上可以保证正确性。我们急切地需要一种更好的解决方案。
4. 存储限制
公有链上的大部分应用都需要解决存储问题(如用户身份、金融信息等)
然而,在公有链上存储信息意味着数据
  • 被网络里的每一个全节点存储着
  • 被无限期存储着,因为区块链数据只增不减,且不可逆。

在去中心化网络里,每一个全节点会存储越来越多的数据,因此数据存储带来了巨大的开销。这将导致存储变成区块链应用的巨大瓶颈。
存储解决方案
下面介绍一些项目,它们使用不同的策略将数据分割成分片(shard),并以去中心化的方法将其存储在参与节点里。这些方法的基本前提是不让每个节点都存储所有数据,而是将数据分散后,存储在一个节点集合里。一些工程实例:
  • Swarm:Swarm 是以太坊上的 p2p 文件分享协议。你能将程序代码和数据存储在主链之外的 swarm 节点里,这些节点与以太坊主链会保持连接。你可以在链上交换这些数据。
  • Storj:文件和数据一开始会被分片和加密,然后被分散并存储到多个节点里,每个节点只存储数据的一小部分。这是一种“分布式存储”。Storj 代币(SCJX)被用来支付存储和激励存储文件和数据的节点。
  • IPFS:这是一种 p2p 超媒体(hypermedia)协议,它的特点是高吞吐量,基于内容寻址(content-addressed)的区块存储模型和超链接。本质上,它能以一种持久化和去中心化的方式存储文件,同时还有历史版本控制和减少相同文件副本的特点。
  • Decent:Decent 是一个去中心化的内容分享平台,允许用户在没有可信第三方时上传和分享它们的作品(如视频、音乐和电子书等)。存储内容的节点会被奖励手续费,用户可以跳过中介,经济实惠地接触到这些内容。
  • … 还有更多

5. 难以证明的共识机制
区块链具有”去信任(trustless)“的特点。用户不需要信任任何人。无需信任带来了自治、抵抗审查、真实性和无需授权等一系列引人注目的性质。
这种用来保证区块链不易受攻击者破坏的机制,被称为“共识协议”。对于比特币和其他区块链来说,共识协议并不是一个新东西。在 1992 年,Dwork 和 Naor 就创建了第一个“工作量证明(proof-of-work)“系统,用来在无需任何信任的情况下访问资源。这个系统被用来解决垃圾邮件问题。Adam Back 后来在 1997 年创建了名为 Hashcash 的相似系统。 在 2003 年,Vishnumurthy 等人首次采用 proof-of-work 来保护货币,但其代币不是作为通用货币来使用,而是用于维护点对点文件的交易系统。
5 年后,中本聪(Nakamoto)用 proof-of-work 机制发明了一种有价值的货币,即比特币。这种底层共识协议使得比特币成为第一个在全球使用的去中心化账本。
工作量证明(proof-of-work)共识
PoW 机制的思想是让问题很难解决,但验证很容易。矿工需要使用算力来进行巨大开销的计算,而比特币系统用比特币和交易费来奖励给出答案的矿工。矿工拥有的算力越多,则他们在共识上的“贡献”越大。
PoW 共识使得比特币成为第一个在全球使用的去中心化账本。它无需可信第三方就能解决“双花”问题。然而,PoW 不是完美的,仍然有许多人从事着研究和开发,试图去构建更可靠的共识算法。
PoW 存在什么问题呢?
1). 定制化硬件存在优势
PoW 的缺点是定制化硬件的使用。在 2013,一种名为专用集成电路(application-specific integrated circuits, ASICs)的设备被设计来专门挖比特币,可以将效率提高 10-50 倍。从那时起,使用普通计算机的 CPU 和 GPU 来挖矿便变得无利可图,挖矿的唯一方法是使用 ASIC 设备来挖。在区块链里,每个人都应该能为网络的安全做贡献,而 ASIC 的出现背离了“去中心化”的特点。
为了缓解这个问题,以太坊选用的 PoW 算法(Ethhash)是线性内存困难(sequentially memory-hard)的。算法被设计成需要大量的内存和带宽才能算出一个 nonce 值。即使是超高速计算机,也无法在需要大量的内存和带宽的条件下同时计算出多个 nonce 值。这减少了中心化的风险,为节点创建一个公平竞争的环境。
当然,这不表示未来不会出现针对以太坊的 ASIC。定制化硬件对 PoW 算法仍然存在着巨大的威胁
2). 矿池中心化
用户单独挖矿时,收到区块奖励的机会是很小的。取而代之,他们都为矿池挖矿。矿池按比例给矿工持续的回报。矿池算力在网络里占的权重大,大矿池所得回报的方差比单一矿工低得多。随着时间推移,少数矿池将控制大部分网络,而中心化的矿池控制的算力随着时间又进一步增加。现在,前 5 个矿池拥有接近 70% 的全网算力,这很吓人。
3). 浪费电力
矿工消耗大量电力来计算 PoW 问题,然而对于社会来说,这些计算都是无价值的。根据 Digiconomist’s Bitcoin Energy Consumption Index 所示,当前比特币每年消耗的电力约为 29.05TWh,大约占全球消耗电力的 0.13%,超过了 159 个国家。
使用 PoW 共识的公有链消耗的电费都会越来越多。不可持续的电力浪费和 PoW 计算开销不利于公有链将规模扩展到成千上万的用户和交易。
共识的解决方案
有用的 PoW
一种解决电力浪费问题的方法是用 PoW 函数来解决某些有意义的问题。比如,让矿工用计算资源去解决困难的 AI 算法,而不是解决随机的 SHA256 问题。
Proof-of-stake
另一种解决挖矿中心化的问题是完全抛弃挖矿,在共识里引入另一种机制来每个节点的贡献。这就是 PoS 要做的事。
不像矿工使用算力,这里使用”权益(stake)“。如 Vitalik 所说,将“一单位算力一张票(one unit of CPU power, one vote)“变成“一块钱一张票(one currency unit, one vote)“。
PoS 消除了对硬件的需求,因此不再有硬件中心化的问题。而且,矿工再也不用消耗大量电力来解决 PoW 问题,PoS 本质上更节能。
然而,天下没有免费的午餐。PoS 算法也有自身的挑战,它们包括
1. Nothing-at-Stake Problem:在 PoS 共识下,如果存在分叉(无论是因为意外或攻击),节点最好的策略都是同时“挖”每条链。节点不需要消耗计算资源,只需要使用自己的钱来投票。这意味着无论哪条链胜出,矿工都会得到奖励。
2. Long-range attacks:如果矿工想在 PoW 链里分叉,它得在主链最新区块前几个区块开始挖。矿工往回得越多,就越难追上主链,这需要超过网络一半的算力才能做到。然而,在 PoS 里,由于挖矿所需的东西只是权益,即钱,矿工可以从成千上万个块之前开始分叉。矿工可以轻易生成成千上万的区块,而用户很难发现哪一条链才是“正确”的链。
3. Cartel formation:在由经济激励治理的去中心化系统里,一个真实存在的风险是共同合作(coordinated efforts)和寡头的出现。就如以太坊研究者 Vlad Zamfir 所说,“数字货币都很集中,挖矿的算力也是这样。在”真实世界“的市场中,寡头竞争是常态。比起大量相对贫穷的验证者,少数相对富有的验证者之间的合作十分容易。卡特尔(Cartel)的出现是完全可以预期到的。”
为了可以有效地替代 PoW,我们需要一种算法来解决 nothing-at-stake 问题和 long-range attake 问题,同时不引入新的共谋风险。
一些团队,如 Tendermint 和以太坊,在解决这个问题上已经取得了许多进展。Tendermint 是通过设计 PoS 共识引擎将传统的 BFT 算法应用到区块链里。然而,Tendermint 也有自身的缺陷。统一,以太坊也在 PoS 的实现上取得了很大的进展,但是在网络里仍没有运行。
不像 PoW,PoS 未经检验且难以理解。为了理解各类设计里的不同权衡,需要进一步的研究和实验。正因如此,我们应该在前人的工作之上共同合作,研究出一个更有效、更快和更安全的共识系统。
6. 缺乏治理和标准
在去中心化的公有链,不存在中央集权和组织来做决策,这是毋庸置疑的。在另一方面,每个人都是管理者——这是一个完全去信任、开发且无需授权的系统——然而在另一方面,又不存在能够安全升级协议的方法,没有人负责维护协议标准。
在维持区块链技术的去中心化的同时,我们仍然需要一个由生态里开发者和其他成员组成的组织,来对新标准、特性和升级达成共识。如何在没有中心化组织(如以太坊基金会)的带领下实现这个目标,仍然是个未知数。
例如,以太坊当前的特定标准和特性只由一两个开发者来指导和决策。尽管这个模式可行,但仍存有缺陷。其中之一是不够效率——如果领头开发者太忙,或几天几周内忘记回应,则标准的推进就会陷入停滞,不管这个标准对其他参与构建区块链的人来说是多么重要。在没有明确领导下制定标准,将带来混乱,很难快速即使地对问题达成共识。在社区越大时,这种情况越严重。
另一种方法是完全开放和去中心化区块链。然而,这会使得自治十分低效,将带来长久的危害。
我们需要一种更好的方法。
Tezos 试图通过链上治理(on-chain governance)让区块链拥有升级协议的能力,但这仍是构想,还未被实现,也未被证明合理。
总之,治理区块链是一个棘手的问题。在治理控制权的集中和分布之间做好权衡,这是维持发展的关键所在。
7. 缺乏开发工具
制造充足的开发工具,这实际上是开发者的职责,尤其是对于想高效完成工作的开发者来说。
在当前区块链生态系统里,开发工具显然无法让人满意。即使是经验丰富的开发者,在区块链之上开发功能性协议或去中心化应用也是一项艰巨的任务。
我以一个 Solidity 和区块链开发人员的角度,列举了生态里缺乏的一些工具:
  • 能够检查代码错误,且集成了开发智能合约和区块链分析所需插件的 IDE
  • 有完整文档,且容易使用的构建工具和编译器
  • 持续更新的 API 和框架技术文档
  • 测试框架。以太坊里有一些可用的测试框架,如 Truffle,但我们急切需要能提供更多选项和实验的测试框架。我亲眼见到许多未经测试的智能合约里存着数以万计的美元。在任何情况下,缺乏测试都不能令人接受,尤其是在这种与大量金钱相关的情况里。举例来说,BAT 的代币销售合约里就没有测试套件。如果合约可以转出那么多钱,任何有理性的人都明白它可能会遭受攻击。
  • 调试工具。调试 Solidity 代码就像在黑暗隧道里蒙着眼睛寻找金子。在开发网站时,我可以使用调试器一行一行单步调试代码。但是 Solidity 开发环境里没有类似的工具,这令人沮丧。我们急需一种可以隔离和诊断问题的易用工具
  • 日志工具。与上述相同

8. 量子计算机的威胁
量子计算机是密码学和加密货币的潜在威胁之一。
尽管量子计算机目前只能解决特定类型的问题,但这种情况不会一直持续。量子计算机可以有效地攻破当前流行的公钥算法,这听起来很可怕,但事实如此。
在设计区块链和底层的加密算法时,我们应该考虑怎么使它拥有抗量子的特性,这是很重要的。
抗量子解决方案
在我有限的认知里,后量子算法的研究有六个不同的方向: Lattice-based cryptography, Multivariate cryptography, Hash-based cryptography, Code-based cryptography, Supersingular elliptic curve isogeny cryptography, 和 Symmetric key quantum resistance systems(如 AES 和 SNOW 3G)。
不管最终方案是什么,探寻一种抗量子的密码解决方案都是我们首要关注的重点。
其他挑战
  • 我们需要一种跨链通信的解决方案,使得我们能在不同链(如比特币、以太坊和莱特币等)之间无缝进行通信和转账。
  • 我们需要打造一套更好的密钥管理系统,让应用程序基于之上运行。
  • 我们需要更高效的签名方案和密码系统,使得它们可以在低运算资源的设备上运行,同时又保证安全性。
  • …还有

总结
ICO 吸引了太多的注意力和资金。与此同时,一些全身心投入解决这些问题的研究者和开发人员却得不到足够的支持。这不是一件好事。
更令人遗憾的是,包括一些领域内有影响力的开发人员和领袖在内,许多人因为金钱忽略了这些问题。
在接下来一年里,我的目标会
  • 继续关注这些问题
  • 投入时间去思考解决方案
  • 鼓励其他研究者和开发者做同样的工作

不管当前的投资环境是否存在泡沫,我都是区块链坚定的信仰者。作为开发者,我们有义务投入精力去解决这些问题,将区块链带向主流人群。同时我们也需要投资者来发现和资助这些工作。
作者:趁风卷

回复

使用道具 举报

724

主题

1091

帖子

4057

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4057
发表于 2018-4-25 13:02:19 | 显示全部楼层
区块链入门教程阮一峰 发表于 2017年12月26日 20:40 | Hits: 810
Tag: Computer
区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。
可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。
下面,我就来尝试,写一篇最好懂的区块链教程。毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚。我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿、为什么挖矿越来越难等问题。
需要说明的是,我并非这方面的专家。虽然很早就关注,但是仔细地了解区块链,还是从今年初开始。文中的错误和不准确的地方,欢迎大家指正。
一、区块链的本质
区块链是什么?一句话,它是一种特殊的分布式数据库。
首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。
二、区块链的最大特点
分布式数据库并非新发明,市场上早有此类产品。但是,区块链有一个革命性特点。
区块链没有管理员,它是彻底无中心的。 其他的数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。
正是因为无法管理,区块链才能做到无法被控制。否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。
但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。
三、区块
区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
每个区块包含两个部分。
  • 区块头(Head):记录当前区块的元信息
  • 区块体(Body):实际数据
区块头包含了当前区块的多项元信息。
  • 生成时间
  • 实际数据(即区块体)的 Hash
  • 上一个区块的 Hash
  • ...
这里,你需要理解什么叫Hash,这是理解区块链必需的。
所谓 Hash 就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 Hash 长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的 Hash 一定是不同的。
举例来说,字符串123的 Hash 是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制就是256位,而且只有123能得到这个 Hash。
因此,就有两个重要的推论。
  • 推论1:每个区块的 Hash 都是不一样的,可以通过 Hash 标识区块。
  • 推论2:如果区块的内容变了,它的 Hash 一定会改变。
四、 Hash 的不可修改性
区块与 Hash 是一一对应的,每个区块的 Hash 都是针对"区块头"(Head)计算的。
Hash = SHA256(区块头)
上面就是区块 Hash 的计算公式,Hash 由区块头唯一决定,SHA256是区块链的 Hash 算法。
前面说过,区块头包含很多内容,其中有当前区块体的 Hash(注意是"区块体"的 Hash,而不是整个区块),还有上一个区块的 Hash。这意味着,如果当前区块的内容变了,或者上一个区块的 Hash 变了,一定会引起当前区块的 Hash 改变。
这一点对区块链有重大意义。如果有人修改了一个区块,该区块的 Hash 就变了。为了让后面的区块还能连到它,该人必须同时修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,Hash 的计算很耗时,同时修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。
正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。
每个区块都连着上一个区块,这也是"区块链"这个名字的由来。
五、采矿
由于必须保证节点之间的同步,所以新区块的添加速度不能太快。试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就必须立刻同步。
所以,区块链的发明者中本聪(这是假名,真实身份至今未知)故意让添加新区块,变得很困难。他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。
这种产出速度不是通过命令达成的,而是故意设置了海量的计算。也就是说,只有通过极其大量的计算,才能得到当前区块的有效 Hash,从而把新区块添加到区块链。由于计算量太大,所以快不起来。
这个过程就叫做采矿(mining),因为计算有效 Hash 的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算 Hash 的机器就叫做矿机,操作矿机的人就叫做矿工。
六、难度系数
读到这里,你可能会有一个疑问,人们都说采矿很难,可是采矿不就是用计算机算出一个 Hash 吗,这正是计算机的强项啊,怎么会变得很难,迟迟算不出来呢?
原来不是任意一个 Hash 都可以,只有满足条件的 Hash 才会被区块链接受。这个条件特别苛刻,使得绝大部分 Hash 都不满足要求,必须重算。
原来,区块头包含一个难度系数(difficulty),这个值决定了计算 Hash 的难度。举例来说,第100000个区块的难度系数是 14484.16236122。
区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。
Hash 的有效性跟目标值密切相关,只有小于目标值的 Hash 才是有效的,否则 Hash 无效,必须重算。由于目标值非常小,Hash 小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。
区块头里面还有一个 Nonce 值,记录了 Hash 重算的次数。第 100000 个区块的 Nonce 值是274148111,即计算了 2.74 亿次,才得到了一个有效的 Hash,该区块才能加入区块链。
七、难度系数的动态调节
就算采矿很难,但也没法保证,正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。
为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。他规定,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此难度系数就要调低10%。
难度系数越调越高(目标值越来越小),导致了采矿越来越难。
八、区块链的分叉
即使区块链是可靠的,现在还有一个问题没有解决:如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。这时应该采纳哪一个区块呢?
现在的规则是,新节点总是采用最长的那条区块链。如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为"六次确认")。按照10分钟一个区块计算,一小时就可以确认。
由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的比特链。
九、总结
区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。这证明它是可行的。
但是,为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。
因此,区块链的适用场景,其实非常有限。
  • 不存在所有成员都信任的管理当局
  • 写入的数据不要求实时使用
  • 挖矿的收益能够弥补本身的成本
如果无法满足上述的条件,那么传统的数据库是更好的解决方案。
目前,区块链最大的应用场景(可能也是唯一的应用场景),就是以比特币为代表的加密货币。下一篇文章,我将会介绍比特币的入门知识
十、参考链接
(完)
文档信息
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
  • 发表日期:2017年12月26日



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Hi,Tokens  |网站地图

GMT+8, 2019-12-12 19:10 , Processed in 0.082952 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表