Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。+ J3 O0 [7 V3 W3 [- M+ e* ? . ?3 n6 x+ i! [2 {# ?" ~3 M 中心化应用 m1 _- [9 _1 ?. `$ \ % k5 [0 A1 Q% d0 d: ?' o作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:9 X6 D8 D8 b$ ^. O) r+ D . Q+ o& c) I( y- L! a 平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。 / M. B- D% M! ?+ y 5 T! \' j# w- f& i3 p& N去中心化应用DAPP# F- g+ m5 o+ _# s6 c1 F 3 U" G8 E9 Z7 x9 U. `# z& `" c 而去中心化应用有什么不同呢? 看看它的架构图: 3 B3 v r/ r: F3 k" k 0 i& T( v, E2 @9 F前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,+ f" h+ V5 @* Q" I5 [ ! j, X3 v! ]: ?! L- e& u 从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。) @9 p* {0 K; t8 \: W * B& M9 }- f$ D如何开发$ W/ o$ C+ G- k! ] ' E; p; k0 j5 J, ~ 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。 % v" o; M9 O# M7 U$ {: I1 X* s: z0 e2 E+ z, N. a 开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。3 M: B# k' P; g- { + l+ O, B9 _ u* ^* I* B. e下面是一个对比: , V, t8 @6 w8 _6 D" e4 ^+ S l3 O: o( M2 a& e5 u9 t0 G/ @ 客户端UI 客户端UI8 F" ]- o) {/ O- P) E1 e 4 p3 v" T- ?+ w- I: [$ S% T HTTP RPC 4 @; ^. d' m5 S, B! n. M, v' C0 B* g$ I 后端服务程序 智能合约6 ^" W } b3 p' T$ l" f O) m( E$ q p* g4 I3 P: E Nginx/Apache 节点4 r6 z% a9 q7 J% E( n & e# S. e0 F! e' U: y 因此对于去中心化应用来说,程序员可以从两个方面切入:7 V; i, e* O( L( w8 t. l+ j ' o3 s! b# f- n# y 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3 0 c9 N% G! J' Z1 N, x* V6 C# k/ b7 a o& k9 Q9 b% C, @! z" X- u8 X7 Q这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。1 K8 H2 B3 h8 r 9 R* [2 G: U! B1 ?0 @" X$ B0 O+ W2 A目前的主流语言都有Web3的实现,列举一些实现给大家参考: @' R' }/ Q- A, O# l O* \& V% [' s% X JavaScript Web3.js ' ~/ @1 m1 G8 M, Z& k$ F' C + c: q5 {" v: a/ HPython Web3.py % B+ I: U0 j/ i9 ^! V% M/ O! ~2 N + F# c U" C# ?' D. d# [Haskell hs-web3 `1 ?, e. N- v- l' n6 X9 | * \! ~, L, o( m. b* O: W! u, SJava web3j$ ]% Q/ @% t s, e: K9 Q 8 n9 \& A+ F' f- t' h Scala web3j-scala: p M3 o0 K- a. {0 ?+ Z - C2 O# i1 J; E5 r& m% F4 pPurescript purescript-web3 * Q4 m3 f/ K4 H. [, m, n- ^3 P t/ P3 y$ U PHP web3.php " G i$ s4 m! A. x K* a3 Y: ?4 N1 s+ v; V% ]6 t PHP ethereum-php 5 q- H& E: Z+ v9 X% Z+ {# F1 e+ X+ J+ [ 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。* V1 K( G* s( h e: Q 7 J+ M2 p% M* b2 w. V5 p" Y下面用一个Hello合约,体会下Solidity的语法: + A) a+ W6 v2 J7 n) P ) z+ u2 y) V# d9 T3 U: W) F3 ^
  1. 9 O" u4 e3 f1 C6 j/ L; f( p# U
  2. <div>contract Hello { 9 U& k6 {& l" i" h& i1 [
  3. function hello() public returns(string) {+ j! D- O6 K* U& I3 E% Y/ Z$ W
  4. return "Hello World";, m4 N7 |% b! U
  5. } 9 {, {: j6 }" ]& p7 i0 r+ n# {, F
  6. }</div>
复制代码
~3 d* {! K* S5 H3 j; }4 b# q 8 {8 Z& _& a' H% e" [- l# [$ R$ r) \5 Y. F$ S 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。 , x$ r3 O7 Q* J4 e7 [% j3 \ . s Q* g6 z. T' A) D! a$ s3 W有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战, 0 i* l& ]( E' _7 o T6 Q, R. W+ b5 I! U5 v1 L1 Z' ^8 u2 L a8 L 在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 0 d% }3 O( ^7 N* C4 v j: y+ E2 `% R补充 # f" U; j+ M; A; |# R8 |; L+ Z% i3 u& r+ C 对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 & j/ H7 \: h1 `) q - C! t/ X8 }' g( {+ Q$ P欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。 # @/ {( C; h! `: m. x8 t 5 S5 i/ E4 |# F) y7 e深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2