Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。) \' {1 s1 E% M2 ~ [ * z. u9 \: Y; _# G! V 中心化应用 ) w! u5 U: e/ S p B7 L' y/ ?; m; l0 A( e9 \. i 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:, f- Q/ [2 ~- U4 Q# [ + u% j3 S" G# |( Y/ f1 K 平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。 - g$ i+ F! L0 w$ c3 J5 j4 C v! c8 { 去中心化应用DAPP * R, }3 T* s4 [ ! ]& z$ }; }: g9 p+ p9 S而去中心化应用有什么不同呢? 看看它的架构图:& b* J; c; W) y8 p 8 q G% Z5 i* X2 A( n 前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方, : f6 W# t' k$ ] , Y% x; r( Q, F3 @* g从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。9 c) ]) \$ B8 i4 @4 @ 2 w% ]5 }7 a; G4 i% I如何开发/ f( r' M* H2 M ( C& y$ J- e, ^; b( E( {; ] 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。) N5 K; x2 P3 B 5 f9 M+ p8 P5 K& X开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 8 M% g- k! q2 a! u I+ i8 a1 F% P% {7 h' }. [( g1 [7 C 下面是一个对比:7 q5 W. a5 r( w& U% j ' k" a3 y* B' {% F3 q+ I3 F5 v 客户端UI 客户端UI# E E p5 }" \. [2 v 4 O& r/ U* d5 x2 \ HTTP RPC k/ S) @7 d4 z7 ~ * C5 j7 L! p; H7 l: G# ^ 后端服务程序 智能合约 9 v4 L" H1 P* P. c6 `6 ~3 p ' c$ m) |* B) W! QNginx/Apache 节点' _* I: _$ ^1 g3 V4 ~) s ) h5 v, F4 p4 o" M* D1 ~5 S& W 因此对于去中心化应用来说,程序员可以从两个方面切入: : x Q" d! \# g, ^6 E/ u ?: |/ g1 d ?, S5 B一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3, o f/ N$ p' ` g/ O2 { 2 Z: V1 ^3 J, G; v/ Z7 t) Y) a 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。. b6 }- P1 N1 ]8 Q- n K7 ] u% ^ 1 V- W3 g8 h& G B) C- \目前的主流语言都有Web3的实现,列举一些实现给大家参考:( R3 I- j0 k$ U9 R5 _ . U# S' W& b$ Y; |/ ]! b JavaScript Web3.js. W; D) \) }- M" i' V" z, l7 ~ o# R 9 x) t: t7 Q) m+ ?3 iPython Web3.py 3 P& U( B- f0 r( K! W. E5 b# o0 }2 A( y$ i# R Haskell hs-web3 3 ~4 z9 c( N$ w5 d' I 6 v/ e6 c1 V$ xJava web3j + B' E7 x6 Y4 `3 ?# J, G9 e# Y7 y - s/ S$ Q4 C& q4 }8 }; UScala web3j-scala . Q! Y g# _. B5 f + g1 |3 l$ Z; Z: t+ y- |Purescript purescript-web3 ! R* K# m& }; l& p0 O' [2 ?, d7 V3 V+ G$ q9 I3 |6 ? PHP web3.php : U2 W0 d! U: n/ B8 H+ Q: F' q7 {+ K/ q: d% W/ a9 c& S- _ i PHP ethereum-php . h0 h# U6 Z3 V. ]) g( J! J* t' W2 s 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 ; \+ ^5 v5 r+ |" u2 D7 y4 V& F6 i' ~" t& S& s* ~0 n 下面用一个Hello合约,体会下Solidity的语法:3 I2 x, D D* }- ?. m+ S; z m3 l7 M6 z1 n# z1 C$ x
  1. # d# a/ D1 ^* o% V% Y. z
  2. <div>contract Hello { ?/ D$ r: B# m& i" s
  3. function hello() public returns(string) { 7 V: O* d Q/ d0 k
  4. return "Hello World"; . p' U( r7 \/ o( D: C& y
  5. }$ P( G! v3 d* g3 N9 ~: s
  6. }</div>
复制代码
x# L/ P& m# @9 d2 v } e) M: c4 H/ A8 C, Q" U6 Y2 ^: C( {/ c 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。 . P J- x# F/ z+ k0 h, \ . J- f- ~. O) G9 n有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,3 f" n2 E5 e; O# @8 e : ]) c# a% `+ T在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 - ?+ W( @: a( m- o5 _& t: }1 [ L" m+ y, ? 补充 9 G- D/ g* J# r! \- n' B; n" p0 N* M% x& `. m4 m3 D( A 对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 8 S$ C, a, P8 Y b0 e: K# B% R4 P 欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。) @! Q: B+ J3 a6 @' G3 ~ : S! u I1 m" z2 g, |. z' F 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2