区块链编年史(二):区块链与智能合约
区块链存证
当一部分人把比特币作为自由货币进行发展的同时,另一部分人注意到的则是比特币底层的技术:2009 年1 月4 日,中本聪在创世区块的币基(CoinBase)上留下了一段话:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”,那是当天泰晤士报的头版文字标题,这段话永久记录在比特币区块链中,除了揶揄当年金融危机中政府的束手无策,也是在宣称,比特币区块链可以证明不可篡改的记录,并且由全网协议的唯一“时间戳(timestamp)”为记录加上了时间维度。
![](https://img.haomeiwen.com/i10841184/5cde0ee21695a731.png)
将内容刻在区块的币基上,那是矿工挖矿的特权;在0.9 版之前,比特币并没有提供一个正式的用于存储信息的位置,著名的比特币赌博网站“中本聪骰子(Satoshi Dice)”为了证明其公平性,用交易的数额承载信息,具体做法是:将谜底文件的哈希值分割成16 个4 位十六进制数,分别转化为最多5 位的十进制数,将这5 位数分别作为输出金额的末尾数字(比特币的计量单位小数点后有 8 个 0,因此每比输出金额不超过 0.00100000 比特币),构造一笔包含 16 个输出的交易(输出金额不超过 0.016 比特币),将收款指向自己的账户,这样实际上只需要花费非常少的矿工费,就可以实现永久的存在性证明效果。(矿工挖矿除了获得固定的网络增发收益,也可获得交易的费用,如果交易发送者支付较多的矿工费,则该笔交易能够获得更快的网络确认,因为矿工在挖矿时更愿意打包矿工费的交易,当然,如果不给交易费,交易也终会被打包确认,只是要等很长的时间);从 0.9 版开始,比特币专门新增了交易附言位置(OP_RETURN),使得用脚本存证变得非常简单直接,虽然比特币基金会在文档中宣传OP_RETURN 并不代表对比特币区块链可以作为分布式数据存储的认可,但是,利用OP_RETURN 存储信息的区块链存证应用就此遍地开花。(此外,还有两种存证方法:
![](https://img.haomeiwen.com/i10841184/fff6f479ce4cd4f7.png)
一种是合约币(Counterparty)和万事达币(MasterCoin)都曾经用过的,运用“多签名公钥空位(OP_CHECKSIGVERIFY)”存证;另一种是在交易广播前将“OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG” 中pubKeyHash 这里的40 个0 替换成拟存证的信息。只是在有了OP_RETURN 功能之后,这些方法都显得较低效了。)
率先提供存在性证明的服务网站非常直白的就叫“Proof Of Existence”,区块链存证的基本技术门槛并不高,一时间,提供该项服务的企业非常多,而这当中做得最好的,当属“公正通(Factom)”:由于比特币每笔交易的OP_RETURN 只能存储40(最多80)个字节的数据,所以一般只是把文件的32 位哈希值存储到区块链上,只能单向检验文件真伪,并不能逆向还原文件,用户仍需要在本机电脑上妥善保存文件的原件;
虽然也可以通过将大文件的hex 字串拆分成若干段分别存证,用时再取回组装,但是这样做效率低下,而且成本较高,不是长久之道;Factom 在底层锚定比特币OP_RETURN 的基础上,构建了也是基于区块链技术的存储层,抓住了行业痛点,使存证产业链变得完整。
![](https://img.haomeiwen.com/i10841184/b3bd552eb25dd03d.png)
有了完整的存证体系,区块链就可以完美应用于电子证据、知识产权、身份验证、婚姻登记、土地登记、食品溯源等领域。Factom 曾在政局动荡的洪都拉斯试图用区块链登记土地所有权,中国企业“唯链(vechain)”通过在奢侈品中嵌入可查询区块链记录的NFC 芯片进行防伪,MIT(麻省理工学院)在区块链上开发出了学历认证系统,“保全网”运用区块链存证技术双向对接企业和公证机构的需求,阿里巴巴旗下的“蚂蚁金服”正在尝试将区块链用于慈善项目。
除了Factom 等现成的方案,如果你想从底层探索一个区块链存证项目,或许还应该了解“星际文件系统(IPFS)”、StorJ、Sia、MainSafe 等分布式存储方案。
公私钥体系
比特币基于非对称椭圆加密算法,实现了公私钥体系,简单来说,就是通过密钥加密的信息,只有另一个密钥才能解码。公钥和私钥是两把密钥,公钥是公开的密钥(比特币账户可视为公钥,虽然事实上还有更多的计算),私钥是不公开的密钥,公钥由私钥推导而来,但反之不行。
比特币交易的过程是这样的:由私钥对交易内容进行签名,表示我是交易的合法发起人,广播到网络上之后,各节点根据其公钥进行验证,如果验证通过,签名是合法发起人的,则交易予以记录。
在有些场景下,需要证明某人是账户的合法持有人,那么证明的过程如下:使用此人的公钥对一段数据进行加密,进行全网广播,此时,只有通过此人的私钥才能对这一段数据进行解密,也就是说,只有该账户的合法持有人才能看到这段数据的明文。
![](https://img.haomeiwen.com/i10841184/cb59d3195a18ab0b.png)
运用公私钥体系,可以构建高效、可信且安全的应用,比如比特信(BitMessage)是一款用公私钥体系作为运作原理的的点对点加密聊天工具(区块链全网同步能够保障信息高效、可信的送达,只有合法的账户私钥持有者才能查看加密的内容,确保了接收方用户的行迹不被追踪,可保护人们的隐私);OpenBazaar 类似于用公私钥体系搭建的“淘宝”;而 Twister 是一款去中心化的微博应用(除了运用了公私钥体系,这款应用的其它方面也设置非常精妙,用户发布的微博记录在区块链上,但传播力有限,如果想发布向所有用户自动推送的“广告”,则需要提供算力进行“挖矿”)。
公私钥体系也可运用于物联网,区块链技术有助于解决当前物联网技术遇到的一些瓶颈,比如物件的身份认证、物件之间可靠、安全、保密的信息传输。德国的Slock.it 正在研制的智能锁项目,就是试图将公私钥体系运用于物联网,以实现对财产物件的去中心化管理。
智能资产、智能合约、智能股权
比特币中交易的记账逻辑并非是一方加、一方减,而是通过脚本表达的总账脉络,明明可以很简单的东西,却用了一种叫UTXO(Unspent Transaction Outputs,未花费的交易输出)的体系、用相对复杂的脚本语言来表达,为什么?因为中本聪要告诉人们的是,比特币是“可编程货币”,在其区块链上并不是只能实现简单的加减,而是可以实现复杂的权限管理,公私钥体系并非只是一对一,而是可以演化为复杂的“多签名”验证。这样的思路,加上前面提到的不可篡改的存证、与物联网的对接,尼克·萨博在1997 年提出的“智能合约(Smart Contract)”概念就复活了。
人们将传统的互联网称之为“信息互联网”,因为它很容易传输信息,却不方便传导价值,而基于区块链的网络,通过巧妙的密码学安排,可以实现价值的高效传输。在“信息互联网” 中,如果要传递价值,原理只是由中心化的服务器进行记账,这样,篡改是相对容易的;而如果使用区块链构建的“价值互联网”,由于信息以分布式全网账本的形式存在,篡改的成本是极高的。
所以,有人想到,既然比特币可以表达人们对数字货币的产权,那么通过区块链技术也可以表达对现实资产的产权,“染色币(Colored Coins)”的想法应运而生:如果某个数字货币对应现实中的产权,那么通过给该数字货币“染色”(用存证的方法),将其产权状态和流转信息标明,以实现对现实中资产的产权表达。
更进一步,区块链不仅仅是静态的,也可以动起来,不只是记录,还能够通过条件进行触发,根据预设的情形进行判断和执行。比如,智能锁程序可以判断发出指令的账户是否合法进而决定是否执行开锁,如果是房子的合法使用人,开锁后才能进入,这就可以形成“智能资产(Smart Asset)”;又比如,两家公司约定,货到后付款,拟写了一个程序放到区块链上,程序会自动判断货是否已到,如果已到,则自动从买方的账户上扣款发往卖方账户,这就能构建出“智能合约”。
智能合约具有自治、自足、去中心化三个特征:
自治是指一旦启动便不受任何干预,忠实按照既定程序执行;
自足是指程序可以自主控制其计算所涉及的资源,比如有权限调配参与者的资金和财产;去中心化是指它不依赖某个单独的服务器,而是由分布式网络的节点共同支持运行。将智能资产和智能合约用于共享经济,就能创造出去中心化的Uber(以色列的创业项目La'zooz 就是如此)和区中心化的Airbnb(有消息说,Airbnb 已经收购了一支名叫ChangeCoin 的区块链技术团队);
运用于电力能源再分配,可以将电力进行P2P 共享,形成“智能电网”;运用于促进社交网络信息生产,可以打造智能化的社交媒体平台(如 Steem);
也可运用于表达和确保法律和政治权利,在公民的数字身份、民主投票选举等领域进行应用(如BitNation、Pax、Ubiquity 等项目)。
现实中有有形的资产,也有无形的资产,股权属于无形的资产。当前社会条件下,股权形态和分布越来越复杂,仅仅靠国家强制力保障的权利成本有时会过高,救济并不及时,发生纠纷后走法律程序往往得不偿失,所以,不妨事前做好预防,用区块链上的智能资产来确认股权,用智能合约来表达转让流转、纠纷处理等机制,如此,可实现股权的低成本保护和快速安全的流动。国内的“小蚁(AntShares)”就是一款专注于“智能股权”的产品。在这之前,还有很多的探索者,知名的有比特股(Bitshares,自带交易所功能的数字资产发行平台)、万事达币(MasterCoin,是最早建立在比特币区块链之上的可供运行智能合约的编程平台,现已改名为 Omni)、合约币(Counterparty,附生在比特币协议之上的去中心化财务应用)。
瓶颈与突围
在Bitpay、Coinbase 等团队的努力下,比特币支付生态越来越成熟,越来越多的商家开始接收比特币,其中不乏国际知名的大企业,比如亚马逊、戴尔。但是,无论是作为货币,还是作为技术,比特币都面临着很多的瓶颈。
作为货币,比特币大约每10 分钟出一个块,而如果金额较大的话,一般需要6 次确认才能将“双重花费”等意外风险降低到一定程度,也就是说,如果普通消费者使用比特币支付,需要等至少十分钟才能行,很明显不适合通常的小额支付。有一些公司做了比特币的云钱包、轻钱包,但其本质却是中心化的服务,并不可靠,也违背了比特币的初衷。而且,区块的大小上限决定了,比特币的并发能力也有限,只有平均不到10 笔交易/秒,根本不足以支撑真正的商业应用。针对此,开发人员设计出了“闪电网络(Lightning Network)”和“雷电网络(Raiden Network)”,将“交易”与“结算”分开,日常小额的交易在闪电网络或雷电网络中进行,而在比特币网络中只进行最终的结算,确保速度的同时保障安全。
技术上,比特币非常“不友好”。正常的比特币使用需要同步下载全部历史区块后,才能进行交易,而截止目前,比特币的全部区块已经大到了超过70G,对于一般用户的电脑来说,是很大的负担,并且也成为了将比特币应用往移动设备移植的最大障碍。我们固然可以用在0.12 版之后推出的 prune 功能让区块瘦身(瘦身之后区块链占用空间将可以不到 1G),但是,对于技术人员来说却不适用,因为只有全节点环境下才能部署和运行区块链应用。在这样的背景下,有人提出了“隔离见证(Segregated Witness)”,指出区块链中的信息可以分成两类,一类普通人关注的账户结余情况,另一类是普通人不需要看、而需要给记账的矿工看的关于“交易和合法性”的情况(比如“签名”),像后一类信息并不需要包含在一般用户节点的区块链中,需要验证时再向特殊节点去取就好了,这样,比特币区块就可以实现大规模瘦身,且不影响基于其开发新应用(2016 年8 月底发布的Bitcoin Core 0.13.0 版本中,已首次包含了“隔离见证”功能,当然可能要到后续版本才会激活)。
其实,闪电网络或雷电网络、隔离见证等改进方案,都是围绕着一个根本问题:比特币的扩容。比特币如果不扩容,始终还是会面临着这些效率相对低下的瓶颈,而如果扩容,可能会面临安全方面的挑战。在比特币的社区里,分裂已经发生,区块大小为1M 的老版本改名为Bitcoin Core,而先后出现了区块扩容的Bitcoin XT、Bitcoin Classic 等新版本。
除此以外,还有一些长久以来悬而未决的问题,如POW 机制浪费资源的诟病、挖矿日益趋向中心化的问题、钱包保管安全问题、将非法内容(如儿童色情图片、病毒代码)写进区块链如何解决的问题,还有比特币代码中越来越多的中心化内容(如,在源代码文件chainparams.cpp 中可以看到,有若干个“检查点(checkpoint)”,它们的作用是在比特币节点启动时会检验区块是否是“官方认可”的区块,如果不是,则不能正常使用比特币软件,这固然是由于很多历史原因而打的补丁,但是在源代码层面直接用写死的数据去影响区块链的自治,有种令人不太舒服的感觉。当然,也有一种说法,写死的检查点可以防止未来的达摩克利特之剑——量子计算对比特币的突然袭击,姑且听之),加上,比特币基金会越来越多的掺和到商业利益中,使得比特币技术的发展整体上已渐渐跟不上时代。
由于比特币区块链显出了老态,有人便提出了“侧链(SideChains)”的概念:制造一条新链,然后将新链嫁接在比特币区块链上,将具有稀缺性的比特币的价值通过技术方法传导到新链发行的数字货币上,如果把数字货币的价值视为“血液”,那么这些侧链就是要吸比特币区块链的血,用比特币的稀缺性来充盈新链数字货币的价值。
合约币(Counterparty)是通过“燃烧证明(POB,Proof of Burn)”机制来将比特币的价值传导为合约币XCP 的价值的(参与合约币众筹的人们将3000 多个比特币发送到一个没有私钥的“黑洞地址”);
万事达币(MasterCoin)通过在比特币上建立侧链机制,不但利用比特币区块哈希值进行“联合挖矿”,而且在比特币块链上存储每个交易,如此通过比特币的强大算力安全性保障自身区块链的安全性。(如果回过头来看,会发现其实“闪电网络”也是一种“侧链”机制。)