Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。 # o- g8 z. `& u5 ?) S. x& P / x4 C. J, O# y* B& | h中心化应用$ `! A Y. |- \! L6 T5 c7 S ) d! k6 K! b$ ~! ?作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:+ C" H* v+ D( [1 H) e+ d ; Y2 S$ n# }' Q* w: q平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。4 V8 y, N% G# Y4 o& `1 a6 S+ G; d t: D: ^3 s' [5 x0 Z& N; Q& h; e, F去中心化应用DAPP , `4 w( x0 ]9 w% t; ?/ \# T+ W) _. N# n6 [! R: w( S& C5 m. X2 U( I 而去中心化应用有什么不同呢? 看看它的架构图:7 P: ]- ^" c1 E& F q+ |) B- x" C7 x ~: E4 e前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,/ l* }8 v3 u' D5 S/ c$ ]& g1 V : Q6 P! [* `9 ~3 y7 b W从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。 " [! e ?% `: x ' J+ T' ~8 V+ @ r4 E0 a如何开发 ' T- Z& Z3 C. L* v( E. a) |7 O 4 {( l5 c1 c' c ~) K6 H7 l' S在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。" [* F& {. e8 X) e, V % V( u# Z! D2 G" s 开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。/ f, D) I# G3 P# V' b, e 7 T- r$ }2 R( N1 q8 o; l$ f- b 下面是一个对比: " \' ~7 G( s" Y1 G + S ?# D; D% ?% `1 v }. [- R 客户端UI 客户端UI$ ] M; N& H4 ]& c5 H / ` o3 ]: d% i; ~. W; F% X HTTP RPC. N$ ^ Y( V7 w3 e( a/ `# [ . \' R( W6 G3 Q" I; w0 T 后端服务程序 智能合约* f5 P/ a) {" e6 f+ _" z 9 h0 ~6 Q; E- h- y5 A( K6 | Nginx/Apache 节点3 g/ `- i0 ]' H . _$ G; N% K" V9 W" w; Q; T 因此对于去中心化应用来说,程序员可以从两个方面切入: & v j* }9 x0 S; {: V1 v* J$ O8 U1 L * D5 r$ x$ h. d* c一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3" G P" x1 Q9 ]9 C # ~$ x' r4 ^& o" @" K$ X2 S这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。* g5 L% @, G# P & H+ b4 P& a( o: o0 `; | 目前的主流语言都有Web3的实现,列举一些实现给大家参考: 7 ]/ n3 O/ T- B4 ~ a, {1 W) X+ V! N: a( s8 T9 b7 X" S JavaScript Web3.js ( A% k5 e# \% ]2 T9 p( i' p( s# ~9 R Python Web3.py 5 e2 t' I o$ u, g0 r" w) ~) S 3 d3 d" [* M' F J+ }5 nHaskell hs-web3 0 S5 s/ ~. K w- {7 L( T! b9 S- {8 u, A, {% Z Java web3j! Q8 Q. w0 Y0 g- R) q7 _ - ^( _* |+ a1 G, i1 t Scala web3j-scala+ p* D7 E' s$ q; _ : \# x( l# o0 ]$ r Purescript purescript-web3$ A- h/ {0 G+ [4 y0 T, i4 ^ 0 ^% t/ \ c% F. q; |% CPHP web3.php ( ~2 a4 O4 d/ s% A, f4 t / ^' y% f6 }7 L2 T! K8 nPHP ethereum-php3 H% ^! f- u P; n, }. t6 z : C! ^. @+ O4 s另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 7 t& R1 W! l' E" g" j7 ` . i' e1 O% K6 M! ]( L下面用一个Hello合约,体会下Solidity的语法: " B5 M! k% r8 n* p ) q! {* Z: D B) w" F g
  1. ) n# ~3 W3 f( _
  2. <div>contract Hello { A5 |* A, a. R# y3 w1 i: P$ J
  3. function hello() public returns(string) {7 B7 c) ]0 E1 J( }% B- s- f
  4. return "Hello World";$ Y$ n9 ]: D$ [, p: G
  5. }0 M" F. I' V3 J; |
  6. }</div>
复制代码
/ Y* ?8 x! J a7 A9 m) U( m1 |' _& Q$ G% ~* r) k E7 T. l% s' m $ v" z+ P9 ]3 n/ |* P4 k4 R 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。1 p4 Q1 Z4 w5 D$ h: h ( d ]! f8 q3 a. X" B' C9 k 有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,0 e6 x C+ F# P9 H, }9 \$ D. q. I( ?3 k 3 c. t4 E; P, z在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 q/ u5 k' m/ q2 u+ s) L 9 S0 b& O9 F3 y& f" L: \# ~补充+ P8 Q$ |/ c" V) y# J# h ) g0 |& Y7 Q% V7 @. ]+ J+ W对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 5 ?. Y$ ?( r& P) } * W7 u+ {3 {8 V3 @- ~0 I欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。 - o6 r5 T# @+ _" M5 l ?6 |) k/ ?5 H+ `# e/ @; f 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2