Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。2 b9 x e$ |' }6 j 7 y [4 o* n! s& [& T- K 中心化应用' ~: d3 Y; z. n4 p. b2 Y9 ]$ R / ]0 E+ x5 v) H 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图: 7 B7 D+ t) E* _1 P 8 c, `8 l0 V7 W平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。+ b# N, u# M9 E& F - f2 U- g2 S9 ^去中心化应用DAPP2 p8 _+ W, b& m" }- e, w / \. H: S1 L( T+ F而去中心化应用有什么不同呢? 看看它的架构图:0 L: a Q& ], s! K& F! ] o' q + ?5 Y# z- V+ ]* O2 s前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,/ f, S, g0 ^7 J9 d( D5 v' M: w , G+ Y, e2 J4 @5 [从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。* E' l& L4 e r" f% j* O1 n6 B- i , c1 W5 F+ n* M: z- d如何开发 ) l( e, W# y+ V4 t $ d% p% O' L; S* `8 R在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。: A" g2 u" H7 u/ A ( j0 k: W% ]5 h6 R开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 & T! d! p; N ? v 3 z2 r/ U; ?* Z: K$ b下面是一个对比: + H/ T; V$ m/ R. L- v* T. g9 l# } ) Z: u- Y8 Y/ _* G) p8 j; Q+ p! e% J 客户端UI 客户端UI) t! p( R4 A) U1 T1 \ % u! f) K; I/ `# Y HTTP RPC 7 V' o; e1 o- v5 B- H' O& y, [; c$ ]: L 后端服务程序 智能合约 , e* G3 s4 m! }7 K* T: p# ^3 l 1 L m4 h: } c! sNginx/Apache 节点 + V3 ~& h! z( v( R( Q 5 {; [( `& S% L8 _ @, W! n5 e因此对于去中心化应用来说,程序员可以从两个方面切入:. v. U' l( Z4 p9 E# C/ v 1 l0 j& k6 g8 W5 ^2 O A4 s 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3' C) N! C, L5 s* w4 g% y8 D 8 b5 Y$ S# G" w; L8 A 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。 , O* L! K% w" `4 @ + q, W7 R7 J. ?目前的主流语言都有Web3的实现,列举一些实现给大家参考: ' k8 O" s4 b0 ]+ |$ o( |. @3 B1 b' b1 O JavaScript Web3.js" f% l% O7 c) C3 |. d1 p* [ A / |! j) v5 @' \ Python Web3.py % T& |: i0 G) z8 S1 @ # H5 V3 w/ }& O, ~Haskell hs-web32 K5 V* Z* B% } & h# y0 m5 `, M) ? z6 J) I; w5 t+ FJava web3j; ]* L9 H! w" e + s$ N9 T( n% X2 w3 Y; G; z2 oScala web3j-scala) W" J3 i$ d9 ]) k / q- i( f- g" KPurescript purescript-web3. b5 @# ]' i: Y ' D: k6 ]! V2 U9 ?/ R: M PHP web3.php " K& j7 I( D& l& L- z $ S/ b6 ^/ N2 u& H; L7 wPHP ethereum-php" l/ Q7 d! j L- o* d + W) J7 P' H$ W, ?* l: j 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 7 e; b4 e" T& Q# o9 K % f5 M1 Z& p" Z/ X, H7 M' M下面用一个Hello合约,体会下Solidity的语法: 3 ^. G& y" U1 P) ]: p - k9 O( ^1 ?' f9 o" B% I7 |1 ~4 K
  1. & S" n% A7 J% l
  2. <div>contract Hello { * f) p' p$ a$ o' h& U5 a8 @+ }* {, @; \
  3. function hello() public returns(string) {# r! m# S% \9 V
  4. return "Hello World";& ^2 t6 I: G, B5 z
  5. }# r: k$ O% M5 I& r4 y
  6. }</div>
复制代码
. |( T( O7 h8 P4 l$ S, U& F `' M! ~4 {% w : [6 t6 d1 H" P ^% J+ f) p如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。 % U/ D- w- i# b& w' b* Z, R. U0 z) Y$ y& e 有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战, z: e( G! c3 x N& z/ I! o N 9 V ]+ i# K J0 {! x在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 , l/ R& G* r+ c" d2 T V 6 [; k( J3 t% B! Y' k补充 9 g# d9 ?& }6 M' Q3 ]# N7 V 1 ^# J O7 X2 I, m4 M# R, T1 n1 H对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 * [" D) z( `: v* u; Q+ U9 S0 ?1 a$ m( w. y% R) r& ]5 @9 } 欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。+ \$ X) Y3 V2 f) Q/ x; P & e9 Q# F" K) f( ]* b& s深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2