Blockchain-CheatSheet
区块链
In essence, the blockchain is a shared, programmable, cryptographically secure and therefore trusted ledger which no single user controls and which can be inspected by anyone.- Klaus Schwab
区块链技术是最近在互联网技术前沿比较火的一个课题,它的出现解决了在点对点通信中一直存在的一个基本问题,即著名的拜占庭将军问题。通俗地讲就是在一个去中心化的网络中如何对一个信息传递
区块链由时间序列的链式数据块构成,提供了拜占庭容错、并基于共识协议保证了最终一致性的分布式数据库。
区块链本质上是一个去中心化的分布式账本数据库,是比特币的底层技术,和比特币是相伴相生的关系。区块链本身其实是一串使用密码学相关联所产生的数据块,每一个数据块中包含了多次比特币网络交易有效确认的信息。
每当有加密交易产生时,网络中有强大运算能力的矿工
通过复杂的公共钥匙和私人钥匙的设置,区块链网络将整个金融网络的所有交易的账本实时广播,实时将交易记录分发到每一个客户端,同时还能保证每个人只能对自己的财产进行修改。当然,账本里也有别人的交易记录,虽然可以看到数值和对应的交易地址
技术手段也根本无法知道交易者的真实身份。
如果从不同的技术角度来剖析,我们可以这样看待区块链:它是一种数据库、一种分布式系统,也是一种网络底层协议。
数字货币
数字货币应用方向
数字货币是区块链的第一大应用类型,其实你可以简单理解为一种无主权、社区自治的货币形式。数字货币通常是基于区块链技术、在全球范围内公开发行的、并且没有任何国家政府背书的虚拟货币,这种虚拟货币具有“去信任”
总量透明公开。数字货币的发行是在项目创建之初,是白皮书事先就规定好了的,白皮书通常是一个区块链项目公开发布的一种阐述性文档,其中简述了项目的宗旨和愿景以及设计蓝图。
数字货币缓慢释放。数字货币缓慢释放。挖矿为数字货币的缓慢释放提供了一种方法。
代码执行规则。由于我们在白皮书中规定好了总量和数字货币释放的机制,白皮书的内容会成为整个社区的基础共识,所以在项目的主网上线之后,数字货币的释放不再是人为控制,而是在代码层面体现,代码将负责控制数字货币的释放,这里去除了人为操作的因素。
数字资产
虚拟资产一般包括有金融资产、游戏代币、数字版权、域名、用户流量等。由于虚拟资产不需要与实体资产进行挂钩,所以在对应到区块链上更为方便。它具体的应用形式在供应链金融、票据市场都有所体现。
我们在这里,简单从技术的角度介绍一下
区块链的衍化
第一代
第一代区块链技术发展出的去中心化、不依赖第三方认证的防止多重支付的技术解决方案,大幅度降低了中间交易和支付费用。另外就是依赖于密码技术,解决了参与方的信任问题。
但是这一代技术,在于哲学思维上对全民选举形成共识机制的过于理想化的坚持,导致了效率的低下。比如比特币的任何交易和支付需要至少
比特币的区块链应用于价值传递,就是转账,所以最简单的应用就是在金融领域,比如跨境转账,支付汇兑。严格说起来,数字货币其实是区块链最简单、最直接的应用场景。绝大多数的区块链项目,都会有自己的内生代币。
共识机制,就是所有记账节点之间如何区域达成共识,来选择和认定记录的真实性和有效性。全网认可的是最长的一条区块链,因为在此之上的工作量最大。如果想要修改某个区块内的交易信息,就必须将该区块和后面所有区块的信息进行修改。这种共识机制既可以作为认定的手段,又可以避免虚假交易和信息篡改。
区块与账本
区块链网络中,数据以文件的形式被永久记录,我们称之为区块。一个区块是一些或所有最新比特币交易的记录集,且未被其他先前的区块记录。区块可以想像为一个城市记录者的记录本上的单独一页纸
每个区块包括一些或所有近期交易、前一个区块的引用,以及其他数据。它还包括一个挖矿难度的答案——该答案对每个区块是唯一的。新区块如果没有正确答案,不能被发送到网络中——“挖矿”的过程本质上是在竞争中 “解决”当前区块。每个区块中的数学问题难以解决,但是一旦发现了一个有效解,其他网络节点很容易验证这个解的正确性,对于给定的区块可能有多个有效解,但对于要解决的区块来说只需一个解。
因为每解决一个区块,都会得到新产生的比特币奖励,每个区块包含一个记录,记录中的比特币地址是有权获得比特币奖励的地址。这个纪录被称为生产交易或者
发送者在网络中广播比特币交易,所有试图解决区块的矿工节点,收集了这些交易记录,把它们加到矿工节点正在解决的区块中。
挖矿难度由比特币网络自动调整,使之实现平均每小时解决
共识机制与工作量证明
POW:Proof of Work,工作证明。
比特币在
- 瑞波币
(Ripple) 瑞波币是Ripple 网络运行的基础货币,就像比特币一样可以在整个网络中流通,而不必局限于熟人圈子。瑞波币引入网关系统,它类似于货币兑换机构,允许人们把法定货币注入、抽离Ripple 网络,并可充当借贷双方的桥梁。 - 莱特币
(Litecoin) 莱特币与比特币相比具有三种显著差异:第一,莱特币网络大约每2.5 分钟( 而不是10 分钟) 就可以处理一个块,因此可以提供更快的交易确认;第二,莱特币网络预期产出8400 万个莱特币,是比特币网络发行货币量的四倍之多;第三,莱特币在其工作量证明算法中使用了由Colin Percival( 科林· 珀西瓦尔) 首次提出的Scrypt 加密算法,这使得相比于比特币,在普通计算机上进行莱特币挖掘更为容易( 在ASIC 矿机诞生之前) 。每一个莱特币被分成100000000 个更小的单位,通过8 位小数来界定。不同于比特币,Scrypt 所具有的内存密集特性让莱特币更适合用图形处理器(GPU) 进行“挖矿”。为Scrypt 实施的FPGA( 现场可编辑逻辑门阵列) 和ASIC( 专用集成电路) ,相比于比特币使用的sha256 ,更为昂贵。
第二代
智能合约
智能合约,完全由代码组成、自动执行的合约。可以自动核查某事是否发生、某物是否存在、某事是否完成等“条件判断”类条款,并据此对资金进行相应的转移。
代议制
第二代区块链技术的一个方向就是像美国的
第三代
第三代区块链技术版本的核心用一句话概括,就是变“绝对去中心化”为“有效去中心化”。
应用与不足
- 公开记账
每家每户都记账,账簿上不再记载每户村民的余额,而只记载每一笔
- 创建创世区块
创世区块是我们生成全村公开账本的第一笔交易的第一个信封,好比一篇文章总得有个开头一样。
- 交易
村长写好
用自己的私钥签名,证明交易是自己发起的。用对方的公钥加密,以保证只有正确的接收方才能获得信息。
- 打包
Transaction (挖矿)
是为了让打包交易的人能够在信封上署名,表示这次打包是由某某某打包的,其次全村的交易可能非常多,需要装配标号,方便大家查询。我们用一个特殊的信封把
我给大家出一个难题,谁先解出这个难题的答案,谁就有权利把
矿工在打包之后能够获得对应的奖励
- 广播交易
广播的内容分两种,一种是广播
收到了广播的通知后,大家先验证信封上难题的答案是否正确,这样便可以验证出信封是否被伪造,接着验里面的每笔交易,最后还要验证信封背面的内容,即上一个信封的摘要是否正确。因为上一个信封大家都已经确认,所以这样可以极大地规避作弊的可能。如果觉得没问题,就可以存入本地数据库中了。
比特币的发布时间为
以太坊是一个区块链应用平台,它的极大创新在于它提供了智能合约这种可以自定义业务逻辑的工具,智能合约是一种可编程的合约,合约是由用户编写并且部署到区块链上的。 以太坊的优势是为全世界的开发者们提供了一种开发工具,这种工具让所有人都能释放出巨大的创造力,所以基本上可以看成:只要是有一定技术基础的开发者,通过智能合约可以随时为以太坊贡献内容。
瑞波币(Ripple)是一个比较另类的区块链项目,因为从本质上来说,它更像是一种支付结算协议,瑞波币不需要挖矿,它是通过一种叫“Open Coin”的算法,提供瑞波协议共识来达到记账的目的。 瑞波币旨在为全球跨境机构提供了高效率的支付过程,提供较好的全球支付体验。因为涉及了机构之间的资产转移,瑞波币被设计成需要准入许可才能进入瑞波的支付网络,这一点有些像我们所说的联盟链。
匿名性区块链项目是指:使用交易匿名技术,让公开可查询的交易内容变成私密的匿名性区块链项目。市值比较不错的有门罗币、达世币、
共识机制
共识机制是区块链是核心的组成要素之一,它决定了区块链的业务吞吐量、交易速度、不可篡改性、准入门槛等等,是最为关键的技术要素之一。
共识机制主要解决了两个问题:
谁有权利; 作弊问题。
PoW(Proof of Work)工作量证明可以解决上述的两个问题,PoW(Proof of Work)工作量证明可以解决上述的两个问题,这个问题可以简化成谁拥有的计算资源更多,谁就拥有整个系统的最大概率的记账权。一旦这个概率超过一半以上,那么这个系统就有一定的中心化风险。
而影响记账权的唯一因素只有计算资源(算力)的大小,如果想篡改交易,只能投入大量的计算资源与整个系统中其他所有人进行对抗,这是十分困难的,尤其在整个系统有一定基础计算资源(算力)的情况下。
双花攻击是指一个代币被花费了两次,这在任意的区块链系统中是不被允许的。如果避免了双花问题,基本就能避免上述作弊中收益过大的问题,因为攻击者首先要窃取到你的私钥,同时又能控制了你的计算资源(算力
规则一:一个代币如果已经被花费,那么会被标记成已花费,如果再次接收到这个代币被花费的请求,那么记账节点会拒绝打包这笔交易;
规则二:如果同时接收到两个信封,这两个信封中装的两笔交易出现了一个代币被花费了两次的情况,这种情况也就是我们所说的分叉(Fork
简单来说,区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构,区块链按时间序列化区块数据,整个网络有一个最终确定状态;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。
通过以上我们可以发现比特币、以太坊等公链是偏重高可用性、分区容忍性(AP
,我们采用什么样的算法(共识机制)才能够为它提供一个可信任的环境,并且使得:
节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改; 每个节点的数据会同步到最新数据,并且会验证最新数据的有效性; 基于少数服从多数的原则,整体节点维护的数据本身可以客观反映交换历史。
所谓联盟链,就是这个区块链具有准入许可,不像公链,任何人都可以随时进入。准入许可也就意味着候选节点进入区块链时需要得到已经在网络中的节点许可,所以联盟链也叫做许可链。
除了公链和联盟链的概念,还有一种区块链概念,叫作侧链。
侧链是一种双向挂钩技术,将主链中的代币锁定到侧链中使用。所以可以将主链看作主干道,侧链看作与主链相对独立的一条分支道,作为主链功能的低耦合拓展。
比特币的
以太坊的
P2P 网络协议P2P 网络协议是所有区块链的最底层模块,负责交易数据的网络传输和广播、节点发现和维护。
通常我们所用的都是比特币
这套
- 分布式一致性算法
在经典分布式计算领域,我们有
Raft 和Paxos 算法家族代表的非拜占庭容错算法,以及具有拜占庭容错特性的PBFT 共识算法。
如果从技术演化的角度来看,我们可以得出一个图,其中,区块链技术把原来的分布式算法进行了经济学上的拓展。
而在区块链领域,多采用
PoW:通常是指在给定的约束下,求解一个特定难度的数学问题,谁解的速度快,谁就能获得记账权(出块)权利。这个求解过程往往会转换成计算问题,所以在比拼速度的情况下,也就变成了谁的计算方法更优,以及谁的设备性能更好。比特币本身的演化很好地诠释了这个问题,中本聪设计的思路本来是由
PoS:这是一种股权证明机制,它的基本概念是产生区块的难度应该与你在网络里所占的股权(所有权占比)成比例,目前有三个版本
DPoS:简单来理解就是将
- 加密签名算法
在区块链领域,哈希算法是应用得最多的算法。哈希算法具有抗碰撞性、原像不可逆、难题友好性等特征。
当然,除了挖矿算法,我们还会使用到
除了地址,我们还会使用到最核心的,也是区块链
在比特币大类的代码中,基本上使用的都是
- 账户与交易模型
区块链的账本特性,通常分为
区块链的共识算法,我在某些场合直接称作基于经济学的博弈算法,以区别于经典分布式一致性算法思路,它的整体思路就是让攻击者的攻击成本远远大于收益。
区块链中的共识算法目前具有工业成熟度的是
在使用
第一条降低了系统通信复杂度,每次记账系统的确定性其实是概率确定的,又由于被选中需要付出成本,此处才提高了记账成本阈值,结合区块链的基础代币设计,是一个非常天才的想法。