区块链(blockchain)源于2008年出现的`比特币`之中。比特币需要一个公开透明`总账(Ledger)`,来达到一种`去中心化` (Decentralized) 的、`无需信任` (trustless) 的范式。在这种范式中,任何互不了解的人可以通过加入该总账,通过点对点的记账、数据传输、认证或是合约,而不需要借助任何一个中间方来达成信用共识。这个总账包括了过去所有的交易记录、历史数据及其他相关信息,所有信息都分布式存储并透明可查,并以密码学协议的方式保证其不能非法篡改。
作为一种去中心化的网络信息管理方式,区块链技术主要有四大特点:
1. 去中心化(更准确的说是分布式),区块链数据库分布式记录、存储,与传统数据库的中心化记录、存储截然相反;
2. 去信任化,区块链通过数学方法,依靠非对称加密和可靠数据库,通过特定的算法为网络中的节点制造信用、产生信任及达成交易共识,最终 完成去中心化;
3. 集体维护,区块链中的每一个区块都是由整个系统所有节点(或者部分节点,但足够达成共识)共同维护;
4. 可靠数据库,系统中的每个节点都有一份完整的区块链内容拷贝(或者多副本,但并非全节点全复制),除非同时控制整个系统超过半数以上的节点,否则单个节点的改写无效。
我们剖析底层核心技术,具有两方面的意义:技术分析是为了更好的发展区块链应用!
技术核心问题归类
区块链技术的核心问题仍然属于分布式计算领域的经典问题:`拜占庭将军问题`,`共识`算法,`加密`算法,`哈希`算法…但是比特币第一次有效解决了大规模去中心化P2P网络达成无法篡改的共识的所有障碍,并得以在“货币”这个需要极其严谨的应用上第一次取得了成功。所以我们将会围绕这些方面,进行分类, 总结, 分析 各个应用的异同点。我们将从下几个方面,分类当前市场的主要区块链应用和加密货币,来层层深入,领略各自的技术特点:
目前大家几乎只关注共识机制,还有所谓的“性能陷阱”。但实际上,作为一种分布式计算的架构,不研究底层存储、数据同步机制,谈单机的性能优化其实是没有“工业价值”的。所以本文会研究完整的技术栈。
PoW相关技术分析
`Proof of Work` 是比特币系统里解决选择下一个负责创建新区块节点的核心思想。主要方式是让所有想参与的节点全部一起竞争: 计算上一区块的hash值 + 当前未处理交易数据 + 时间戳 + 一些可变随机参数, 目标是得到前缀为若干个前导“0”的hash结果。这个计算量是很大的, 但是一旦算出来, 其它节点验证其正确性是很简单的。 这种机制, 解决了新区块产生的公平性和信任问题, 经济上, 也让参与者(`矿机`)有机会获得一定的收益形成生态链, 成为BTC被广泛接受的基础。
此后的各种新加密货币, 对PoW算法也做了多种改进。下面分析几个主要的使用PoW的应用。
BitCoin (比特币)
比特币是一切加密货币的鼻祖,也是第一次应用区块链技术的创新应用。
作为首个开创性的加密货币,比特币用到了大量的加密算法:
1. 在计算散列时会计算2次。大多数情况下,使用SHA-256散列,RIPEMD-160会用于生成较短的散列(例如生成比特币地址的时候)。
2. 使用椭圆曲线 数字签名算法(ECDSA)对交易进行签名
3. ECDSA 使用了 http://www.secg.org/collateral/sec2_final.pdf 中的secp256k1曲线
4. 公钥(in scripts) 以 04的形式给出,x和y是表示曲线上点的坐标的32字节字符串。签名使用DER编码 将 r 和 s 写入一个字节流中(因为这是OpenSSL的默认输出).
参考文档:
· SHA-2安全哈希标准算法 几乎所有加密货币都用到的基础hash算法
· Merkle树 基础算法:数据块完整性验证
· Bloom Filter 基础算法:快速确定存在性
· 比特币源代码
比特币被诟病最多的几个方面,也就造成了其它派生加密货币的诞生:
LiteCoin (莱特币)
派生于 Tenebrix(TBX)主要目的是抵抗显卡挖矿导致的不平衡。莱特币对比特币的改变很小, 主要是PoW证明算法改成了Scrypt。具体如下:
第一,Litecoin网络每2.5分钟(而不是10分钟)就可以处理一个块,因此可以提供更快的交易确认。
第二,Litecoin网络预期产出8400万个Litecoin,是比特币网络发行货币量的四倍之多。
第三,Litecoin在其工作量证明算法中使用了由Colin Percival (著名的FreeBSD黑客) 首次提出的scrypt加密算法,这个改变导致了经济上的变化: 由于Scrypt算法需要更长的时间和更多的内存, 使得`矿机`的难度更大, 收益率更小, 因此对参与者而言“可能更公平” (需要频繁内存访问的算法, ASIC矿机相较普通CPU的优势减小了)。
DarkCoin
DarkCoin(Dash, 达世币)主要目标是“更加匿名化的虚拟货币”,更加难以追踪,同时更快的交易速度和更低的费用(BTC网络拥挤,同时BTC价格很高,导致交易费比较高了)。
达世币(DASH)是一款支持即时交易、以保护用户隐私为目的数字货币。它基于比特币,特有的双层网络使其能够更加全面的进行测试和更新。如同使用现金一样,达世币可以有效的保护您在交易过程中的财政隐私。当使用比特币时,交易都会被写到数据块链中,您可以查询到接收和发送双方。然而达世币通过匿名技术,使得交易无法被追踪查询。匿名技术极其重要——因为任何网络用户都可以进入数据块链查看交易,对于那些不想暴露交易记录和财政隐私的用户,这无疑是硬伤。达世币通过独创的去中心化网络服务器“主节点”混淆交易,实现匿名。无需第三方,有效的避免了因第三方介入所带来的不稳定性。
X11加密算法由达世币核心开发者Evan Duffield创立。X11算法是由11种加密散列算法组成的工作量证明加密算法,因此其具有公平的分配机制并且与比特币的分配机制相同。由于算法的复杂性,使得制造矿机的难度大大提高,至少需要几年时间。由于链式加密算法的特性,高端CPU与一些GPU的算力相似。由于此新算法的优势,使用GPU挖X11算法的达世币会比挖使用Scrypt算法的币种降低约30%的能耗以及30%-50%的发热量。
PoS相关技术分析
PoS的目标是取代PoW这种在分配体系中达成一致的方式。PoS引入“币龄”的概念,币龄=币数*持有时间,通过币龄来作为投票权重。出块用一定的公司计算值,达到所需要的币数(也叫做目标,是由网络通过类似于PoW的难度调节机制来规定的),以此来确保大致恒定不变的出块时间。
PoS需要基于一个“去中心化的、安全的数字资产”以及证明机制,而btc本身就是这样的数字资产,所以很多PoS需要基于btc构建stack池。
传统的电子货币体系一直都依赖一个中心化的服务来保障交易安全,如何去中心化已经讨论了几十年了,一个主要的问题就是如何构建一个能够确保多点一致性同时又是去中心化的BFT(Byzantine fault tolerance)系统。
在比特币(Bitcoin)提出之前,大家的研究可以达到容忍25%的节点攻击,但这并不能解决问题。直到2008年,中本聪(Satoshi Nakamoto)提出的比特币把这个比例提高到了50%。同时,一方面通过挖矿收益来鼓励节点加入网络,从而进一步提高攻击难度;另一方面,通过对每十分钟产生的一个区块进行链式签名,这样,这个链上每多一个区块,之前区块的伪造难度都会指数级上升。
比特币解决了这个问题,并且目前一直是市值最高的电子货币,但大家并没有停止研究。其中一个研究点就是比特币采用的工作量证明机制。在中本聪的论文里,工作量证明机制是被希望为每CPU拥有一个投票权(one-CPU-one-vote),并选用了两次SHA-256算法。然而,从今天来看,这种算法决定了它和能耗、硬件投入有着直接的关系。虽然比起传统货币体系里花费的能耗,比特币花费的可能微不足道,但硬件上的不公平性却越演越烈。从CPU挖矿到显卡挖矿再到ASIC设备挖矿,硬件之间的差异越来越明显,也开始背离了每CPU一个投票权的初衷。为了解决这个问题,著名的Litecoin和Darkcoin通过替换算法的方式一定程度降低了对能耗的要求,同时让算法更依赖CPU来降低硬件上的不公平性,但并没有从根本上解决。直到2011年出现的权益证明机制,它不依赖计算量,是目前最有效的解决办法。之后的Peercoin和NXT便采用了这种机制并证明了其可靠性。
NXT (未来币)
NXT主要针对PoW类加密货币的挖矿能源消耗问题,使用了PoS方式来达成共识。技术上,Nxt最根本的革新就是透明锻造(Transparent Forging)。这种方式是PoS的一种技术实现。
在Nxt的PoS模型里,安全性是由持币者保证的。由POS带来的好处不会产生在PoW中的集权化趋势,并且数据显示,NXT从诞生开始保持了非常好的分布式状态。在网络中贡献block的独立用户数正在非常快速的增长并且保持了一个较大的数字,前5名top持币者贡献了35%的blocks。
Ethereum (以太坊)
“以太坊”是在比特币之后,加密货币领域比较大的创新产品。事实上,以太坊的重点不在于原生货币–以太币上,而是“智能合约”。
以太坊试图提供一个自带有完整“图灵完备”编程语言的区块链,可以让用户用来创建任意的“状态转移(state transition)”功能的“合约”,也就是号称“智能合约”。允许用户创建像下面这些系统:
1. 定制化的货币和财产 (“colored coins”)
2. 优先权属物理设施的所有权证明 (“smart property”)
3. 不可代替的资产,比如域名 (“Namecoin”)
4. 涉及通过一段代码来实现任意规则的数字资产直接管控的复杂应用 (“smart contracts” 智能合约)
5. 基于区块链的“去中心化自治组织” (DAOs).
技术特色上:
1. 使用了新的“内存消耗”算法(和Scrypt算法类似,降低矿机的优势)
2. 使用“GHOST blocktrees” 取代传统的区块链
3. 区块内部数据结构使用“Patricia trees”,而不是 Merkle Tree
4. 交易数据可以包含程序代码,也就是“合约”
DPoS技术分析
DPoS是 比特股在PoS基础上提出来的,delegated的PoS,主要目的是扩大交易容量。 核心思想是,预选出后续时段的一系列代理(选举过程还是用PoS),产生区块的权利直接交给预选出来的节点。这样保证非常高的速度去达成一致性。因为选举还是用PoS,只是提前和其它工作并行,所以称为DPoS。
BitShares
BitShares (比特股,BTS)最大的改进,就是针对比特币的交易效率和确认速度太低,而提出来的“工业级”的扩展区块链技术。
密码学货币和智能合约平台若想成为当前金融平台的可用替代品,高性能的区块链技术是不可或缺的。BitShares的设计从最底层就是为了比VISA和MasterCard加起来还多的交易处理能力。基于DPoS的设计,BitShares网络能够在平均仅1秒的时间里确认交易,仅受光传输的速度限制。为了实现这个业内领先的性能,比特股借鉴了从能达到6百万TPS的 LMAX) 交易平台里学到的经验。经验中的关键点如下:
1. 将所有东西都放在内存
2. 将核心业务逻辑保持在一个单线程里
3. 将加密算法操作(哈希和签名)保持在核心业务逻辑外
4. 将校验分成有状态和无状态两种检查
5. 使用面向对象的数据模型
遵循这几条简单原则,BitShares在没有进行任何特别优化的情况下就能每秒处理10万次交易。未来的优化预计会让BitShares的性能达到LMAX的水平。
应当注意的是,BitShares达到的性能很大程度上受限于一个兼容交易协议。在一个核心业务逻辑运行在一个需要执行加密算法操作和所有对象都靠哈希索引的虚拟机上的协议里,达到同样的性能水平是不可能的。区块链本质上是单线程的,加上CPU单个核的性能是各种资源中最受限和最不易扩展的。BitShares设计成让这种单线程的执行效率最高化。
PoS+PoW相关技术分析
PoS + PoW
对比PoS和PoW各自的缺点后,新的一种证明形式出现了。
为了减少矿池控制的风险等原因,PoS被引入;但又要保持给矿工收益保持网络规模,同时需要PoW。所以这种结合体出现并发展。
PeerCoin
Peercoin(PPC、点点币)是第一个实践了PoS的加密货币,也是混合模式的原创者。像其他加密货币,初始货币能被挖矿,但核心网络还是掌握在币的持有者里,而不是最快速的矿池。用PoS/PoW算法的网络,能够减少几个PoW的风险:自私矿主、51%攻击等,也能减少能源消耗。
Novacoin
Novacoin (NVC), 派生于PeerCoin,主要改变证明算法和区块参数。
其他共识方式
因为主要目标和加密货币不同, 在共识机制上, 有的应用产生了不同的演化方向。并且由于共识机制的不同, 对`去中心化`的程度也不同, 比如为了成为`银行基础架构`目标的Ripple, 在自己的半中心化架构上, 实现了金融基础架构需要的快速确认, 高吞吐量, 价值流动低成本 等核心需求。
Ripple
Ripple的目标并不是运作一个虚拟货币(虽然他们有内置原生货币XRP,用于撮合不同货币、资产的桥接、汇兑),而是有远大的多的目标:“Ripple的分布式金融科技让世界各地的银行可以直接交易而无需中央对手方或代理银行。Ripple可以让银行压缩运营成本并且提供跨境支付服务…” 虽然笔者觉得这个目标不切实际,难以推动区块链生态的真实运转,但是它的确提供了一种新的共识方案,一个优秀创新的工程项目。
从技术角度而言,Ripple的确更接近银行类金融机构的基础架构形态。
Stellar
Stellar(恒星币)创始人Jed就是原来Ripple的联合创始人和主要技术开发者,因为发展方向矛盾而另立门户。基本上恒星币继成了Ripple早期版本的核心,但是修改了核心的共识算法。
由于用了全新的共识算法,Stellar出现过严重的fork问题(网络里的参与节点产生了两个区块链,各有一半的节点执行两个链条),导致信用下滑,从而导致重新编写共识机制,并理论性证明。