我们来看一下DAPP应该具备什么样的条件(来自于Oreilly《去中心化应用》):
1. 开源
2. 内部货币
3. 去中心化共识
4. 没有中心失效点
如果一个DAPP的逻辑是通过区块链上的智能合约实现的,那么1、3、4就实现了。因为能被区块链执行的智能合约一定是开源的且不可修改的,且逻辑是被所有参与者认可的。而且只要只要有一台矿机还在运行,这个程序就能一直跑下去。至于内部货币这个事情,如果是运行在以太坊的智能合约,一定需要ETH才能使系统运行,因此内部货币也一定存在。
如果我们用以太坊和智能合约来开发一个DAPP,那么应该顺着这个思路往下走。
我们的DAPP是BS还是CS,如果是CS模式即需要服务端主动推送消息的,以太坊不大适合这个模型,因为无论是DAPP如何频繁去取数据,也只能等每次记账时执行。
后端的数据如何存储问题,如果数据很大,应该考虑存储到IPFS这种区块链上,如果很小可以存在以太坊上。
数据来源的问题,如果有外部数据来源,需要选择一个预言机,或者自己实现一个。简单的话就是自己搭个全节点,通过RPC调用把外部数据送到链上。
前端展示不是什么问题,JS可以直接调用智能合约,返回什么显示什么即可。
以太坊不适合开发交互很频繁的程序,更像早期互联网,开发一些并发量不大的信息展示页面。
怎样实现智能合约?
实现智能合约就需要“图灵完备”的计算机编程语言。“图灵完备”这个词大家似乎了解的不多,可以简单地理解为能把世间一切可以计算解决的问题都计算出来的,这样的一种虚拟机或者编程语言就叫图灵完备。
举一个例子说明一下:比如两口做饭的锅,一口锅可以实现一切的烹饪方法煎、炒、蒸、炖、炸、汆、涮、卤等,而另外的一口锅则只能实现蒸和炖,其他的都不能实现,那么前者就是图灵完备的,后者则不是。
智能合约之所以可以在以太坊上完美应用,就是因为以太坊在其区块链上提供了一种近乎图灵完备的计算环境。只要是编程语言能够实现的计算,其都能支持,这也为智能合约在更加广泛的环境中得以应用坚实了基础。
DAPP开发只需要掌握以下三种能力就可以了。
第一,能够正确理解区块链。理解区块链的本质、特点和商业价值,了解分布式、共识机制、密码学、P2P网络的基本概念,对区块链的商业价值和应用场景有一定的认知。
第二,至少熟悉一种开发语言。比如Javascript、C++、Go、Python等。
第三,至少熟悉一种区块链的智能合约开发。比如以太坊、超级账本、EOS等。