每晚八点,我们在社区分享知识,等你。
NervosFans 微信公号:Nervosfans
入群请加乐乐微信:sensus113 美果大冰微信:xj73226
备注入群,谢谢!
说起来,比特币跟自动执行的有条件支付(就是智能合约)好像扯不上太大关系。 虽说比特比也是有基础的可编程性,支持时间锁、多重签名方案的,但还是不比以太坊、Qtum这些合约大佬的一些高级功能。
后来,Blockstream人才Andrew Poelstra 提出“无脚本脚本(Scriptless Script)”,巧妙的使用密码学原理将智能合约转移到链下,依仗比特安全性的同时,又不用对协议层进行变更。
再后来,闪电网络人才Tadge Dryja顺坡提出了“预估日志合约(Discreet Log Contracts),允许在比特币之上部署另一类智能合约。 DLC走的是区块链执行的保险、期货合约、挂钩美元(加密)币这类路线。
这俩例子也说明了一个事儿:以后可别说比特币不支持智能合约了。
今儿,我们来看看DLC是个啥。
投注
挺多智能合约说到底就是“投注”。
比方说吧,Bob想给自己投个‘飞行员罢工险’,谨防哪天法航飞行员又罢工了,耽误自己出门。
换言之,Bob‘投注’的是法航飞行员会罢工。 若没,则赌输,保险钱白交了;若罢工,则赌赢,罢工险生效,有理赔。
再比方说,Bob也可以押注BTC对美元价格,就是所谓的期货市场。押BTC价格跌,押对了赢BTC,押错了输BTC。
有趣的是,这个局儿可以被设计成什么呢?说里边投注的人无论输赢,手中BTC的美元价值保持不变。 换言之,这可以用来实现比特币区块链上具有固定美元价值的“稳币”。 当然了,某些极端情况下,这个假设不成立,比方说比特币颓了,然后价值归零。但是,多数情况下,假设是成立的。
这些智能合约虽然有意思,但执行时依赖的不只区块链数据。 好比区块链不会成精了连飞行员罢工,或者美元/BTC汇率是多少这种都知道。 也就是说,得有个法,能把区块链外的数据引入。
有请预言机。
预言机
预言机,从本质上来说,就是可信的信息来源。
虽然区块链无法“读取”预言机提供的数据本身,但是将数据插入智能合约后,合约可根据预言机的输入相应的执行。
反正上面的保险、期货类智能合约都需要依赖外部数据源,可以顺势利用对预言机的信任来进一步简化智能合约。 比方说,把预言机“插入”多重签名方案,完全可以的吧。
举个简单的例子:
说Bob、Alice俩人赌球,预言机作陪。
Alice赌A队赢,Bob赌B队赢。
赌注:1BTC
首先,Alice和Bob都往一个2/3多重签名地址上发1BTC。三把密钥分别由Alice、Bob和预言机保管。
若A队获胜,则Alice、Bob从该地址共同签发一笔交易,转2BTC给Alice。 这里只需要Alice和Bob的两个签名就够了,预言机吃瓜。
若输球方拒绝签发交易,预言机介入,使用自己的密钥,跟赢球方共同签署交易,完成转账。
理想情况下,预言机应该是专注吃瓜的。
尽管如此,一般多重签名 + 预言机的解决方案仍有其缺点。 首先,预言机可能需要参与赌注设置,或者必要时充当临时法官。 这就意味着预言机可能被动手脚,比如Bob跟预言机俩共谋盗币,事后Bob再给预言机一些回扣什么的。 其次,Alice和Bob俩人,在预言机面前毫无隐私可言,俩人赌什么、赌多少预言机都知道。 另外,全世界也都知道俩人拉着预言机不知道赌什么呢。。。(然后,其他人开始也拉着预言机赌Alice和Bob在赌什么。。。。。)
这些问题可以交由DLC解决。或者说,DLC就是没有这些大大小小问题的多重签名+预言机方案。
支付通道
DLC的作者Dryja,也是闪电网络白皮书的作者之一,可以说DLC深受闪电影响。
闪电网络允许交易双方间开通支付通道,通道实际上得益于时间锁、多重签名地址等比特币可编程性,结合一些技巧,使得交易不必每笔都广播于比特币网络。
随时间推移,支付通道会以新的余额或“通道状态”进行更新。 任何一方都可以随时将最新的通道状态提交至区块链并随时拿回余额。 利用比特币的可编程性,双方只能安全地广播最新的通道状态。 若作弊广播较早的通道状态,则对方获取通道内的所有比特币。
DLC的工作原理与支付通道类似。 但是,闪电网络支付频道仅允许涉及的各方广播最近的通道状;DLC则将广播内容限制在仅反映正确投注结果的通道状态。
再次有请多了些炫酷算术技巧的预言机。
预言机签名
赌球的例子里,2/3多重签名方案中,预言机有点像法官;DLC中的预言机则更像是广播者,或者体彩服务,或者媒体,就是那些会主动并真实报道结果的内些。
我们假设预言机是个体彩服务,会定期在自己的网站上公布比赛结果。 要启用DLC,这么做:
这个“广播预言机”有一把公钥和一把私钥。公钥在博彩服务的网站上发布,对所有人公开。私钥当然是保密的,预言机可以拿它来签署消息。
投注结果的话,不是A赢就是B赢呗。 体彩服务会非常明确的登出比赛结果,A赢或者B赢。
公钥密码学的有趣之处在于,体彩服务的公钥可用于确定消息签名,也就是A赢或B赢,长成什么数学“样儿”。
这里不是说Alice或者Bob能自己生成签名,但是他们能计算出签名的某些数学属性,或者说签名的数学版。
那么,Alice和Bob计算出的预言机签名的这些数学属性,是可以用在各种DLC中的。
预估日志合约(Discreet Log Contract)
赌球之前,Alice和Bob分别将1BTC支付给“经费交易(funding transaction)”。这笔经费中,再构建几笔其他的交易,但暂时不把这些交易在网络中广播。
接下来的密码学就有点复杂了。
体彩服务签名的数学版被巧妙地嵌入这些其他交易中,不同的签名可实现不同的交易。 具体而言,就是说体彩签名数学版的作用是不同交易密钥对中的公钥。
换言之,知道了预言机可能的签名是什么之后,Alice和Bob可以开通一条支付通道,两个不同的签名可以用来验证两个不同的通道状态:一个是Alice获得2BTC,另一个是Bob获得2BTC。
接下来,赛后发布的正版预言机签名被用作私钥验证获胜交易,且仅用于验证获胜交易。若体彩服务广播“A赢”的签名,则Alice可以将该签名用作私钥(加上她自己的私钥)从通道中获得2BTC。任何一方在没有预言机签名的情况下获取比特币的企图会失败,同时,通道中的比特币由对方获得。
此外,与闪电网络支付通道一样,Alice和Bob也可以将下注的结果像普通多重签名交易一样广播。 由于Alice执行结果不一定需要Bob的签名,所以Bob没有理由不合作。
因此,凭借体彩服务签名完成的这场“下注”是完完全全由区块链执行的,而且体彩服务真是没具体做了什么,甚至不需要知道Alice和Bob俩人还拉着自己赌球来着。
这里的例子举得比较简单,实际上DLC允许相当复杂的场景。 原因很简单,因为最终广播的只是一笔普通的多重签名交易,具体赌球还是赌什么,有多少可能的结果,并不重要。
相关视频:
网友评论