dApp开发简述

全世界的开发人员对去中心化应用(dApps)越来越感兴趣。与在iOS和Android等平台上构建的传统应用程序不同,dApp可以直接连接用户和开发人员,而无需中间人来托管和管理代码和用户数据。构建dApp不需要权限,也没有可以更改平台规则的公司或集中人员组。今天,在领先的dApp平台以太坊上构建了超过1000个dApp。

dApp的后端代码在去中心化的对等网络上运行。将此与后端代码在集中式服务器上运行的应用程序进行对比。 dApp可以使用任何编程语言编写其前端代码,以便对其后端进行API调用。此外,它的前端可以托管在分布式存储上,例如IPFS。

作为dApps的新手,开始的前景可能让人感到畏惧。这篇文章的目的是为新人提供当前景观的全貌。

传统应用开发与dApp开发的关键区别

dApp开发与传统应用程序开发之间的最大区别在于,在将代码推向生产之前必须仔细检查代码的严格程度。在这方面,dApp开发实际上更像是硬件开发而不是软件开发。在硬件开发中,需要在向公众提供产品之前进行严格的测试和原型设计。硬件召回需要花费大量资金,需要很长时间才能修复,并损害了制造商的声誉。同样,在dApp开发中,智能合约一旦在主网上启动就无法更改。智能合约中的一个错误会丢失用户的资金并损害dApp开发人员的声誉。

相比之下,传统的应用程序开发往往强调快速迭代周期作为最佳实践。作为开发人员,您希望构建最低可行性产品,让人们测试产品,并尽快发布更新版本。像Facebook这样的传统应用程序的座右铭是“快速移动并破坏事物”,这并不是dApp开发的最佳座右铭。

在活动和思想共享方面,以太坊目前是主导的dApp平台

以太坊是dApp运动的先锋

以太坊是第一个基于区块链的主要平台,用于构建图灵完整语言,用于编写区块链智能合约,并迅速成为dApp开发的首选平台。 前100个dApp中有91个基于以太坊,比半年前的76个还多。 以太坊的开发人员数量也是下一个区块链社区的30倍。

dApp开发的编程语言

Solidity是在以太坊上编程dApp的标准语言。 CryptoZombies是一个很棒的教程,它教你如何开始在Solidity中构建dApps。

尽管Solidity很受欢迎,但其语言设计存在许多问题。目前正在开发的几种新的编程语言可以成为编程智能合约的Solidity的替代品。

Vyper是一种比Solidity简单得多的实验语言。 Vyper通过使代码尽可能易读,从而提高安全性,简单性和可审计性,从而使编写错误代码变得困难。因此,Vyper在其能力方面受到的限制更为有限。它不支持Solidity的许多功能,例如修饰符,类继承,内联汇编,运算符重载,递归调用,无限长循环和二进制不动点。

以太坊的另一种潜在语言是Simplicity,这是上个月在斯坦福BPASE大会上提出的。简单性解决了四个问题。首先,Simplicity通过计算程序的资源成本来避免拒绝服务。其次,Simplicity通过使用静态分析工具来限制资源成本,从而避免耗尽气体。第三,Simplicity通过使用Coq(一种正式的验证工具)来证明程序的正确性,从而避免了攻击。最后,Simplicity通过在区块链出现之前修剪未使用的代码来增加隐私。

鉴于安全性在智能合约中的重要性,正式验证在dApp开发中比在传统应用程序开发中更常见。形式验证是检查算法是否满足某些逻辑要求的过程。使用像Isabelle和Coq这样的形式验证工具,您可以证明代码是无错误的,就像数学家如何证明定理是真的一样。

简单属于函数式语言系列(Haskell,Clojure,Lisp,OCaml等)。功能语言通常不受开发人员的欢迎;事实上,Github上排名前15位最流行的语言都不是函数式语言。尽管如此,另一个dApp平台Tezos使用功能语言Liquidity来编写智能合约。如果安全性成为以太坊dApps的主要问题,那么功能语言将来会变得更加流行。

用于dApp开发的开发人员工具

有许多用于编程智能合约的以太坊开发工具。 以下是一些最受欢迎的工具: Parity是一个用新的低级语言Rust编写的以太坊客户端。 很多项目依赖于这个工具,因此Parity Wallet hack导致514k ETH被冻结的原因。 Truffle提供快速创建,编译,部署和测试dApp的工具。 EthPM是以太坊的软件包管理器,Oyente是智能合约的静态分析工具,Remix是浏览器内的Solidity编辑器和编译器。

除了开发人员工具之外,还有智能合约安全性的最佳实践,以及Zeppelin等服务,用于审核部署在以太坊测试网络上的智能合约。 Zeppelin甚至还提供了一个游戏Ethernaut来测试您的智能合约安全技能。

关于以太坊dApp开发的误解

在以太坊上构建的dApp实际上包含非常少的智能合约代码。 在大多数dApp的宏伟计划中,智能合约占整个代码库及其功能的一小部分。 智能合约是链上的,这意味着代码直接与区块链交互。 相反,离线代码不直接与区块链交互。

就Storj而言,智能合约仅占整个代码库的9%,仅用于为交易提供逻辑。 没有用于存储和加密共享文件,广播节点或光盘使用规则的代码。 处理上述组件的功能代码库位于NodeJS编写的单独存储库中。 同样,在Golem的情况下,智能合约仅占代码库的3%,而完成所有繁重工作的代码库都是用Python编写的。

下一代dApp平台

在以太坊上开发dApp需要学习自定义编程语言。有下一代dApp平台允许您使用Python和JavaScript等传统语言进行开发,作为主要区别。

Tendermint / Cosmos

Tendermint由两部分组成:区块链共识引擎和通用应用程序接口。称为Tendermint Core的共识引擎确保以相同的顺序在每台机器上记录相同的事务,以实现拜占庭容错。应用程序界面称为应用程序区块链接口(ABCI),构建于Tendermint Core之上,可以使用任何编程语言处理事务。

Cosmos是一个基于Tendermint的平台,允许您使用任何编程语言在不同的区块链之间构建可互操作的dApp。如果您的应用程序需要主权和灵活性,那么您可以开发自己的区块链,而无需处理复杂的网络和共识部分的软件。相比之下,如果您的应用程序规模较小并且不需要自己的区块链,那么您可以在Ethermint上进行开发,让您可以完成以太网所做的一切,但性能更快。

Blockstack

Blockstack是用于构建用户拥有其个人数据的dApp的新平台。 Blockstack上的dApp是使用JSON REST API与底层Blockstack Core通信的脱链程序。 这些dApp可以用您想要的任何语言编写,Blockstack有一个很棒的教程,可以教您如何在其平台上构建dApp。

Neo

另一个区块链Neo提供对Python,Java和C#的支持,最终将支持在其平台上用JavaScript,Golang和C / C ++编写的程序。 Neo将这些语言编译为Neo虚拟机的指令。 凭借多语言支持,它为90%以上的开发人员提供服务,而无需学习新语言。

以太坊与下一代dApp平台向前发展

如果你是一个新的开发人员,你当然应该自己评估一下,但在我看来,编程语言的选择不太可能成为大多数关于是否在以太坊,Cosmos,Blockstack,Neo上构建dApp的决定性因素,或其他平台。 网络效果通常比编程语言的选择重要得多 - 您希望首先最大化dApp的用户数量。如果拥有最多用户,大多数开发人员将在某个平台上构建应用程序,同样会有更多用户涌入具有最多应用程序的平台。历史还表明,如果对此类平台(Apple Store,NVIDIA GPU)上的应用程序有足够的需求,开发人员愿意学习专有语言(Objective-C / Swift,CUDA)。鉴于今天的趋势和历史数据,以太坊可能成为统治dApp开发的唯一链条。 注意:可扩展性和治理是本文范围之外的考虑因素,可能成为未来构建下一代区块链的理由。今天,开发者体验+以太坊的网络效应相对于现有的替代方案是无与伦比的。

一些额外的资源

以太坊开发演练(第1-5部分):以太坊和dApps的背景

CryptoZombies:交互式代码学校,可以帮助您快速开始使用dApps

ethereum@StackExchange:有用的社区,可快速回答问题

以太坊游戏开发者在一天内赚取超过500,000美元:这篇文章展示了dApp开发激励的承诺