Terry :所以 POW 在私链上用是低效的。
Jan :在私链上不会用 POW ,也不会用比特币或其他软件来直接用。你解决了一个根本没有的问题,我不需要。
Terry :这种拜占庭将军的三分之二以上的节点诚实就足够了。
Jan :所以现在很多私有链的项目是把以太坊拿过来,把其中共识算法替换成 raft 或者其他拜占庭容错的共识算法,效率高,很多其他的好处,最终确定可以马上达成。不像区块链需要等六个块,这种算法是直接一个块就可以确定。
Terry :所以由于去掉了这种共识机制效率大大提升。那我们既然把共识机制都换掉了,和传统分布式数据库的解决方案有什么本质的区别?
Jan :经常听到这种说法:什么私链不就是数据库么!但仔细一想是不同的,关键是传统分布式数据库怎么做并行的写。比如可以对 riak 里每个节点去写数据,但它终究会遇到写冲突的问题。数据库无法解决写冲突,而是抛出异常让程序员决定去怎么解决,是需要人去处理。区块链上写数据的时候是先发起一个交易,相当于在网络里提交一个修改数据的请求,传统的数据库就直接去执行了,但区块链的私有链是共识节点,收到请求后,由它来决定是否来执行请求修改数据。所以在共识节点上有一个选择交易、并对交易进行排序的权力。排序也很重要,如在做银行转账时把钱先转 a 再到 b 和先转 b 再到 a 是不同的。所以选择交易且对交易进行排序的权利很重要,且在共识节点手里。你只能提出请求,共识节点来选择执行什么。在共识节点进行排序的时候可以摒弃造成冲突的交易,这样形成的交易记录是无冲突的。
Terry :所以和传统分布式数据库比,在写入的客户端和数据库中加入了一个共识节点,也就是最终的客户端并不是在随意的操作数据,所以不会出现冲突。原因是它都交给了共识节点,共识节点会处理以后再交给数据库。
Jan :对,这个很像三权分立的模型。你发起的交易有你的签名,别人无法伪造。但你只能发起交易,不能确定此交易是否执行。反过来,共识节点它无法发起交易,它能决定选择执行哪些交易。相当于把写分散在了两个地方,很多个地方,因共识节点不只一个。通过此方式来保证达到一个共同的记录。
Terry :所以共识这一层就保证了不会有冲突。 blockchain 是一个可信任的运算平台可信任的数据库,怎么落地到现实生活中?除了之前提到的银行对账上面,在现实生活中我们还有那些地方需要区块链来改变的。
Jan :如现在做的项目保全网(
www.baoquan.com ),要把电子数据变成证据,而证据必须是没有改变过的原始数据,如何证明数据是未修改过的,只要放在区块链上就能解决。所以电子数据保全是非常能做近期落地的应用。
Terry :这个主要是运用到了区块链的存储性质。
Jan :考虑执行的话,金融方向是最好的。
Terry : blockchain 上实现完全透明可信的交易所了。
Jan :对,上次说的挂单所有的买单、卖单、成交记录都是可信的。买单是可看到的,成交是可执行的。
Terry :你说的三权分立很贴切啊。像说成立一个交易所,挂一个买单卖单,但不是我运行的这个程序,是我交的一个共识节点来运行,作恶的成本变高了。
Jan :以前没有办法做的,现在可以了。金融很适合,金融行业处理的都是数字,数据量很小,很配合区块链的现状。它的计算能力存储能力不强,所以在一些应用上还有很长的路要走,但是刚好能做计算数字方面的事情。数字货币里能否通过去中心化方式造出一种稳定的货币,而非比特币这样剧烈波动的货币。有项目想通过差价合约的方式来实现,解释下差价合约:因为以太币波动太厉害,两个人各有 1000 个以太币,一个人 A 追求稳定,希望卖的时候还能获得现在的价格,而不是跌到一分钱都不值。那他可以把 1000 个以太币放在差价合约里,有一个对手 B 也放 1000 个在差价合约里,合约规则是,假如现在一个以太币=6RMB ,那 B 等于放了 6000RMB 到合约,一定时间后可以 A 拿回价值 6000RMB 的以太币。剩下的以太币就全是 B 的 。如此,无论以太币是涨还是跌, A 拿到的都是 6000RMB , B 去承担风险,但他的好处是如果涨了呢。如现在以太币涨到 10 块钱一个, A 只需要拿回 600 个,而 B 则拿回了 1400 个。 B 承受了风险但是因此可能获益, A 虽然无风险但是也没有额外收益,获得稳定收益。
Terry :根据诉求的不同。
Jan :所以合约规则很简单,智能合约可以马上实现。但是问题是怎样知道当前的以太币价格?
Terry :区块链对外界信息不了解。
Jan :对,因为区块链本身是一个世界,币价是在区块链外部的信息,外面的信息如何输入到区块链里,而且是以一个去中心化方式。最简单的是指定一个人每天往区块链里输入数据,但这样就变成了一个中心化的方案。
Terry :而且他有可能作恶。
Jan :他有可能作恶报假的信息,一个去中心化的方法如 Vitalik 写了一个博客来介绍,可以做一个 Schelling coin. Thomas Schelling 是 2005 年诺贝尔经济学家的获得者,他在经济学和博弈论有很多研究。他提出在博弈里 common knowledge 是很重要的,比如一个小游戏里同时给两个人看 10 个数字 12 、 37 、 56 、 102 、 200 、 301 、 990 、 587 、 432 ,让两个人各自选一个数字,如果你们恰好能选择同一个数字就赢走 100 元。你会选哪个数字?
Terry : what ?-_-
Jan : Schelling 解释,看起来两个人赢钱的概率是很低的,实际上他们都会选 200 ,因为它是整数。因为我是随便报的,不小心报了个 200 ,实际上更好的例子是 100 ,因为 100 是一个很整的整数,在人的心里有特殊感觉。
Terry :心理学?
Jan :有。再一个例子,如用电话告诉两个人,到了纽约不同地方的两个人,让他们自己想办法碰头。二者之间不能互相联系不能广播见面地点,会怎么做才能使两个人见面?
Terry :我会去市中心。
Jan :对,你一下就想到了。为什么回去市中心?这就是 common knowledge 。你可能会觉得既然不知道他会选择什么,所以他可能会选择一个我会选的,最通用的地方。意思是 common knowledge 是很重要的,因为你相信另外一个人也会这么想,而且你相信另外一个人也会相信你会这么想,无穷递归下去。由于这样的无穷递归就会导致你们选的是 common knowledge , POW 其实也是如此。这也是 POW 博弈的原理,我的选择是基于你会找长的链挖矿,你也认为我会基于最长的链挖,最后的结果是大家都会基于最长的链挖。回过来说,如何用 Schellingcoin common knowledge 去实现去中心化的链外的信息输入。规则很简单,我现在有 1000 人,每个人都把你们认为的当前的认为以太币的价格写到链上,把所有人报价排序。如果你的报价落在 25%—— 75%区间内,就给奖励,否则要接受惩罚。比如加入这个游戏是先交保证金,输了就会没收保证金。那所有人都会尽力的去接近真实的价格,你不知道别人怎么玩但是你会想别人肯定也会像我这么想。唯一的 common knowledge 就是真实的价格,所以这个机制形成的就是所有人都往真实价格上靠。所以最后在所有人里选中位数,这个中位数一定符合真实价格。通过这样的机制就可以实现差价合约,以此来得到稳定的货币。
Terry :听起来要让它稳定的建立起来需要一个完美的经济系统。
Jan :对,其实是一个博弈的系统。
Terry :每个人都为自己所想但会让它跑得很好。
Jan :这就是去中心化的规则美妙的地方,必须要把规则制定好。实际上很多时候你是在写规则,而不是算法。
Terry :我觉得 blockchain 社区里的人都认为中心化是不美的,我不要用。中心化是有坏处的,唯一的好处是高效。
Jan :所以私有链不需要这么做,引入一个 data feed 就好了,效率高。
Terry :就是在特定的状况下选择特殊的东西,我们刚才说的都是金融相关的领域。有没有什么金融之外的领域觉得可落地的?
Jan :物联网,这个方向可能很有发展潜力。因为 IBM 和三星曾经用以太坊的协议做了一个物联网的原型系统,这个项目的 demo 拿出来给大家看过。现在 IBM 的方案已经从以太坊转移开,但可以看到他们对把区块链结合在什么地方有兴趣。因为区块链上可以有价值和所有权的转移,物品互相打交道是涉及金钱的, 而物品本身也涉及所有权。用区块链来登记物品的所有权使其之间有些经济行为,如出租。以太坊上一个很有意思的项目是 slock,尝试把物联网和共享经济与区块链结合起来。具体是 slock 把物联网浓缩到现实世界一把锁这样非常小的概念,如汽车启动的锁,门上的锁。这个锁的所有权是可在区块链上转移,可以把锁临时转移到另外一个人手里,这个临时可以是智能合约。这个智能合约设定在这个时间以前这个人可以打开锁,在这个时间以后所有权就回归了。这个智能合约由区块链执行,可完全信任。现在有一些智能门锁的项目是中心化的实现,使用权的转移是由中心化的服务商来提供。问题是并不能保证不作恶,如果是锁的公司内部人员或者黑客,那就可以开锁拿走你的东西。若放在完全可信的区块链上,那么这个锁只有你能开,而且还可以放心的分享出去,分享之后能够放心的收回来。
Terry :我有一个问题,像你说的例子中的方案,引入去中心化的方案会不会给这个锁带来体验上的差异,我是不是要懂程序?如中心化的智能锁我使用一个公司开发好的 APP ,去中心化的锁我是不是要会写合约才能转过去?
Jan :不会的, slock 是基础协议,你可以根据它做一个 APP 去使用。
Terry :那我需要信任这个手机 APP 吗?
Jan :手机 APP 可以开源。
Terry :我只关心最后写到区块链的数据是对的就 OK 了?
Jan :对。
Terry :不用去关心手机是怎么跑的?
Jan :那还是要关心的,万一有一个后门什么的。你还要关心锁里的软件是怎么写的。还是需要有专家能替你看到。
Terry :那这样的锁对作恶越敏感的地方越有用,如家门和车钥匙。反而是一些快递扔到外面没有那么敏感。
Jan :没错,项目听起来很好,但是需求需要仔细挖掘。很多人对中心化的方案并不介意。
Terry :这也是区块链遇到的一个问题,首先不能降低我的使用体验,吸引到普通用户。所以这是我们研究这个技术去考虑的一个因素。不是说这个东西好了大家就一定会用。
Jan :这只是物联网应用的一个子场景,其他人想做物流供应链方向的管理,可能会比 slock 更有意义。比如葡萄酒供应链,从种到制成葡萄酒到过海关到进入国内分销,中间有很多环节,每一个环节都会有问题。
Terry :这个是不是可以代替条形码或者电话来确认真假的服务?直接可以在区块链上查到它从哪出来如何一路到我的家。也有人在做这方面的研究。刚才提到存证,也是除了金融之外的一个应用。
Jan :还有版权管理。能否用区块链阻止盗版?这个是不可能的。盗版不是区块链能阻止的,但是区块链能解决谁是正版,这是两个问题。
Terry :这个的本质和上一个是一样的,确定这个是不是真货。
Jan :对,只不过一个是在消费品上,一个是在真正的产权上。但真正的像物联网和版权这样的我觉得要真正落地还比较难,目前落地最快的就是存证和金融。除了这些严肃方向,还有人在以太坊上做了一个百万格子的项目,
Terry :当年放那个广告项目?
Jan :对, 80 后都知道。当年有一个人做了一个单一的页面,上面做了一百万个格子,每个格子上一美元可以放广告,有人把这个移植到以太坊上。在以太坊上也是同样的道理,有人做了一个(Etherboard)[
http://etherboard.io/]但是你买下的格子可以被另一个人又买走,如果他又买走了,他的钱付给上一个买这个格子的人。
Terry :做的人只能卖第一次?
Jan :对
Terry :所以他的这个是真正的卖给了下一个人。
Jan :因为区块链上很容易实现价值的转移,所以任意两个人很容易做这样的交易。
Terry :很好玩啊,还有什么?
Jan :有人在以太坊上做了一个庞氏骗局。网页的名字就叫庞氏骗局,旁边写了一个规则:如果你给我打币,每一个给我转钱的人都可以得到后面的人的转账。真的有人去玩,就可以理解国内为什么有这么多传销,大家知道他是传销,只不过觉得没关系而已。
Terry :所以传销的人可以利用它把规则写的很公平。
Jan :这还是一个规则特别透明的传销。
Terry :不是鼓励大家传销!所以像快播老总说的技术本身是没有罪的,但是这个东西本身的出现会被搞传销的人利用。我们只是探讨技术的!
Jan :对于程序员来说,也有一些很有意思的纯技术方向,比如随机数。这次黑客马拉松一个得奖项目就是做随机数,我们的朋友 youcai 也在做随机数叫 RANDAO 。解释一下为什么区块链上的随机数很重要,因为区块链是一个程序,上面的东西是确定的,很难产生随机数。比如 POW 里去挖矿要找一个随机数, nonce 就是一个随机数。就拿上一块的 nonce 做随机数不就好了?其实是有问题的,设想如果负责出块的矿工参与了某个赌博,如果赢了可以获得 1 万个币的奖励,他可以决定随机数是什么。我找的一个 nonce ,但是这个 nonce 会导致我输掉这个赌局,就放弃这个块,找下一个 nonce 直到找到可以赢的为止。最坏的情况也不过是别人找到这个块,让我输掉这个赌局,那我肯定是继续找。这个想法是不行的,如果大家有兴趣的话可以去看看 RANDAO 或者黑客马拉松得奖的那个项目他们是怎么设计算法的,怎样在区块链上产生一个可信任的随机数。
Terry :如果有了的话,抢红包的 APP 就可以做了。
Jan :对,随机数是很多程序的根本,特别是赌博网站。所有的这些程序都依赖一个真正的随机数,
Terry :所以这里产生的是一个可信任的随机数,真正的随机数在计算机世界里很难产生。 OK ,有趣的项目介绍完了吗?
Jan :另外一个项目做的是定时任务。区块链实际上是一个 replicated state machine ,是一个状态机,你要给一个 event ,它来做反应和处理。如果是一个定时任务的话没有人发 event ,需要自发执行。而区块链上没有这样的机制,所以这个定时任务需要一个合约、一个 DAO 机制去实现。这里可能会涉及到经济激励,要怎么保证它不会拖一个小时触发。以太坊上有一个叫 Alarm clock 的项目,它有一套完整的规则和智能合约。在以太坊上就能实现这个。大家有兴趣可以去研究一下这个,也很有意思。
Terry :所以作为一个普通开发者,感觉以前做一个程序是想算法,现在除了算法之外还有规则,有可能还有经济激励,成了更复杂的过程。
Jan :对,所以为什么大家能感觉到在区块链上写程序有很多限制,这两个就是很好的限制。随机数和定时控制这两个很重要的部分都要想办法去实现。
Terry :又一种回到了大神云集的 90 年代的感觉,还有很多基础的工作要做。我们介绍了一些行业落地和一些有趣的项目,当然我们在这说了这么多个行业也只是我们俩的短见,也有很多我们都看不到的。所以这是我们这个节目这么多程序员有不同的背景就可以看到不同的东西,我们说的只是一部分,可能你比我们看的更清楚。你研究之后愿意分享可以分享给我们,愿意自己做也可以自己做,这里有很多市场。
Jan :对,这也是我来介绍区块链的目的。希望有不同背景不同行业的人知道有区块链这个东西后,怎样和自己行业结合来解决自己行业里的一些问题。
Terry :我们听众有些是做 web ,有些是前端或者 mobile 的,我没有可以落地的那怎样参与到当中来 /?可以做什么事情?
Jan :我觉得如果你是开发者的话,可以去学习以太坊上智能合约怎么写,编程。去看看 solidity 语言的语法怎么写,然后自己动手去写一个小的 DAPP 之类的。
Terry :先去理解,万一用到有用的场景说不定就用到了。所以可以去学习一下这些东西。
我们聊了这么多区块链的技术,包括我自己也是有体验过有写过,除了酸爽之外,在整个开发平台上除了体验外,还有什么短板吗?
Jan :几个方面,一个是隐私。因为公有链是无法保存隐私数据,同态加密是一个方向,但目前不实用。另外一个,可伸缩性 scalability 。如最近比特币闹得比较大的扩容问题, Mike 也是因为在扩容问题上发了一篇文章。怎样解决比特币和其他区块链可伸缩性的问题。现在的一些提法是 lightning network 和 State Channels ,以及以太坊 2.0 这种 sharding 、 Casper ,有很多人在研究这个方向的问题。还有存储层上的问题,因为存储容量的限制想存个电影也不太现实,也有很多团队在做 IPFS , swarm , storj ,他们都是想做一个把闲散空间利用起来的存储层,利用空闲硬盘上传区块链上的大文件,让大文件分散加密的存在硬盘里,然后这些贡献空闲硬盘的人可以获得经济奖励。 IPFS 是不带经济层的,无经济激励,跑一个节点是自愿的,但无法维持下去。 Swarm 是尝试在以太坊上写一个智能合约,给 IPFS 加入这个经济激励。所以 swarm 是基于 IPFS 的项目,两个合起来可以为以太坊提供一个存储层的解决方案。 Storj 是另外的独立项目,提供一个带经济激励的存储层的解决方案。
Terry :这些都还在开发当中?
Jan :对,开发当中。但 IPFS 已经独立出来,我觉得可以用了。最后还有一个点,区块链上很多项目太依赖经济激励了,一旦出现什么问题就想能否用经济激励来解决问题,而非从算法解决。有点这个苗头,走向另外一个极端。
Terry :所以是我们很难去改变它的。
Jan :对,想问题的时候先想一些不要经济激励就能解决的方法,这些是最数学最纯粹的方法。
Terry :首先我们是程序员,其次去考虑经济激励。我们今天聊的内容差不多了,大家有兴趣的可以去社区看看。我想问一下 Jan 我们有没有可能把 Vitalik 请到节目聊天?
Jan :好啊!
Terry :到时候我们俩来做采访!
Jan :可以啊!
Terry :今天节目进行到这里。接下来到 picks 环节, Jan 有什么要 picks 的吗?
Jan :我给大家介绍一个网站吧,就是我们
ethfans.org ,它是一个介绍以太坊最新资讯和技术的新闻站和论坛。
Terry :大家猜一下这个网站是用什么软件改的?(笑)
Jan :(笑)
Terry :当时 Jan 做出来之后很开心的说你猜使用什么写的,然后点开一个页面,发现是用 RubyChina 。
Jan :谢谢华顺做了这么棒一个项目。
Terry :我的 pick 是给大家推荐一个 Mac 软件,是一个叫 cloudmagic 的软件,是一个 email 客户端。发现 cloudmagic 感觉不错,走的是极简风用起来很顺手。推荐大家可以使用一下,那我们今天的节目就到这里了,最后在祝愿 teahour 三岁生日快乐! happy birthday !
Jan : wow !
Terry :这是我们年前最后一期节目,给大家拜个早年,我祝大家猴年都没有 bug 。
Jan :那我就祝大家如果有 bug 的话,都能把 bug 说成 feature 吧!
Terry : Bye
Jan : Bye