干货:教你识别哪些是炒作的伪Dapp
第0章 引言
Dapp这个概念在链圈广泛流传,却说不清道不明,这玩意到底是个啥。
第1章 数据加算法
网上那些乱七八糟的Dapp的定义,什么运行在区块链上,什么关不掉的APP,都太难理解了。我们换个角度来定义。
Dapp的就是“数据+算法”,只要区分清楚数据是什么,算法是什么,就可以定义出一个Dapp。
区块链的本质就是通过特定的算法,将原本无序的数据(交易),变成有序的数据,并且变成是不可篡改的数据。
Dapp也是将特定的数据(交易),通过区块链本身算法,再额外配上Dapp的算法,来得出一些比区块里的数据,更特殊数据。
第2章 数据来自哪里?
Dapp的数据,按道理都应该是来自区块。但现在市面上有些Dapp并不是严格从区块链取数据。
BCH和BSV这两条链上搭建了许多Dapp,它们是遵守数据都取自区块链的。
比如memo.cash,这是一个去中心化的微博。所有通过按照memo.cash这个Dapp的规格来发送的交易,就是一笔100%符合BCH/BSV协议的交易,带一笔Op_return输出。所有这些交易,都是100%存储在BCH/BSV区块链上。Memo.cash并没有从区块链外取任何数据。Memo.cash将这些交易,能算自身的算法,解析成微博的样子,呈现给用户。
ETH上的很多Dapp,数据也都是取自ETH区块链。比如著名的加密猫,所有的数据都是通过符合ETH协议的交易来构造,并且存储在区块里。加密猫这个dapp的算法通过读取区块链上的的这些交易,并解析成用户看的到的各种成色的猫的图片。
ETH的Dapp的数据也有很多是来自链外数据。
EOS上的绝大多数Dapp,数据是同时部分在区块链和部分在链外。比如绝大多数EOS上的博彩游戏,都有一个关键性的数据——随机数,是来自服务器的,这个数据并不是按EOS协议构造出来的。
数据来自链上和链外有什么区别呢?
数据来自链上,就代表了数据是不可删除不可篡改的,这是Dapp真正能去中心化运行的关键。如果Dapp运行的关键数据有来自链外的,那这个运行结果就大大受这个链外数据影响,而链外数据不具备区块链的特性。
但数据只取自区块链,应用场景是相当有限的。因为交易构造数据的能力是被区块链协议限制死了,区块链的性能也限制住了可用的数据量。这也是为什么市面上并没有多少严重遵守只从链上取数据的Dapp,绝大多数都采取了折中的办法,一部分数据来自链上,比如和币相关的数据都是链上,大量带有丰富的特性数据是来自中心服务器。
第3章 算法在哪里?
Dapp的算法是处理数据的那一部分程序。我们要看这些算法存储在哪里,以及被什么物理硬件运行。
BCH/BSV上的Dapp的算法,只可能是由链外的服务器来运行。算法的代码可以存储在链上,也可以只存储在服务器上,或者部分存在链上,部分存在服务器。
BCH/BSV上的Dapp和算法,基本上是不可能由区块链来运行,即矿工是完全不可能来运行这些Dapp的。因为比特币系统的计算功能是一个脚本引擎,可编程性远比虚拟机要小。
比如BSV上最近很火热的BitDb系列Dapp,算法都是跑在设计者的服务器上。
ETH上的Dapp算法,很多是直接运行在区块链上。是由矿工来执行算法的计算。因为ETH系统上部署有虚拟机,可以提供一个完整的计算机的功能。程序员可以编写出一套完全跑在ETH系统上的程序,不需要任何外带服务器。
最著名的Fomo3D就是这样,所有的数据和算法全部100%运行在ETH区块链上。
ETH上还有大量的Dapp的算法是部分在链上,部分在链外,或者完全在链外的。以太坊上的去中心化交易所就是账户系统是在链上,充值是在链上,但撮合引擎是在链外,提现也是由链外往链上提。
EOS上的Dapp和以太坊类似,即可以100%跑在链上,也可以在链外,或者两者都有。
算法在链上或链外,意味着什么呢?
算法代码存储在链上,同时算法还是跑在链上,就意味着算法的不可篡改性得到保证。但同时也意味着算法本身无法更新迭代。如ETH和EOS的部分Dapp那样。最经典的就是Fomo3D,那算法和数据都得到以太坊区块链不可篡改不可删除的保护的。意味着,Dapp的规则不会有任何的改变。
如果算法只是代码存储在链上,但运行在链外。用户就需要额外做一个操作,对比下实际运行的算法是不是和存储在链上的代码是一致的。才能保证算法的不可篡改性。同时这种在链外运行的算法,是可以升级的。
如果算法连代码都不存储在链上,只运行在链外。则算法可变性就更灵活了。
第4章 算法开源可提供可信度
算法存储和运行在区块链上的主要目的就是提高可信度。但绝大多数软件,最好是需要更新换代,只有底层协议才不需要更新换代。而如果将算法跑在链上,那就丧失了更新换代的能力。
这里要说一下EOS,EOS上的合约是可以被覆盖的,这是EOS系统的设定。EOS上的运行在链上的Dapp的算法,也是可以更新换代的。
有没有一种即可提高算法的可信度,又可获得算法更新的办法呢?这就是开源了。但这个可信任度依然要依赖于专业人士的审核,普通用户是不具备这个能力的。
第5章 区块链性能
将算法运行在区块链上,确实很酷,确实不需要开发者搞一台服务器,100%交给区块链上的矿工。但有一个非常残酷的事实,区块链无法同时运行大量的算法。目前的区块链性能压根就不支持同时运行很多的Dapp。
区块链的并行计算能力是相当有限的。这是区块链所有的分布式节点都要达成共识,这一特性决定了的。
以太坊运行加密猫这一个Dapp,在其火爆时,就让以太坊整个网络陷入了拥堵。
这就涉及到一个关键概念,可扩展性。将算法运行在区块链上的方案,是会伤害区块链的可扩展性的,这样的Dapp设计是不可扩展。而将算法运行在链上,则不会伤害区块链的可扩展性。
第6章 Dapp设计原则
现在我们知道了,Dapp=数据+算法。
数据可以全部来自区块链,也可以部分来自区块链。
算法可以完全运行在区块链,也可以运行在链外服务器。
数据100%在链上的Dapp才能获得区块链的去中心化、不可篡改和不可删除这些特性,否则直接使用中心化的服务器APP来设计就好了,没必要用区块链。
数据100%存储在区块链上,算法100%运行在区块链上,这种Dapp肯定不会倒闭。只要设计出来了,就可以永远存活下去。
数据存储在区块链上,算法运行中链外。也可以保证Dapp不会倒闭的。哪怕是现在的开发者不干了,关闭了服务器,别的开发者也是可以重新设计出算法,将数据从区块链上取出来运行。
只要有关键数据不存储在区块链上,那这种Dapp是可以倒闭的,别的开发者是无法恢复的。
算法100%运行在区块链上,这种设计是让区块链不可扩展。只有将算法的运行迁移到链上,一条链上才能并行运行大量的Dapp。
所以我觉得合理的Dapp设计原则是:数据100%在链上,算法100%运行在链外。
第7章 结束语
一不小心又吹了比特币(BTC/BCH/BSV)的简洁设计。