Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
前段时间一个以太坊游戏应用:Fomo3D异常火爆,在短短的几天内就吸引了几万的以太币投入游戏,第一轮游戏一个“黑客”用了一个非常巧妙的利用以太坊规则成为了最终赢家,拿走了1万多以太币奖金。
8 D! p% }. |) m  O/ T) B9 g区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。
" r5 b: D0 n1 Q" H. m2 ?  e中心化应用4 R" p* G- d# h% p
作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:: V: Z" w- _1 x( ^
8 n8 V' A  d# B/ q+ s
平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。& r/ [+ l/ F/ l- g% c8 a
去中心化应用DAPP
7 m/ B+ ^* L- @; C8 E+ w; w' [而去中心化应用有什么不同呢? 看看它的架构图:2 J# H" @7 e8 [5 {+ I0 V
- Q/ [9 E  T6 V- R7 B
前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,  [0 ~3 Q" G  B' T& v- ]9 k
从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。
# {( x2 S7 b' t+ L) w! X8 c- U, Q  S如何开发$ n: H% C8 G* p- q& D% O; h  R# O
在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。
  @" a3 p9 _: r6 w4 ^开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。
9 h* [: \. g/ _/ [+ P. B下面是一个对比:
1 q# p( x$ e: _     客户端UI  客户端UI 0 g: u4 R  v: G5 ~
        HTTP  RPC2 z# v7 T6 M6 A. f. c
  后端服务程序  智能合约
$ e; D+ z2 b  p( H8 |1 r$ J, aNginx/Apache  节点: e7 q1 t" R# _2 R+ n
因此对于去中心化应用来说,程序员可以从两个方面切入:+ E( q& o% N1 `# @, ?  a
一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3
% i+ W! V6 K, B. E- U  x, y% ]8 {这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。6 R; |1 z& a4 P4 J6 W9 O
目前的主流语言都有Web3的实现,列举一些实现给大家参考:! X- t3 U: f1 T4 P* x7 a  \9 D
JavaScript Web3.js
, ^! ~% K8 [* M) \1 W) _! YPython Web3.py% ~2 r* i5 b2 [, K8 B4 n! ^5 o
Haskell hs-web3
" x0 p' N1 {' h3 ~Java web3j
2 S' H  c/ }3 pScala web3j-scala
/ G5 O7 Y9 |2 kPurescript purescript-web31 B* _+ ~( T# X, P. T7 t
PHP web3.php
. P  \  T8 C0 r) ?5 h: kPHP ethereum-php
! E, O: b2 h0 c9 Z, P3 G另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,下面用一个Hello合约,体会下Solidity的语法:, B- [9 W! i6 U* j" i1 i8 u
contract Hello {7 L6 g# V# x7 X9 v" P
      function hello() public returns(string) {( l/ {& p3 f2 y0 F  Z  X/ c5 W4 s
           return "Hello World"; ' I8 I$ q7 B6 |$ b3 K, v3 f1 ^( M
      }
8 V9 x& d; L; t! M}
9 E* E3 A# d% {+ a' t+ t) k1 B如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。5 i# G1 ~( w9 ]2 c  l  V
补充
! Y6 L' M. l0 [$ W: V对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11