Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。 & i! ]2 V/ W" S ) T6 t" }" \ a- I中心化应用9 l* D& H8 c4 C a" ] $ K& o4 V, e; [6 B作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图: ) u! L% n/ v1 [2 I& ?/ s* g% B0 N( _ 2 p2 c4 A& L/ Y* a: m* T& l平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。, P& h2 A# L4 Q2 w( P$ S9 H M: d L1 t 2 ^$ v, L: \. `5 _0 V. W: p) I3 z 去中心化应用DAPP % S* j: c4 ?8 H- |# m7 Z9 H$ l 6 N$ D! `, M+ ]6 P3 U# A而去中心化应用有什么不同呢? 看看它的架构图: + c* o# a Y$ ~) m3 b5 E+ B( {# b0 h5 |. S, l8 s# D' E a0 L 前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方, / w6 _+ H& s6 Y- e( U, g* n0 ~" J/ T- K' s* R 从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。 ! w# M- ?( B7 i' @1 t; D" s; R9 O- N' S0 W v0 F 如何开发 / {+ N' u! `/ n* |; n K7 E, X! |! ]3 ~# | 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。 2 p# L/ f" _6 t6 T) z! ] , Z7 h. B! n% S! [5 o开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 " |0 X) T# e; P ?( [6 }3 O, E9 {& q6 K+ _ 下面是一个对比: 4 m: x! f+ ?4 e# [ 4 ]+ |# y5 i% H7 v+ W, |; ^+ D 客户端UI 客户端UI/ w/ e: a3 j# V# p5 A/ e7 X ( \6 [9 A2 ~- K7 B! L4 Q" z% I HTTP RPC# B. x* A" J: \1 c' D* d* b6 G0 O2 ~ ' h0 n a0 C: O4 w* T/ o 后端服务程序 智能合约, o O% l* m0 ] M, X* J0 r, J 3 n6 j! J, D; ], O2 M% t2 MNginx/Apache 节点 : V- `! t+ W) g, e' V $ ^, l+ i! X2 _5 q, F M0 U/ z, p因此对于去中心化应用来说,程序员可以从两个方面切入: ! @' ~1 S. ~" Z h0 Y0 R5 Q+ Q5 T! x# a2 `# c( s- }! f+ @ 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3$ o" H* u9 Q- T O 9 h7 J, Y5 I* {3 P这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。 9 x M- A/ t7 B; T3 j% p+ O5 u+ w) D6 _1 m# U1 g% x; T 目前的主流语言都有Web3的实现,列举一些实现给大家参考:3 i3 t5 q! L5 \' B( m' B8 k8 v 5 P) g$ g( ~+ ~! oJavaScript Web3.js , @" S0 H- n& T. u$ S% B J# ~, a$ |1 S4 S) t8 t& G- p Python Web3.py: T* |$ h. D0 |: u! k u. X3 ]" b; d' m! J7 j0 G2 L Haskell hs-web3 L2 d5 K7 n8 M7 L1 j8 `4 _ ! P$ B9 u! f. r2 \Java web3j, }+ ^5 q! ?3 K" y5 D3 B3 Q7 O / `+ o8 [& [( U2 R Scala web3j-scala s2 F8 t) }' u$ Y- o7 j; T# I# C |" w8 g( q$ G/ |5 v. E Purescript purescript-web33 S; C1 b- u+ h/ V$ D + k% R2 ^( Z2 B: I, x# h1 s PHP web3.php ' t& `; ?1 G2 D1 [7 \( K . m( w" c( @) A; e8 O2 hPHP ethereum-php ! X/ a8 m# T3 w; S- l5 v1 n' I" I: u7 M3 }2 l+ A( {) I$ j 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 5 E: ^5 k! ?$ b1 z% [, @% b m8 E1 e; R5 k, N0 @6 k5 ^3 `' o- T& d 下面用一个Hello合约,体会下Solidity的语法:. @1 Q; `/ J- v 2 s" @8 M, _2 Z, f2 I) J
  1. 0 i& P7 e; s( S5 `# ?) Y3 F- N
  2. <div>contract Hello { ' Q6 f: D/ B* ^8 N& W% B" j
  3. function hello() public returns(string) { 6 U) C5 m6 k/ s7 _" z
  4. return "Hello World"; # a3 {4 O& k% F* Z; {6 y0 z8 |
  5. } 0 y5 t2 Y+ q2 X# L9 N
  6. }</div>
复制代码
" K/ ?1 Y/ s/ M/ Z7 Z* N0 S! i% S0 ]2 f & K% ^) h; C" o) k+ b! R! I' `( J8 r0 L/ A; j* q 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。 ' H, z) C7 n+ Q3 B! \1 f0 s! C # c" G- e7 A6 ^有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,( G* w! a: ^ F0 Z ( u: `! i" a. F3 ~: k: ~- s 在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用1 H/ `; l4 B2 f; } $ z" u6 h' ]0 e4 ]补充 + O8 R5 q; h+ v1 h J; }! h" `8 a! D$ L% k 对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 3 W$ T" R: ?6 f9 Y |( v. } + V" k5 c6 m7 A: ^欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。1 I1 P; Q, X) B # }' r1 t3 \7 C深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2