本文首发于深刻浅出区块链社区 原文连接:程序员如何切入区块链去中心化应用开发原文已更新,请读者前往原文阅读php
前段时间一个以太坊游戏应用:Fomo3D异常火爆,在短短的几天内就吸引了几万的以太币投入游戏,第一轮游戏一个“黑客”用了一个很是巧妙的利用以太坊规则成为了最终赢家,拿走了1万多以太币奖金。html
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏可以成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则肯定以后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。前端
做为对比,先来看看中心化应用,其实就是现有的互联网应用,为何它是中心化应用,看看它的架构图: git
平时咱们接触的是应用的前端(或称客户端),前端能够是HTML5的web页面、 小程序、APP, 在前端展示的内容一般发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动做一样也会转化请求发送到服务器,服务器处理以后返回数据到前端。也就是说咱们全部看到的内容或者操做都是中心化的服务器控制,所以说是中心化应用。程序员
而去中心化应用有什么不一样呢? 看看它的架构图: 前端的表现上是同样的, 仍是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不一样,是后端再也不是一个中心化的服务器,而是分布式网络上任意节点,注意能够是 任意一个节点,在应用中给节点发送的请求一般称为 交易,交易和中心化下的请求有几个很大的不一样是:交易的数据通过用户我的签名以后发送到节点,节点收到交易请求以后,会把 请求广播到整个网络,交易在网络达成共识以后,才算是真正的执行(真正其做用的执行不一是链接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时须要注意的地方,github
从节点上得到数据状态(好比交易的结果),通常是经过事件回调来得到。web
在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现经过HTTP请求链接到后端服务程序,后端服务程序运行在服务器上,好比Nginx Apached等等。算法
开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的做用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是经过向节点发起RPC请求完成。小程序
下面是一个对比:后端
客户端UI <=> 客户端UI HTTP <=> RPC 后端服务程序 <=> 智能合约 Nginx/Apache <=> 节点
所以对于去中心化应用来讲,程序员能够从两个方面切入:
一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同窗,只须要了解一下客户端跟区块链节点通讯的API接口,若是是在当前应用最普遍的区块链平台以太坊上开发去中心化应用,那么须要了解Web3 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,好比Web3提供的功能有:获取节点状态,获取帐号信息,调用合约、监听合约事件等等。
目前的主流语言都有Web3的实现,列举一些实现给你们参考:
另外一个切入点是 智能合约的开发,在以太坊如今推荐的语言是Solidity,有一些同窗对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其余语言基础(开发经验)的同窗三五天就能够学会,我也录制了一个视频课程:深刻详解以太坊智能合约语言Solidity。
下面用一个Hello合约,体会下Solidity的语法:
contract Hello { function hello() public returns(string) { return "Hello World"; } }
若是把上面的contract关键字更改成class,就和其余语言定义一个类同样。
有兴趣的同窗能够进一步学习一下这个DApp开发案例Web3与智能合约交互实战,
在DAPP的开发过程当中,一些开发工具能够帮助咱们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用
对于想切入到去中心化应用开发的同窗,对区块链运行的原理了解确定会是加分项,尤为是各种共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各种加密和Hash算法的运用。有一些同窗想作区块链底层开发,对区块链运行的原理则是必须项。
欢迎来知识星球提问,星球内已经汇集了300多位区块链技术爱好者。 深刻浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。