区块链大本营

让区块链回归技术和应用的本质,联系我们:heyc@csdn.net。

告别服务器崩溃,数据篡改烦恼:DApp开发者公链选择指南

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Blockchain_lemon/article/details/85822043

640?wx_fmt=gif

640?wx_fmt=jpeg

DApp是指一种新型的基于区块链的分布式应用,其核心代码不运行在某个服务器上,而是运行于区块链共识节点的虚拟机上。DApp的运行基于所属公链的共识机制、合约规范,DApp的代码和数据是链数据的一部分。

不用担心DApp因为某个服务器奔溃而无法使用,也不用担心会被篡改逻辑和数据。实际上,DApp并不仅仅限于智能合约,而是包括智能合约、后台链上链下通讯处理、前台呈现的一系列代码的集合,是一个能提供完整功能的整体。

对于希望投身DApp开发的开发者来说,最关键的一个问题是什么呢?那就是如何选择一个合适的公链。本文将从多个方面介绍公链的选择思路,供广大对DApp开发跃跃欲试的开发者参考。

640?wx_fmt=jpeg


比较公链效率

首先,我们来看公链的共识机制,也就是公链的宪法。它决定了节点间以什么样的方式实现相互信任,什么样的交易操作合法,什么样的交易能够被(优先)打包出块。目前共识机制大体分为几类:PoW工作量证明(BTC、ETH现在)、PoS股权证明(ETH未来)、拜占庭容错类(NEO、EOS)。他们的资源消耗(包括但不限于电力)、参与共识的节点数、相对理论安全性为递减关系,而效率基本为递增关系。

作为DApp来说,一般建议选择效率更高的公链,以获得相对较快的确认速度,进而获得更好的用户体验。DApp一般包含多个方法,需要在一个相对可接受的时间间隔(比如NEO的15-20秒)内相互承接,而并不像BTC一样只做一个最简单的转账处理(所以10分钟问题也不大)。当然无论如何,DApp速度达到和传统App一样的效率是不现实的,因为DApp的主要特性是安全和分布式,而不是效率,所以把区块链简单的当作分布式数据库的开发者将遇到非常大的挑战。

此外,一些公链特有机制也会影响DApp的使用效率。比如EOS的CPU、RAM市场化租用和购买机制,会导致DApp可用资源不确定性,也是公链选择不可忽略的因素。

640?wx_fmt=jpeg


关注公链安全性

安全性方面,我们首先看分叉问题。分叉是区块链世界一个非常有趣的事件,它会导致公链社区分裂为两条或多条发展线。既有人为分叉,也有技术性分叉。人为分叉,比如著名的ETH在 DAO被攻击后分裂出了ETH和ETC两个独立的公链。根据对于不可篡改的信仰,在ETC上所有数据是没有任何回滚的。

但在ETH上,根据作恶应该被制止的原则,被DAO攻击后的数据进行了回滚。除了人为分叉以外,某些类型的共识机制的特性导致的同步问题也会导致分叉。可能A和B在相同时间出了同样高度的块,而作为一条区块链条是不允许出现这种情况的。

此时,就要看谁的块被更多的节点接受,而不被接受的块则成为孤块从而被认为是无效的(这个不被承认的块就成了主线上的一个支叉),这种分叉对于DApp设计的影响可能比认为分叉更大一些。

在选择的时候,你首先要确定你的DApp对于分叉是否敏感,是否会因为分叉而产生运行障碍和安全风险。如果非常敏感,则应该选择从共识机制上避免分叉的公链,而如果并不敏感的话选择面就比较宽。

此外,我们也要看一个公链的安全审计做的如何,其DApp安全审计环境又如何。公链代码本身是DApp安全的第一道墙,如果公链本身存在漏洞,那么DApp再如何设计安全,也是无济于事的。我们建议尽量选择有可靠安全审计的公链,比如是否经过国内外有影响的安全公司(如red4sec等)的安全审计。

如果公链本身安全,我们又要再来回到DApp本身视角。DApp的一大特性就是不可篡改性,也就是即使开发者也不能随意改变智能合约既有的逻辑。即使要改变,一般只能新发一个合约,并通过某种方式迁移旧合约数据。很明显,这个过程是非常繁琐和中长期的,同时处理过程一般也是不得不公开的。

这个特性决定了,DApp一旦被发现存在漏洞,攻击者将有更多时间利用它(比如掏空合约的资金)。所以DApp代码应该被更加严格的反复测试和第三方安全测评。在选择公链的时候,建议首先调查下是否有安全机构提供相关安全审计服务,以及是否丰富与易获得。比如NEO智能合约目前有NEL、red4sec、奇虎360提供合约安全审计服务。

640?wx_fmt=jpeg


注意公链稳定性

在安全性之后,我们要关注的是公链的稳定性,看看是否能够稳定出块,是否会被恶意攻击所影响。一个公链的平均出块时间和平均出块稳定性将影响DApp中的一个操作多久可以完成,以及操作的持续稳定性。比如BTC有10分钟比较难以忍受,但ETH、NEO只有15秒就好得多。

此外,还需要关注公链的网络拥堵应对能力,是否内置有效的防瘫痪攻击机制。如果没有有效的防拥堵机制,将会带来非常严重的安全问题。比如曾有一个知名的游戏,其中一个机制是最后一个参与的人将获得奖励。黑客就利用疯狂发送交易的方式,在他参与后几乎瘫痪了公链,使得他必然为最后一个玩家,而最终获得了奖励。

这里针对公链防拥堵机制举个例子: NEO虽然目前基本交易操作都是免费的(10GAS免费额),但是对于免费交易设置有防拥堵与防滥用机制:当单个区块的交易数达到500时,将限制只打包最早的20个免费交易;当交易池未发送交易达到5万时,将限制免费交易提交。这些措施旨在避免低成本免费(手续费<0.001GAS)交易成为拥堵网络的垃圾交易,保证收费交易优先发送,同时在网络不拥堵的时候又能使得交易免费执行。

640?wx_fmt=jpeg

体验公链易用性

如果一个公链即高效又安全还稳定,那么我们还要看看这个公链的易用性。也就是实现类似的功能逻辑,你需要花费多少学习、实现成本。有的公链有自己的特有语言,如ETH的Solidity。有的公链则直接支持多种常用语言,如我们支持C#、Java、Python、Go等语言。一般,每个公链都会提供智能合约开发工具,但是使用难易也各有不同。

此外还提供VS插件、Nuget包,更加可以选择在线行级云端合约调试排错工具。DApp开发还需要公链生态提供丰富的API和SDK,我们要考察API的规范性、易用性和稳定性。传统程序必须通过API和SDK,才能和公链上的智能合约进行交互通讯,公链节点的通讯接口是公链与链下世界交互的大门。

接下来,是要考虑公链的基础设置是否齐备和丰富。主要是区块浏览器和钱包两大类。区块浏览器一般是直接读取公链节点数据或通过爬取缓存数据将链上数据呈现给用户。它是区块数据对普通用户的一个重要窗口,它可以把区块上面复杂难懂的二进制码变为普通用户易懂的一个个图文信息。

钱包一般分为普通钱包和轻钱包。轻钱包多为Web或移动形式,是不用同步区块数据就能执行操作的钱包。它是区块链和用户的桥梁,用户通过钱包和区块链建立交互操作,用户无论是简单的转账还是复杂的合约调用操作都离不开一个好的钱包。一个DApp一般是一个钱包内部的一个插件,钱包提供地址余额查询、交易签名发送能支持,是DApp的重要伙伴。

例如我们就有官方开发的GUI钱包(普通钱包)、NEL开发的Web钱包(内嵌NNS系列DApp)、COZ开发的Neon桌面轻钱包、O3开发的移动端双平台钱包(支持DApp调用JS包实现钱包基础方法)。

此外技术支持也是必备之物。第一个要看是开发文档的数量、质量、语言,它是为开发者打开DApp开发的大门第一把钥匙。一份好的文档可以帮助新入门开发者少走弯路,帮助老开发者拓展思路。另外,实在来说,对于中国的开发者,一份中文的开发文档总是好过其他语言的。

文档之外,我们还需要动态的技术支持。如果公链有活的技术论坛,我们就可以快速解决文档中缺失或未及时更新的问题,并及时解决我们急需的问题。有些大型的公链项目及其社区,甚至会提供线下、线上技术教学课程,那对开发入门和疑难解答来说更加是如虎添翼了。

以NEO为例,它提供准确完善的中文(当然也有其他语言)文档、有活跃的技术论坛(https://bbs.neldev.net/)、还有和NEL合作定期举行的技术公开课。

最后,我们还要看看公链是否形成了获得广泛共识的通用规范。由于区块链的去中心化文化,区块链中很少有自上而下的规定,更多的是众多社区参与者的共识。所以,能够形成广泛共识的通用规范,意味着这个公链已经相对成熟。同时,通用规范是不同DApp互相兼容、互相交互的基础。

比如,NEP5通证规范,其同意定义了包括余额获取、转账、通知格式等一系列规范,保证我们可以非常方便地用统一的方式处理任意NEP5通证的各种操作,这点非常重要。一个公链的基础通用规范,一般包括私钥的保护机制、钱包格式规范、通用通证规范、合约间调用规范等。我们建议选择,通用规范比较多并已经使用广泛的公链。

640?wx_fmt=jpeg

综合评估公链生态环境

在以上内向化考虑点之外,我也要看看公链的生态发展如何。也就是看公链对DApp开发的支持力度大不大、是否有官方或者专项技术基金、是否提供经常性的有效性的技术支持、是否会定期举办开发者比赛等活动。

目前大多数DApp开发团队或公司多为初创,也因为区块链行业的新兴状态承担着很大的试错风险,非常需要资金的支持。如果公链官方或其生态社区建立有针对DApp优秀项目的基金,甚至那么无论你是否能否享受到都是有巨大助力的。有些大型的公链项目,甚至还会定期组织大型赛事活动,提供该公链的DApp知名度并发掘新兴优秀创意。我们每年定期举办应用开发者大会和游戏开发者大会,展示优秀项目,并对特别优秀的项目进行投资。

针对行业选择方面,各个公链都有自己一定的特色,有些是金融特色,有些是供应链特色,有些是游戏特色,有些是普适的,应该要根据自己应用的特色,选择合适的公链。目前,公链发展呈现两个发展趋势,一个是追求高效化,一个是发展专业化特色化。比如你是金融应用,就应该要以安全为第一要务去选择公链,同时也要关注是否支持高精度数字计算、是否支持数字化身份。而如果是游戏,那么就应该选择TPS高的、支持幂运算的公链。

公链的DApp合约的部署和使用成本也是生态的重要一环。合约部署成本影响你的DApp开发和运营成本,而使用成本则是你DApp的门槛有多高。比如ETH每次发送交易(对DApp来说就是执行方法)都需要一定的ETH作为燃料,而我们则对一般的交易执行免费政策。这样,在相同DApp功能的情况下,用户会更偏向于门槛低的公链平台。

此外公链上DApp质量与种类丰富度,就是公链生态最直观的体现了。质量非常重要,它是公链成熟度的一个标志。如果一个刚起步的公链,其DApp一般都是非常简单的存入和取出数据类应用。而一个成熟的公链,你一定能看到逻辑非常复杂,代码成百上千的合约。

再看合约种类丰富度,则表现了公链的技术延展性。有的公链,设计比较局限,可能只能支持一些特定的简单的应用方向。而一个设计更加包容的公链,则有足够的纵深,支持任意类型的应用——例如具备去中心化交易所NEX、别名服务NNS、稳定币阿基米德、非同质化代币游戏疯狂角斗士等多种类、高质量的应用群。这些应用,对用户是优秀体验,对开发者则是绝好的参考教材。

最后,我们要考察的是公链开发者社区的质量与分布。众人拾柴火焰高,有一个社区一起发展DApp技术,一定比一个人单干效率高得多,走更少的弯路。要看社区分布广度,是某些国家还是全球。要看是否有本地社区,能够实现更加高效的沟通。要看社区是否有高质量的项目,要看社区的活跃度。要看社区的成员质量与数量。

比如NEO既有发源于美国的COZ社区、也有服务国内着眼全球的NEL社区,同时在巴西、俄罗斯等国家和国家也均有技术社区组织。这些组织围绕公链生态发展相互协作、又互有竞争,使得公链生态呈现了百花齐放、百家争鸣的良好态势。

640?wx_fmt=jpeg


结语

目前国内外各公链他方唱罢我登场、八仙过海各显神通,希望本文能够给予小伙伴们以一点点迷雾中的光亮,最终大家都能凭借自己的智慧选择到最合适的公链平台。


作者:刘虔铭(青冥子),新经济实验室NEL(NEO中文技术社区)项目总监,主要负责NEL官方重点项目如轻钱包API、thinSDK、NNS等项目的方案设计、DApp系统合约、后端、前端三层实现规划、核心功能开发、新技术研发等工作。加入NEL之前为上海三甲医院信息工程师,有超过9年的信息化系统建设经验。本科毕业于上海应用技术大学,中国海洋大学项目管理硕士,前医疗信息化工程师。

— END —


640?wx_fmt=png


推荐阅读:



点击“阅读原文”,打开 APP 获取更多干货哟!


好文!必须点好看

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试