摘要: 本文是【区块链之技术进阶】部分的第三篇文章,本篇文章我们将会为大家分享一篇技术贴,从技术的角度为大家分享区块链的技术特点及相关的数字货币、智能合约、侧链等的运作机制,并说明了相关的时间戳、工作量证明、权益证明、加密哈希等概念。少侠,干了这碗技术干货!
相信大家阅读了上一篇的文章以后,对于区块链未来在互联网金融方面的具体应用场景有所了解,面对互联网金融技术创新的洪流,大家是不是已经心潮澎湃,准备在区块链技术创新上大展手脚了呢?少侠,莫慌,暂时压一压内心的洪荒之力吧,耐着性子,我们要学习的事情还有很多,特别是从技术层面,你知道区块链是怎么运行的不?你看,不知道吧。所以还是且看我接着为大家分享吧。
本文是【区块链之技术进阶】部分的第三篇文章,这篇文章将会从技术的角度,为大家分享区块链到底是怎么运行的。当然还有公有链、私有链、侧链这些都是啥,什么是公有链的开源和匿名的特点,智能合约又怎么运行。可以说这篇文章是篇技术干货啦,等不急了吧,精彩马上分享。
本文技术要点:
本文转载自 钛媒体 原文链接
自从今年1月20日,中国人民银行在数字货币研讨会上表示高度重视区块链(Blockchain)等技术带来的新机遇和挑战,并争取早日推出央行发行的数字货币以来,区块链的概念在国内越发火热,吸引了金融机构空前的关注。
这份报告是爱就投与研究中心第一次关于区块链技术的研究结果,参考了来自投行、咨询机构的多份研究报告,并结合爱就投项目经理与国内区块链创业者的交流整理而成。
技术篇介绍区块链的技术特点和运作机制,并说明相关的重要技术概念;应用篇结合其在金融和非金融领域的应用案例,分析区块链的应用场景和市场前景。
作者认为,区块链技术的核心是沿时间轴记录数据与合约,并且只能读取和写入,不能修改和删除。在应用层面,区块链的安全、透明、高效3大优势,使其特别有助于规范互联网金融的发展,以及促进物联网和共享经济的普及与创新;在资本市场,采用分布式数据库和智能合约还可以大幅减少人工核对工作,为金融机构节省成本。
一.区块链的技术特点
区块链是一种共享的分布式数据库技术。尽管不同报告中对区块链的一句话介绍措辞都不相同,但以下4个技术特点是共识性的。
1. 去中心化(Decentralized):图1的左侧描述了当今金融系统的中心化特征,右侧描述的是正在形成的去中心化金融系统,其没有中介机构,所有节点的权利和义务都相等,任一节点停止工作都会不影响系统整体的运作;
图1,出自花旗报告Digital Disruption: How FinTech is Forcing Banking to a Tipping Point
2. 去信任(Trustless):系统中所有节点之间无需信任也可以进行交易,因为数据库和整个系统的运作是公开透明的,在系统的规则和时间范围内,节点之间无法欺骗彼此;
3. 集体维护(Collectively Maintain):系统是由其中所有具有维护功能的节点共同维护的,系统中所有人共同参与维护工作;
4. 可靠数据库(Reliable Database):系统中每一个节点都拥有最新的完整数据库拷贝,修改单个节点的数据库是无效的,因为系统会自动比较,认为最多次出现的相同数据记录为真。
图2,出自高盛报告Blockchain: Putting Theory into Practice
图2为简化起见,仅展示了6处保留数据库副本的节点;在3个交易序列中,前2个交易的数据和签名得到了所有6个节点的验证,但第三个交易的位置5没有通过验证,将被其它节点的“一致意见”更改。
二.公有链、私有链、侧链
区块链按照访问和管理权限可以分为公有链(Public Blockchain)和私有链或联盟链(Private Blockchain)。公有链是完全开放的区块链,全世界的人都可以参与系统维护工作,这使得公有链还具有以下2个特点。
1. 开源(Open Source):由于整个系统的运作规则公开透明,这个系统是开源系统;
2. 匿名(Anonymity):由于节点之间无需信任彼此,所有节点也无需公开身份,系统中每一个节点的匿名和隐私都受到保护。
私有链或联盟链在开放程度和去中心化程度方面有所限制,参与者需要被提前筛选,数据库的读取权限可能是公开的,也可能像写入权限一样只限于系统的参与者。
公有链的典型代表是比特币区块链,任何人都可以通过交易或挖矿读取和写入数据。私有链或联盟链的典型案例是Ripple和R3 CEV,前者目前为属于联盟成员的银行类金融机构提供跨境支付服务,希望取代环球同业银行金融电讯协会(SWIFT)的跨境转账平台,打造全球统一的网络金融传输协议;后者旨在推动制定适合金融机构使用的区块链技术标准。
侧链(Sidechains)是用于确认来自于其它区块链的数据的区块链,通过双向挂钩(Two Way Peg)机制使比特币、Ripple币等多种资产在不同区块链上以一定的汇率实现转移。
图3,出自Blockstream Moves Ahead with Sidechain Elements. Giulio Prisco
侧链进一步扩展了区块链技术的应用范围和创新空间,使区块链支持包括股票、债券、金融衍生品等在内的多种资产类型,以及小微支付、智能合约、安全处理机制、真实世界财产注册等;侧链还可以增强区块链的隐私保护。
所谓“多种资产在不同区块链上转移”其实并不会实际发生。以比特币为例,侧链的运作机制是,将比特币暂时锁定在比特币区块链上,同时将辅助区块链上的等值数字货币解锁;当辅助区块链上的数字货币被锁定时,原先的比特币就被解锁。
三.比特币区块链如何运作?
比特币网络从2009年1月开始至今,在没有专人维护的情况下已经平稳运行7年多,期间没有出现一次宕机。图4以Bob接收来自Alice的比特币的场景,详细描述了比特币区块链的工作方式,一并解释了涉及到的钱包和地址(Wallets and Addresses)、私钥和公钥(Private Key and Public Key)、加密哈希(Cryptographic Hashes)、随机数(Nonces)等概念。
图4,出自A Guide to Bitcoin Mining. Alec Liu
钱包和地址:
1. Bob和Alice的电脑上都有比特币钱包。
2. 钱包是一种文件,可以让用户访问多个比特币地址。
3. 一个地址是一串由字母和数字组成的字符串。
4. 每一个地址都有自己的比特币余额。
新建一个地址:
5. Bob创建一个新的比特币地址,用于接收Alice的付款。
私钥和公钥:
6. 当Bob创建一个新地址时,他真正在做的是生成一个密钥对,由一个私钥和一个公钥组成。如果你使用私钥(只有你知道)对一个消息进行签名,它可以被对应的公钥(所有人都知道)所验证。Bob的新地址代表一个唯一的公钥,对应的私钥则保存在他的钱包里。公钥允许所有人来验证被私钥签名的消息的有效性。
7. 可以将地址看做银行账号,但工作方式稍有不同。比特币用户可以任意创建多个地址,并且被鼓励为每一个新的交易单独创建新地址,以增强隐私性。只要没有人知道哪些地址是Alice的,她的匿名就受到保护。
提交一个支付:
8. Alice告诉她的比特币客户端,她要向Bob的收款地址转账。
9. Alice的钱包里有她的每一个比特币地址的私钥。比特币客户端用Alice此次使用的付款地址的私钥,对她的这一交易申请进行签名。
10. 此时,网络上的任何人都可以使用公钥来验证,这个交易申请实际来自一个合法的账户所有者。
验证交易:
11. Gary、Garth和Glenn都是比特币矿工。
12. 他们的电脑将过去约10分钟内的交易打包成一个新的交易区块。
13. 矿工的电脑被设置用于计算加密哈希(Cryptographic Hash)函数。
14. 加密哈希函数将一个数据集转换成特定长度的包含字母和数字的字符串,称为哈希值。源数据的细微改变会彻底改变哈希值的结果。并且基本不可能预测初始的数据集将会产生的特定哈希值。
15. 为相同的数据创建不同的哈希值,比特币使用随机数来实现。随机数是在进行哈希计算之前,在数据中添加的随机数字。改变这个随机数会产生极不相同的哈希值。
16. 每一个新的哈希值包含关于此前所有比特币交易的信息。
17. 矿工的电脑基于前一个区块的哈希值、新交易区块和随机数,来计算新的哈希值。
18. 创建哈希在计算上微不足道,但比特币系统要求新的哈希值拥有特定格式——必须以特定数量的0作为开始。
19. 矿工无法预测哪个随机数会产生以要求的数量的0作为开始的哈希值,所以他们被迫用不同的随机数创建很多哈希,直到获得有效的那一个。
20. 每一个区块都包含一个名为coinbase的初始交易,这是给胜出矿工的50比特币的支付——在这个例子中是矿工Gary。Gray的钱包里生成了一个新地址,里面的余额是新挖到的比特币数量。
- 注:只有在比特币发行的阶段1,每一个区块的coinbase支付给胜出矿工的新币是50个。从2009年1月3日创世区块诞生开始,新比特币的发行大约每4年减半,2012年11月28日,阶段2开始,每一个区块包含的新币减为25个,这是历史上第一次减半;预计今年7月11日,挖矿奖励会再次减半;直到第33次减半时,每一个区块从产生0.0021个新币直接减为0个,比特币的总量固定在将近2100万个。
交易验证:
21. 随着时间流逝,Alice向Bob的转账被埋在了其它更近期的交易下面。任何人要想修改历史交易的细节,就必须重做一遍Gary的工作,然后再重做所有下一级矿工的工作,因为所有的改变都需要一个完全不同的胜出随机数。这样的操作几乎不可能成功。
四.双重支付如何解决?
以比特币为代表的数字货币,关键的创新是通过时间戳(Timestamp)和工作量证明(Proof of Work)机制解决双重支付(Double Spending)和拜占庭将军问题(Byzantine Generals’ Problem),即保证同一笔比特币不会同时出现在两个地址,并且在信道可靠的基础上,所有节点都可以让其它节点接收到自己的真实意图,并最终一致行动。
这一技术方案最早见于化名为中本聪(Satoshi Nakamoto)的个人或团体在2008年发表的论文Bitcoin: A Peer-to-Peer Electronic Cash System 。
在Bob接收来自Alice的比特币的场景中,一方面,这笔付款被广播给系统中所有节点,任何人都可以使用Bob的公钥来验证这个交易的合法性,如果Alice试图双重支付,就必须先删除这个交易记录,否则新交易无法通过验证。中本聪在论文中写道:
“时间戳服务器为一个区块的数据的哈希计算结果加上时间戳,并大范围发布这一哈希计算结果,好比在报纸或新闻网上发表。显然,时间戳证实这些数据一定在这一特定时间存在,只有这样才能得到哈希计算结果(A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash)”。
另一方面,工作量证明机制使得生成下一个区块的节点和矿工几乎无法被预测到,所以删除交易记录几乎不可能。系统中的节点将过去约10分钟内的比特币交易进行打包,而只有获得有效哈希值的矿工才能生成新区块,并得到挖矿奖励;矿工除了打包比特币交易,还要结合随机数来完成有效哈希值的创建工作,获得以要求的数量的0作为开始的哈希值。
中本聪在论文中写道:
图5,出自中本聪论文Bitcoin: A Peer-to-Peer Electronic Cash System
- “工作量证明本质上是一CPU一票(Proof-of-work is essentially one-CPU-one-vote)”;
- “如果两个节点同时广播不同版本的新区块,那么一些节点会先收到其中一个的广播。在这种情况下,节点在先收到的区块基础上工作,并保留另外一个分支,以防后者变成较长的链。这个僵局要等到发现下一个工作量证明才能被打破,其中一条链将成为较长的链,在另一个分支上工作的节点将切换到较长的链上继续工作(If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof-of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one)”;
- “节点永远认为最长的链是正确的链,并将持续在它上面延长(Nodes always consider the longest chain to be the correct one and will keep working on extending it)”。
所以除非永久控制整个系统中超过一半的节点,才能阻止矿工把这个交易添加到新区块中。
最后,考虑到硬件运算速度的增长和节点参与程度的变化,中本聪用移动平均目标来确定工作量证明的难度,使得两个区块生成的时间间隔约为10分钟。
五.区块链技术目前问题
区块链技术还处于不断完善的阶段,就其第一个应用的比特币来说,有3个主要问题正在被其它系统所完善或试图完善。
区块容量和交易速度限制
中本聪设计比特币时,为区块设置了1MB的容量限制,使每一个区块只能容纳4096个交易;同时,工作量证明机制使得确认交易并将交易记录到区块链中需要约10分钟,当运算量达到极限时,运算时间就会放缓。目前,比特币网络还没有成熟到可以将规模扩展至主要信用卡网络的程度,提高这一上限的工作正在进行中。
另外,区块扩容已经成为迫切需求。曾有比特币核心开发者提出从Bitcoin Core切换到硬分叉链Bitcoin XT的方案,区块从1MB扩容至8MB,此后每2年翻倍。这一变动需要1000个连续区块中的750个包含矿工的变更批准。目前这一事件正在发展中。
挖矿浪费巨大资源
2014年6月曾有工程师系统计算,在比特币全网计算能力为110,000,000 GH/S的情况下,整个网络的挖矿成本约为每年8亿美元,包括电力成本约7,071.2万美元和矿机投资约7.33亿美元。
矿机投资方面,支持这样的算力大约需要36,670台KnCMiner海王星矿机,每台功率3,000GH,售价9,995美元,按照一年支出2次计算,结果约为7.33亿美元/年;电力成本方面,每日需要耗电80,666千瓦,按照每兆瓦100美元计算,结果约为7,071.2万美元/年。另外,这些矿机产生的二氧化碳为424,725吨/年。
图6展示了从2014年6月到2016年6月,比特币网络计算能力的增长趋势,最高点的Hash Rate已经达到1,800,000,000 GH/S 。
图6 Hash Rate,出自Blockchain.info
由于挖矿工作只为搜索到随机数以获得有效哈希值,并不产生其它价值,比特币网络的算力资源和消耗的电力成本被诟病为资源浪费。其它系统改进这个问题的总思路是,减少其中参与维护工作的节点的数量,减轻挖矿竞争的激烈程度。具体有2种方式,一是采用私有链或联盟链,将“记账权”强制规定给某些节点;二是引入权益证明(Proof of Stake)机制,配合工作量证明来维护可靠数据库。
权益证明是一种对货币所有权的证明,证明人需要提供一定数量的货币的所有权,系统根据每一个节点所占有的货币的比例和占有时间来确定“记账权”;权益证明的核心是只让在区块链中具有经济利益的人参与系统的维护工作,这就使得挖矿的成本远低于工作量证明机制之下的挖矿成本。
缺少图灵完备性
既然区块链可以保证比特币交易记录不被删改,理论上也可以保证任何代码一旦被写入,就不能删改。然而,比特币的脚本语言并不是图灵完备的,即不支持循环语句,意味着比特币只能作为数字货币,不能直接支持智能合约及更复杂的去中心化应用。
区块链技术平台以太坊的脚本语言(Ethereum Virtual Machine code)就是图灵完备的;用EVM代码来建立应用,理论上可以实现任何可以想象的计算,包括无限循环。以太坊实现了让任何人可以上传和执行任意的应用程序,并且程序的有效执行能得到保证。
六.智能合约如何运作?
在英语里,Code这个单词既有“代码”的意思,也有“法典”的意思,这暗示了智能合约(Smart Contracts)的功能和意义。
智能合约是一种直接控制数字资产的电脑程序。图7描述了基于比特币的智能合约的工作方式,通过在区块链上写入类似if-then语句的程序,使得当预先编好的条件被触发时,程序自动触发支付及执行合约中的其它条款。
图7,出自德勤报告Blockchain: Enigma. Paradox. Opportunity
- 多方之间的定期交付合同被以代码的形式写入区块链。其中的个体是匿名的,但合同记录在公共账本中。
- 当扳机事件触发时,比如到期、执行价格达到,合约按照编程的条款自动执行。
- 监管者可以通过这个区块链了解市场上的活动,同时维护个体成员的隐私。
Bob是接受数字货币支付的线上商家,Alice是使用数字货币进行支付的购物者,智能合约可以在去信任的情况下使Bob的商品与Alice的数字货币实现交换。Alice可以创建一个智能合约,将这样一段代码写入区块链:“如果我在24小时内收到这一商品,则我会将这笔数字货币发到寄件人的收款地址,并将这个商品寄给我的创建者,否则我将会将这笔数字货币发回给我的创建者”。
智能合约中的资产和资金没有拥有者(Owner),在这个例子中,当Alice把这笔数字货币加入智能合约,就无法通过修改这个合约把这笔数字货币拿回来,只能等待交易成功并收到Bob寄出的商品,或者24小时后交易没有成功,再收到自己的数字货币。
七.技术篇结论
以上介绍了区块链的技术特点及相关的数字货币、智能合约、侧链等的运作机制,并说明了相关的时间戳、工作量证明、权益证明、加密哈希等概念。区块链技术的核心是实现了沿时间轴记录数据与合约,并且一旦写入,就只能读取,不能修改和删除。
有一种较为主流的观点将区块链技术的演进分为1.0数字货币、2.0智能合约、3.0(Meta Technology)去中心化应用3个阶段。应用篇将对这3类应用进行分析,并展望区块链的市场前景。
下期预告
下期我们将分享【区块链之技术进阶】的第四篇,咱们要不去传说中一本正经地胡说八道的某乎上去看看诸神是怎么说滴吧。