第0章 引言
区块链世界现在都是在空转,区块链里的数据都是区块链自己产生的,很难和现实世界有关联。比如,我们现在还没有一个有效的办法把比特币的价格数据上链,哪怕是比特币区块链自己都无法知道比特币的价格。
本文介绍一个项目想法,可以让现实世界的数据,比如币价格,股票价格,体育赛事结果,航班延误信息,国家GDP……等等,统统接入区块链。
这个想法要是实现了,那现在的主流币必涨十倍。
第1章Oracle是什么
Oracle是一个发布数据信息的主体。
币圈将Oracle翻译成预言机,这真是一个奇怪的翻译,给谁看也不知道这玩意是干什么的啊,不知道怎么来的。直接翻译成数据发布主体更好。
Oracle本身有一个数字身份,比如BCH上的Oracle就一定有一对公私钥对,向外界公布其公钥。如果Oracle要发布什么数据信息,那就拿这个公钥和信息,用他的私钥进行签名。外界就可以用这个公钥和签名,来验证这条信息确实是Oracle发布。
Oracle发布任何信息,一般会包含这些内容:具体的信息数据,数据的hash值,以及对该信息的签名信息。用洋文表示,洋气一点,Oracle发布的内容包括:data,hash(data),sig(data)。
一个链上的对赌合约,就可以使用Oracle发布的价格hash值和签名信息,做条件判断来计算对赌结果。
Oracle在技术上并不难,任何一个人都可以成为一个Oracle。关键是如何构建信用,别人如何相信你发布的数据是有效的。
两个人(A和B)在以太坊上签一个对赌合约,赌下一场巴西对阿根廷足球赛的结果。合约里就要包含一个Oracle的数字身份,和条件判断。只要这个Oracle发布了比赛结果(data,hash(data),sig(data)),那A和B就可以利用这个结果来结束对赌。但Oracle如果发布一个假信息呢?比如Oracle和A勾结来骗B,B可能一点办法都没有。
我们需要想一个办法来提供一个广泛有信用的Oracle。
第2章 Oracle数据标准
Oracle主要有两个部分组成,第一是按特定的协议格式收集真实世界的数据;第二是将数据稳定的发布在特点的场合。这些场合可能是一个网站,也可能是一个去中心化的存储服务上。
为了整个产业链能有效利用Oracle,最好有一个标准化的收集数据的协议。这个协议包括了Oracle发布数据的频率,收集哪些数据,数据以什么格式存储。
比如我们规定Oracle要平均10分钟发布一组数据包。这是要求无论10分钟内是否有真实的数据需要发布,但Oracel都需要发布一个发数据的动作,哪怕这里面是一个空数据包。这样做是为了保证产业链下游有稳定的预期。
比如我们规定好要收集BTC的价格,五大联赛的结果,这两组数据。其中BTC的价格肯定是平均10分钟一定会有一组,但五大联赛一周也只有一组数据。但每10分钟也是要发一组数据包,每一个数据子项使用特定的字段标记是否包括了数据。比如其中五大联赛这一个数据项,在绝大多数数据包中都是空数据。
我们需要一批严格遵守Oracel标准的节点。这里说的节点,即可以是一家公司,也可以是一个个人,只要他能长期稳定按协议收集并发布数据。
收集到的数据,应该找一个地方来发布或存储。发布和存储数据的地方一定要是去中心化的,并且是不可篡改和不可删除的。这就要求数据是以区块链的方式进行保存。在链上保存,需要支付矿工费,这对频繁发布数据,并且数据字节并不小的情况来说,是一笔很大的开销。这就一定要求使用低手续费的链,BTC和ETH肯定排除在外了。考虑到市场接受情况,在币值前5里找,也就是EOS和BCH这两个选择。
比如我们选择BCH链作为存储数据的地方,数据使用OP_Return输出存储。BCH一笔交易最大为1M,如果Oracle要发布的数据包大于1M,就需要多笔交易了。将这些交易拼接来存储数据。这些技术细节,都是可以解决的。
数据存储在区块链上是安全可靠,但展示是一个大问题,链上的数据,普通人是看不懂的。我们还需要将这些数据解析成一个人能看懂的形式。行业可以结合区块链浏览器来解析这些数据。比如可以将BTC的价格数据解析成图表,将五大联赛的结果解析成图文。
数据发布的时间和区块链确认时间也是不会冲突的,数据只是依赖于区块链来存储。发布数据的交易零确认都是安全的。最好Oracle可以和矿池合作,保证交易能够稳定得到确认,并且还能谈一个低手续费的折扣。
遵守这个数据协议的Oracel共同组成一个组织。这是一个可自由加入和退出的组织,通过自由市场来涌现出一个可信任的组织。为了描述方便,我们取名为Oracle联盟。联盟之间是需要有正常的沟通往来,以决策一些联盟内部的事务。我们先假定联盟一共有21个成员。
第3章 数据上链DIP (Data Improvement Proposal)
具体发布什么样的数据,是Oracle数据标准的最重要的一部分之一了。我们需要制订一个增加特定数据上链的投票协议,用来选择哪个数据被采集,并且确定数据的存储格式。
外界通过向“Oracle联盟”提交DIP(Data Improvement Proposal数据改进协议)的方式来申请采集和发布数据。21个联盟成员通过投票的方式决定是否采纳DIP。
比如以太坊用户可以申请在“Oracle联盟”发布以太坊世界前10大交易所的平均价格,10分钟一次。21个成员对这议题进行投票,决定是否采集并打包以太坊的价格。如果采纳,那还要决定数据格式是什么,还要决定数据源怎么来,采集的结果的偏差值……等等细节。
任何人都向“Oracle联盟”提交BIP,具体的方式可以是向21个成员中的某个节点提交,也可以通过社交网络,网站等公布申请。
一旦21个成员通过了某项数据上链的BIP,就可以采集并发布这项数据了。其他区块链也就可以使用这项数据了。
第4章 数据的使用
以上方法并且没有约束“Oracle联盟”各成员发布的数据如何保证真实有效,本章就是为了解决这个问题。在上一篇文章中,我介绍了一种使用区块链投票的方式来涌现出真实数据。但这里有一个更简单的方法。
使用数据的一般是一个区块链上的合约,或者是一款dApp。最经典的场景就是打赌合约。以下是一个利用Oracle数据来打赌的合约场景。
A和B赌巴西和阿根廷足球赛的结果,赌注为1BCH。A赌巴西赢,B赌阿根廷赢(为了描述方便,我们不考虑分数和平局)。A和B共同生成一个2-2签名的地址,每人一把私钥。A和B分别往这个2-2签名的地址转入1BCH的赌资。
其中Oracle联盟会发布巴西和阿根廷的足球赛结果。
这两个BCH解锁的条件如下任一:
1)A和B共同通过私钥签名来解锁。即共同决定是赌资怎么分配。
2)A私钥+Oracel联盟共21个成员发布结果,至少包含了19个是巴西赢的结果+Oracel成员的签名+Oracel成员的公钥,可以解锁这两个币。
3)B私钥+Oracel联盟共21个成员发布结果,至少包含了19个是阿根廷赢的结果+Oracel的签名+Oracel的公钥,可以解锁这两个币。
为了防止Oracel和A或B串通来诈骗,采取以下措施,将21个成员发布的数据结果一起加入进解锁条件,而且要达到其中至少19个结果相同,才可以解锁。
我们假定的是19个Oracel成员联合一起来诈骗的概率是非常低的。
我们还可以通过回顾历史数据来对成员进行评分,优胜劣汰。
第5章 激励措施
运营Oracle是要成本的,维持信用也是要花钱的,如何让联盟成员乐意去采集数据挖矿,并且要做到大家抢着去采集,形成竞争,优胜劣汰。这是要认真设计。
最好是直接让合约每次执行时,可以自动给Oracle联盟那21个成员发一笔小额的费用,哪怕是发546聪(BCH最小金额),甚至未来可以做到100聪。
但这是方式的主动权在于合约的设计,Oracle联盟是无法强制约束合约给钱的,只能依赖于合约自发给钱。这是一个大漏洞。基于人性的考虑,合约将不会主动发送这笔钱。
另一种办法就是Oracel联盟发布的数据是加密的,你想调用,需要付钱来解密。但这个技术细节我还没想明白,但肯定是可以搞定的,而且是在合约里就可以搞定的。
第三种方法就是捐赠。公益事业嘛,接受捐赠。
第6章 结束语
此物一出天下反,这是一个对所有区块链都好的大好事,这个项目要是成了气候,那真是半个互联网要和区块链有关系了。
作者:黄世亮
欢迎打赏BTM:bm1qefc720au672awrgazgw5c3kx7etr5kejju02p7