Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。/ e1 f9 O; Z* `1 Q 0 J; n: _& [# [9 ?+ v3 x8 K" Z2 g 中心化应用2 v* r. q4 l6 P7 s 0 r4 O% K* F; @ 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:' {1 l8 c5 Z2 K( O. i% Y 1 d/ s9 I3 | I K 平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。& H$ Y/ y& P1 a# V% { & L$ x9 j. M: C0 i2 v 去中心化应用DAPP* u# Z; m) G6 O" x9 \ # H' r6 v: \! O9 g: X' a而去中心化应用有什么不同呢? 看看它的架构图:2 R. ]8 _% T$ B/ ^( Z7 i+ S6 h ' C% L3 u' f0 ] j# O0 \前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方, " f! O: W* f" S; x8 I% D" t2 C# A. O& p `' u3 S1 B: m8 ` 从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。 3 G2 K3 B& }7 N. ^2 P* [: I; F' t6 v' u1 S6 t. _5 Q$ c 如何开发 3 H( K3 ]' w3 \ |, ^/ m( ?' Y$ n( w. w4 C3 Z. m 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。 5 i; u% d1 [ E4 Z7 _8 N0 I5 ?) t* K+ l, B1 B6 `" [ 开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。- G' W8 M/ [3 ]: ^" I0 B 0 u/ w# F5 } C( v' ~' G% i6 d 下面是一个对比: . i# C) H' f5 m- d 0 L7 K' b* A+ v( a 客户端UI 客户端UI " o0 A& H3 Y7 N" s) F* s4 x& j; S% ~) ?5 C HTTP RPC 3 x. b: t; q9 Q0 F) p0 W3 Y) M' {# I9 G$ g 后端服务程序 智能合约& K9 z+ g* m, @/ x+ G5 K . q, s3 u" z& M3 b2 y6 |4 BNginx/Apache 节点 , o. a( ~4 x: ~0 n% H / q) G, M) i6 R. N; D4 S/ Q因此对于去中心化应用来说,程序员可以从两个方面切入: $ G# b A. F! Y7 R% H( G& K7 u0 p' X! u0 P4 @ 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3 X( Q; r" v/ g9 o1 A9 M7 g 2 \6 k' ?9 _& g这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。6 v* t) I2 m2 x+ A1 E' Y9 ~ % S% c& J r+ S2 n. | 目前的主流语言都有Web3的实现,列举一些实现给大家参考: , Y9 Y$ B# S3 Q4 F 1 D7 ^+ s! h# _2 O! A9 E+ LJavaScript Web3.js 3 h& Y, y# c* J- s5 J) X0 w % w- q* J+ E, u7 ? m, b& kPython Web3.py4 {- i% S, _3 A+ F# ~6 a & I+ u8 t+ ]8 G: G" O) @ Haskell hs-web3) O% s. o5 f* T5 k [* F b; t5 z0 J: L( h Java web3j & X* R) n8 D- R; l5 C: c$ N3 F * q" h' A* ^3 _3 m4 OScala web3j-scala % m0 c0 t4 b1 {9 M0 F- r% b5 e U! c, Q% ^( b) u6 F, A Purescript purescript-web3 : e5 n+ K7 N% d" Z+ p' L: l& l* w3 u( T! u7 A: x* m: J' a PHP web3.php $ Y2 \& G* E$ h+ R8 A {8 ^" O3 g ^) e% o0 ?5 A0 K! e0 | PHP ethereum-php3 J" w1 y2 m0 ? . d8 O0 @7 \/ d# `9 E 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 & P5 c- {/ ~5 _% b& \ 7 q! E/ K( t4 ~- N; s3 B: w2 s下面用一个Hello合约,体会下Solidity的语法:4 s: i+ b* a) U * I8 s: b. U/ N2 Z+ T C% n
  1. " j' w% _- Z% L% X, b
  2. <div>contract Hello {4 Q3 Z: w4 w8 g
  3. function hello() public returns(string) { 3 t! X7 A5 K8 M& @- _
  4. return "Hello World"; - U9 j1 Q z6 |' \& |- N
  5. } 6 Y9 |4 O/ q- [4 @9 S
  6. }</div>
复制代码
( k; r# L$ D- H6 E( m8 J) }% p8 [ & k4 F, K2 Y, K0 i. p& e/ T7 j1 q& Z 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。) {' h: p# O9 h9 @, g' N / O- o v% R, [( q: A2 X 有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战, 4 Q3 G0 Y2 y( ^# v/ Y . Q# D* b r* U2 q3 J* s在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 ( @) G* l1 A( X. o( E* f4 Z 1 K" k; _5 A& z/ h补充2 x& G. j+ b4 c' ? % g. Z% u L1 t0 j对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。2 O$ N4 t/ s( Q2 o , u) A `: A& H4 q) @' ~4 W- y+ t8 \欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。 ' k+ o" t' Z8 r6 B) w2 \% u1 J" U% D' Z# u* u8 A! Y7 ?; H 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2