Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。 $ T8 Q% l! h Z$ Q2 {0 j$ S9 k 3 w( l2 N& f2 u m' X( o中心化应用3 j/ Z9 Z4 U% l: Y; A; g: h 7 k/ w' n3 q/ r* l/ L$ F 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图: 7 ^' a" K Z9 a 0 j% b& F# t; O& n( ?" B平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。5 k( M- k9 m( } g/ k " ~7 v8 A8 ^, H9 u! @2 B N去中心化应用DAPP 9 J2 V' _2 A, ]& F; c* T! P: \ 9 M, N S0 G% H9 b9 S而去中心化应用有什么不同呢? 看看它的架构图: 2 a& X; g4 ^ Y% d( s* e! a% L9 o. l( \1 I- H( } 前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方, & P* K# k, @) c0 t/ G& W' r; F: A& ~ , y+ g+ @" F! }从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。9 m) m: G8 Z# q5 G' `/ m$ ^ ; S% ?& X2 \1 D- W7 q 如何开发 1 k( c9 E- f0 d% Y1 R- M/ C* d" k) A2 ` 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。 - T G5 l% H* F7 l& \2 z! R) B7 i5 H; Z# M8 }4 S9 _, R; Z' f 开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 4 G; g/ |8 F/ e) w) v - d/ }- \8 z x9 f! J下面是一个对比:" t5 ?+ @% T* h6 R ! q1 f5 [& b: `1 d0 E \& v 客户端UI 客户端UI4 S2 h8 m2 P+ j2 z( c' s# m 7 J# u% [2 B8 A+ J' u. e$ O7 d HTTP RPC ) k9 E7 ~+ C: c( l N8 X$ } | ) p& h/ {/ Z, E6 `) W g6 ~0 A 后端服务程序 智能合约3 N7 t) ^0 }- y$ X* j$ R $ o$ G/ ~, j/ E, p2 U" e3 ?6 k' t, eNginx/Apache 节点* m! _3 q: R" E p2 {6 R; r7 s : w |0 K; ~+ c% @. i) M) K/ N 因此对于去中心化应用来说,程序员可以从两个方面切入: ^( N* i9 H) z8 h; T0 T7 X# F( d5 c# B' H( X4 ]% X% ^* X# | 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web33 `: a D- c: v0 j* J( a ! t: s" t( Q( B" ^& L7 b' y 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。" u3 e! j# w4 W7 G7 Q& _ ' U& R7 y% E* }' n( L7 {* A C目前的主流语言都有Web3的实现,列举一些实现给大家参考:" @2 N/ R( u& A Q4 J6 w+ N # s5 B- n/ y }. A. {0 M JavaScript Web3.js+ n$ P* k+ @4 j% e4 U. s1 B% a ; O+ y3 ^, G$ d5 {Python Web3.py ( r9 M& x. s7 g7 }( Y % I5 v: ~7 Z5 S7 j) ?* t! i+ W3 }Haskell hs-web3 4 l b; F+ L; ~ r0 c h) F0 { 3 x# e1 i' B ]+ i1 M% d% q4 t' _# JJava web3j5 P' v* z, i* \ 8 }/ }6 B& |0 P( ` Scala web3j-scala " v8 l5 ]/ b9 D0 m+ v- l! t ; K" N/ u7 N8 h! U- TPurescript purescript-web3 4 E( j, l) B( U, J* g. g) g( Z/ z ' ], ]0 u3 F3 p' C" ePHP web3.php & m. @1 Y! {9 p( }0 k: S5 X7 w3 \* U' m. T) h# n8 x PHP ethereum-php & W, ]5 O. W- o! G$ Q( p3 S" X! {% Z1 C) f 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。7 V7 d- M! c0 B* s2 f 7 O: i2 i; s, k 下面用一个Hello合约,体会下Solidity的语法:) g% s8 ]6 ^: |! Q8 b: Y 4 l5 c# w0 F+ v, q
  1. 4 ?3 Y/ i8 d( P+ B7 S* v
  2. <div>contract Hello { ' g) w( C6 O: D! i: _& Z+ d9 @7 q
  3. function hello() public returns(string) { 4 N2 H9 W( p2 W% M5 r$ F$ i9 ?# l
  4. return "Hello World"; " m3 l: A2 ~7 O7 @ T2 C
  5. }2 ~9 d ^5 z- `* v. W/ |
  6. }</div>
复制代码
2 u8 z# D$ C+ L+ z9 e* q$ E3 ? p- k& U& O% K: d" j, y * s% [& _6 m+ A8 c; Y u( U 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。2 }5 ^- b( Q0 m8 f+ s+ ^1 a 2 j" p3 r% M' E' ]! L9 h. g 有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,3 E* M. S9 Q' L4 ~ 1 U& J! n3 F6 k' L D6 a在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 - u* j% X2 ~/ \0 u; K+ E( V. O$ O+ a# d$ U/ \ 补充 % Y2 r9 S: o8 B% u# c & P' y1 q3 j/ M* \9 c X对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 " d: {* |4 L( Y# r6 q6 o3 k& Z5 ]; F1 I1 y* |0 M# [' a 欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。 # ?7 Z/ r* L, _5 w 1 M% x0 _4 G v( ~& }1 g. f! u深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2