Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。 ( |5 G6 s: Z* f6 b# ?6 u 8 I$ u# N0 w6 A2 z中心化应用 1 [! S' a a, @. e+ X( r+ x$ |: d9 F! Q& M; {( ^ 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:! N& o( X0 @, M1 m b 5 O3 {7 p/ o/ }, _2 _" V 平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。 I w/ J) g/ A+ G 5 \2 v3 e& I3 g5 z7 ]去中心化应用DAPP + c: q; B$ O) v4 |, C 3 G4 _2 Q: e( b5 G# {. e而去中心化应用有什么不同呢? 看看它的架构图:4 o5 n9 x5 q$ N2 I " L7 G/ ?& ]+ b前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,0 }" o+ r5 n) Y% b( n _ ' Y( ~$ N6 J. Q* Q- i从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。 , _7 q! o& b: P/ P5 f! ~3 h6 G7 {* a8 @ 如何开发 / _* Z4 d1 i/ ~" v % U% {# Y9 z5 t- c# c h0 k0 V在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。( c$ V* {* z. k0 o 5 g9 w2 q A/ V3 V/ u开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。% K; t0 x8 P5 ]8 @- E4 E 2 S+ L! G2 |! _7 U, p5 J下面是一个对比: , L1 Y) @1 B8 Q4 H: O4 l2 W1 C* W/ c: }6 K, Q( F3 u( n 客户端UI 客户端UI * M ~2 F' L4 N8 c , P, f$ e- ?; w9 j4 l7 G+ z HTTP RPC 1 {& f1 J6 Q- i" T4 _0 o. b( C- ~ 0 P, Q% [# Y1 |' j8 L$ ] 后端服务程序 智能合约 $ i1 J0 @# M3 }9 Q' U + ?, o/ N' i+ h6 zNginx/Apache 节点4 C4 I# H( M+ @1 f6 c/ M S 0 L1 ]/ m9 f& x8 N4 \因此对于去中心化应用来说,程序员可以从两个方面切入:. F/ F; D8 K) x0 z ) g2 _% X4 I/ @/ G4 n6 j* I 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3+ G) I1 {$ Q& s1 }7 C 9 i; v/ X$ @) @& ] 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。 4 g! t+ o% F2 \4 N+ U1 I: s! t! K5 f G! o- p/ O4 J 目前的主流语言都有Web3的实现,列举一些实现给大家参考:" s% T! J }9 v& d8 [5 Q2 s ! Q9 {) u# K, [+ K6 p2 ^# QJavaScript Web3.js7 j! o* Z' [ h ! w2 {* d: I9 H3 F0 nPython Web3.py0 A" P% i; S- y# A' F # R( `7 ~4 w) d0 D* qHaskell hs-web3 6 P' r7 d" v, Z4 n$ g+ s, z' L3 o( K6 J7 n' h4 H( p" ]+ I Java web3j P0 o4 [0 n/ T3 l9 n4 I5 S, x- s ^) u" L4 R l Scala web3j-scala( j3 @' v, b% B1 |. C/ c 7 \1 m" [5 T% {; Y# ] Purescript purescript-web3 3 D* W8 w& X* y2 P, _6 Z 2 ?6 v5 W, U/ P7 i6 k0 f9 W1 hPHP web3.php , `; w; n% k1 x, a2 S! a " z E* L7 j" w0 ]! ePHP ethereum-php 9 m) ~: R: S2 k5 Y$ E$ _8 u* N& R3 m9 r5 }- D8 J s3 A4 ` 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 $ w7 P4 [# f, y2 R( O, Z" `" `8 p7 q. t 下面用一个Hello合约,体会下Solidity的语法: : \; @/ a/ R1 X0 A" X+ {' P& H; g8 { ^( L
  1. + x1 y6 Q% z( A8 q3 c9 L
  2. <div>contract Hello { ' y7 d, E: X! X- e0 i# w
  3. function hello() public returns(string) {0 N2 Z, r, B% V5 V2 u8 ~
  4. return "Hello World"; $ j a r6 p$ P+ }
  5. } 4 E" w. m, x+ I# s# P$ Z
  6. }</div>
复制代码
" N; b/ k0 g# \# o4 I& b / M6 k+ R$ }3 |: w6 s; m: b - P+ X& o. P/ j& R 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。 / f7 G7 w5 @9 u% t( n 5 p) N& E5 x- N5 P/ b- n( ~- r# v有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战, ! P" @9 X$ L7 ^. t Z: v- P" e' f在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用! L; U+ t1 k4 j& ~9 E ; S3 O) U8 g; p# `: ^7 `补充8 U9 Q% u: L1 p" g# e6 V, ~ ! \- y! y- N" F! a i4 S 对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 / f q l" y) ]) H9 h Z% F/ K# Q) j# x 欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。' C4 Q+ Y( s. u/ k L* _1 G: C/ M 3 p8 s ^! s9 r& L( W8 F5 ]$ n) X深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2