区块链技术详解摘要:区块链技术的核心是实现了沿时间轴记录数据与合约,并且一旦写入,就只能读取,不能修改和删除。
自从今年1月20日,中国人民银行在数字货币研讨会上表示高度重视区块链(Blockchain)等技术带来的新机遇和挑战,并争取早日推出央行发行的数字货币[1]以来,区块链的概念在国内越发火热,吸引了金融机构空前的关注。
这份报告是爱就投与研究中心第一次关于区块链技术的研究结果,参考了来自投行、咨询机构的多份研究报告,并结合爱就投项目经理与国内区块链创业者的交流整理而成。
技术篇介绍区块链的技术特点和运作机制,并说明相关的重要技术概念;应用篇结合其在金融和非金融领域的应用案例,分析区块链的应用场景和市场前景。
作者认为,区块链技术的核心是沿时间轴记录数据与合约,并且只能读取和写入,不能修改和删除。
在应用层面,区块链的安全、透明、高效3大优势,使其特别有助于规范互联网金融的发展,以及促进物联网和共享经济的普及与创新;在资本市场,采用分布式数据库和智能合约还可以大幅减少人工核对工作,为金融机构节省成本。
一.区块链的技术特点区块链是一种共享的分布式数据库技术[2]。
尽管不同报告中对区块链的一句话介绍措辞都不相同,但以下4个技术特点是共识性的[3]。
1. 去中心化(Decentralized):图1的左侧描述了当今金融系统的中心化特征,右侧描述的是正在形成的去中心化金融系统,其没有中介机构,所有节点的权利和义务都相等,任一节点停止工作都会不影响系统整体的运作[4];图1,出自花旗报告Digital Disruption: How FinTech is Forcing Banking to a Tipping Point [4]2. 去信任(Trustless):系统中所有节点之间无需信任也可以进行交易,因为数据库和整个系统的运作是公开透明的,在系统的规则和时间范围内,节点之间无法欺骗彼此;3. 集体维护(Collectively Maintain):系统是由其中所有具有维护功能的节点共同维护的,系统中所有人共同参与维护工作;4. 可靠数据库(Reliable Database):系统中每一个节点都拥有最新的完整数据库拷贝,修改单个节点的数据库是无效的,因为系统会自动比较,认为最多次出现的相同数据记录为真。
图2,出自高盛报告Blockchain: Putting Theory into Practice [2]图2为简化起见,仅展示了6处保留数据库副本的节点;在3个交易序列中,前2个交易的数据和签名得到了所有6个节点的验证,但第三个交易的位置5没有通过验证,将被其它节点的“一致意见”更改[2]。
二.公有链、私有链、侧链区块链按照访问和管理权限可以分为公有链(Public Blockchain)和私有链或联盟链(Private Blockchain)。
公有链是完全开放的区块链,全世界的人都可以参与系统维护工作,这使得公有链还具有以下2个特点[3]。
1. 开源(Open Source):由于整个系统的运作规则公开透明,这个系统是开源系统;2. 匿名(Anonymity):由于节点之间无需信任彼此,所有节点也无需公开身份,系统中每一个节点的匿名和隐私都受到保护。
私有链或联盟链在开放程度和去中心化程度方面有所限制[5],参与者需要被提前筛选,数据库的读取权限可能是公开的,也可能像写入权限一样只限于系统的参与者[6]。
公有链的典型代表是比特币区块链,任何人都可以通过交易或挖矿读取和写入数据[7]。
私有链或联盟链的典型案例是Ripple和R3 CEV,前者目前为属于联盟成员的银行类金融机构提供跨境支付服务,希望取代环球同业银行金融电讯协会(SWIFT)的跨境转账平台,打造全球统一的网络金融传输协议;后者旨在推动制定适合金融机构使用的区块链技术标准[8]。
侧链(Sidechains)是用于确认来自于其它区块链的数据的区块链,通过双向挂钩(Two Way Peg)机制使比特币、Ripple币等多种资产在不同区块链上以一定的汇率实现转移[9][10]。
图3,出自Blockstream Moves Ahead with Sidechain Elements. GiulioPrisco [10]侧链进一步扩展了区块链技术的应用范围和创新空间,使区块链支持包括股票、债券、金融衍生品等在内的多种资产类型,以及小微支付、智能合约、安全处理机制、真实世界财产注册等;侧链还可以增强区块链的隐私保护[10][11]。
所谓“多种资产在不同区块链上转移”其实并不会实际发生。
以比特币为例,侧链的运作机制是,将比特币暂时锁定在比特币区块链上,同时将辅助区块链上的等值数字货币解锁;当辅助区块链上的数字货币被锁定时,原先的比特币就被解锁[12]。
三.比特币区块链如何运作?比特币网络从2019年1月开始至今,在没有专人维护的情况下已经平稳运行7年多,期间没有出现一次宕机。
图4以Bob接收来自Alice的比特币的场景,详细描述了比特币区块链的工作方式,一并解释了涉及到的钱包和地址(Wallets and Addresses)、私钥和公钥(Private Key and Public Key)、加密哈希(Cryptographic Hashes)、随机数(Nonces)等概念[13]。
图4,出自A Guide to Bitcoin Mining. Alec Liu [13]钱包和地址: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个。
从2019年1月3日创世区块诞生开始,新比特币的发行大约每4年减半,2019年11月28日,阶段2开始,每一个区块包含的新币减为25个,这是历史上第一次减半;预计今年7月11日,挖矿奖励会再次减半;直到第33次减半时,每一个区块从产生0.0021个新币直接减为0个,比特币的总量固定在将近2100万个[14][15]。
交易验证:21. 随着时间流逝,Alice向Bob的转账被埋在了其它更近期的交易下面。
任何人要想修改历史交易的细节,就必须重做一遍Gary的工作,然后再重做所有下一级矿工的工作,因为所有的改变都需要一个完全不同的胜出随机数。
这样的操作几乎不可能成功。
四.双重支付如何解决?以比特币为代表的数字货币,关键的创新是通过时间戳(Timestamp)和工作量证明(Proof of Work)机制解决双重支付(Double Spending)和拜占庭将军问题(Byzantine Generals’ Problem),即保证同一笔比特币不会同时出现在两个地址[7],并且在信道可靠的基础上,所有节点都可以让其它节点接收到自己的真实意图,并最终一致行动[16]。
这一技术方案最早见于化名为中本聪(Satoshi Nakamoto)的个人或团体在2019年发表的论文Bitcoin: A Peer-to-Peer Electronic Cash System [17]。
在Bob接收来自Alice的比特币的场景中,一方面,这笔付款被广播给系统中所有节点,任何人都可以使用Bob的公钥来验证这个交易的合法性,如果Alice试图双重支付,就必须先删除这个交易记录,否则新交易无法通过验证。
中本聪在论文中写道:“时间戳服务器为一个区块的数据的哈希计算结果加上时间戳,并大范围发布这一哈希计算结果,好比在报纸或新闻网上发表。
显然,时间戳证实这些数据一定在这一特定时间存在,只有这样才能得到哈希计算结果(A timestamp server works by taking a hash of a block of items to be timestamped and widelypublishing 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)”[17]。