首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dapp发展史

去中心化应用(dApps)越来越受开发者青睐。不像建立在IOS和安卓平台上的传统应用,dApps直接链接用户和开发者,不需要中间人运营管理代码和用户数据。建立dApp不需要批准,没有公司和中心化的组织能够改变平台的规则。如今以太坊上有超过1000个dApps。以太坊是目前最领先的dApp平台。

dApp的后端代码运行在去中心化的点对点网络。而传统app的后端代码运行在中心化的服务器上。dApp有能够用任何编程语言写的前端代码,使得API调用后端。更进一步,它的前端能够运行在例如IPFS这样的去中心化存储上。

传统App的开发和dApp的开发的主要区别

最大的区别在于在被推向生产之前代码能够被仔细检查的程度。在这一方面,dApp的开发更像是硬件的开发而不是软件的开发。在硬件开发过程中,产品推向公众之前必须进行严格的测试和原型制造(rigorous testing and prototyping)。硬件的召回花费大量资金,需要很长时间修复,毁坏制造商的声誉。同样的,在dApp的开发中,智能合约一旦被部署到主网,便不能够改变。一个智能合约的漏洞会使得用户损失资金,毁坏dApp开发者的声誉。

传统App的开发,作为对比,倾向于强调快速迭代(fast iteration cycles)。作为一个开发者,你想要建立一个最小可行产品(minimum viable product)让人们测试,然后尽快释放更新版本的产品。像Facebook这样的传统app有一个座右铭:快速移动并进行突破。而这并不适合dApp开发者。

以太坊作为dApp发展的先锋

以太坊是第一个用图灵完备的语言在区块链上编写智能合约的平台。它很快被采纳为开发dApp的平台。top100的dApps里有91个建立在以太坊上,比一年半前多了76个。以太坊有30倍于其他区块链平台的开发者。

dApp开发的编程语言

Solidity是在以太坊上编程dApp的标准语言。CryptoZombie是一个教程,教你如何用Solidity建立dApps。尽管Solidity语言很流行,但是在语言设计上仍然有很大问题。一些新的正在开发的编程语言会替代Solidity成为编写智能合约的语言。

Vyper是一门实验性质的语言,它比Solidity更简单。Vyper通过使得代码变得人类可读增加了安全性,简易化,可审计性,因此很难写出漏洞的代码。结果是Vyper的使用会有很多限制。它不支持许多Solidity的特性,比如modifiers, class inheritance, inline assembly, operator overloading, recursive calling, infinite-length loops, binary fixed point。

另一门编写以太坊的潜在语言是Simplicity,它在上月斯坦福BPASE会议中被提出。Simplicity解决了Solidity当然4个问题。首先,它避免了因计算资源的成本而产生的服务拒绝。其次,通过静态分析工具约束资源成本,避免了在没有气体的情况下运行智能合约。第三,通过使用Coq,一种形式验证(formal verification)工具,来证明程序的正确性,以此来避免黑客。最后,通过修剪无用的代码来增加隐私性。

考虑到智能合约安全性的重要性,形式验证在dApp的开发中非常普遍。形式验证是检查一个算法是否满足某些逻辑需要的过程。使用例如Isabelle和Coq等形式验证工具,你能证明代码没有漏洞,就像数学家证明理论是正确的一样。

Simplicity属于功能性语言(functional languages,例如Haskell,Clojure,Lisp,OCaml)的家族。功能性语言在开发者中并不流行。事实上Github最流行的15门语言中没有一门是功能性语言。尽管如此,另一个智能合约平台Tezos使用Liquidity的功能性语言来编写智能合约。如果安全性成为以太坊dApps的主要问题,那么功能性语言在今后会变得越来越流行。

dApp开发的开发者工具

有许多编写智能合约的以太坊开发者工具。以下是最流行的一些:

Parity是用Rust语言编写的以太坊客户端。许多项目基于Parity,这就是Paity被黑客攻击后有51万以太坊被冻结的原因。Truffle提供了快速创建,部署,测试dApps的工具。EthPM是以太坊的包管理器(package manager).Oyente是智能合约的静态分析工具,Remix是内置浏览器的Solidity编辑器

除了开发者工具,还有一些专注于智能合约安全性的工具,比如Zeppelin就专注于审计部署在以太坊网络上的智能合约。Zeppelin甚至提供了一个游戏Ethernaut来测试你的智能合约安全性技巧。

对以太坊dApp开发的一点误解

建立在以太坊上的dApp实际上只包含了一点点的智能合约代码。大部分dApps里的智能合约代码只占总代码和总功能的很小比例。智能合约是链上的,意味着代码和区块链直接交互。相比较,链下代码不直接和区块链交互。

比如Storj的智能合约代码只占总代码库的9%.仅仅存在以提供交易的逻辑性。共享文件的存储和加密,节点广播,磁盘使用规则等都不涉及智能合约。解决以上问题的发挥主要功能的代码都是用Node.JS语言写的。

下一代dApp开发平台

以太坊平台上的dApp开发需要学习特定的编程语言比如Solidity。下一代dApp的开发平台允许开发者使用例如Python和JavaScript等传统编程语言

Tendermint/Cosmos

Tendermint由两个组件构成:共识协议引擎(blockchain consensus engine)和通用应用程序接口(generic application interface)。共识协议引擎,被称作Tendermint Core,确保相同的交易被每台机器所记录以相同的顺序为了达到拜占庭容错(BFT,Byzantine Fault Tolerance)。通用应用程序接口,被称作ABIC(application blockchain interface),建立在Tendermint Core之上,使得交易以任何编程语言所处理。

BlockStack

BlockStack是建立dApps的新平台,用户能够拥有自己的数据。在Blockstack上的dApps是链下程序,和BlockStack核心用JSON REST API交流。这些dApps能用任意语言编写,并且BlockStack有一个完整的教程教你如何在平台上建立dApp

以太坊VS下一代dApp平台

网络效应(Network Effects)比编程语言的选择重要的多。对于开发者来说重要的是要最大化dApp使用者的用户基数。大多数开发者会在某个用户数量最多的平台上开发,同样的,更多的用户会涌入拥有最多app的平台。历史已经告诉我们,如果在例如Apple Store,NVIDIA GPUS这些平台上有app开发的充足需求,开发者便愿意学习专有的语言(Objective-C/Swift,CUDA)

考虑到如今的趋势和历史的经验,以太坊依然有先发制人和用户基础的优势。

热搜

专注于技术类文章翻译的币圈自媒体

加密资产基础类设施和公链项目分析

第三代分布式账本技术爱好与研究者

SorosCryptoMania

一个人的命运,除了个人的奋斗,还要看历史的进程

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180315G14M5G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券