Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。- U5 i" I9 } E6 O - C# K1 G) Q5 T- C/ S2 Z 中心化应用 ! s* R- Y4 {' ? ) I5 g" e4 K& v% G+ ?" T作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:- _; t x( `1 L/ Z4 C ; Z- b; H0 i# o. w$ t1 j, j, \% s平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。- ~! \" W, l7 \8 f' Q8 X" p7 A) a( Q / n# ~$ c5 w1 I 去中心化应用DAPP ?5 G; s l" }- Q3 A : E) m# q9 o1 k1 A2 W而去中心化应用有什么不同呢? 看看它的架构图: ' \0 e7 W8 W# a( \$ K; @4 ]; i$ z. M' I& A5 C 前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,; k, s% {4 Y# b4 N$ }8 N" _ 0 ?- v6 g- X% ?7 ^6 ?, f从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。 , B3 w4 w- i5 l5 U! v1 p; n' E9 c: ~0 q 如何开发 5 q/ q1 q5 N# E+ N, f ~+ h; n: \' y% }! X 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。 " R, O' d# @# \& Q" e) {4 W " p; W" e& U6 K开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 ) [) }9 g) k; O0 K; X5 y) n9 ]6 }3 q( K- }* ?. r6 u1 v 下面是一个对比:2 m! d: Q: {6 p1 r- L% z0 z: i F; ] ( ?) R X2 b2 J6 H0 u 客户端UI 客户端UI( q9 ?; W+ s$ Z 4 \/ F, t m8 q' r HTTP RPC * ~) X* [/ ?3 C! W 9 a$ O, m5 ]% U; ]% n4 ^0 F. S* ? 后端服务程序 智能合约 5 r# {$ v, I3 d0 `1 b& p& ?3 F$ T( | Nginx/Apache 节点 8 N5 z1 V" b* `/ q6 g # M2 H# s* N$ D' L9 u r9 x: v8 W因此对于去中心化应用来说,程序员可以从两个方面切入:9 } n* o* O. v# @3 \ ! w6 j" I, r) L; x一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3 9 g2 }7 W! W9 X D6 k& p! V- v6 f/ A, q# Q 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。 + }$ B, q* k3 q5 g3 ~ - }( x2 V6 F. I5 D& A+ O! B目前的主流语言都有Web3的实现,列举一些实现给大家参考:' j( w T ]' ^8 Y * ]6 l a: y/ i j JavaScript Web3.js2 J4 \" C& ?3 S 5 E1 ~- ]( [# U" X( B# L Python Web3.py # _2 k' [- E/ y {( R9 B0 X 3 J2 v3 Y. A$ b: |' b0 J; {Haskell hs-web3 4 F% f4 q) x0 G& N) z4 @, [+ k2 T6 X- S5 h5 h X* T" B8 C Java web3j 2 ?- [ [# E$ F: o) L( ^" F0 L, ~$ l( A2 ]/ y& A+ w4 G4 B Scala web3j-scala* `, T' z5 W" v# G0 f2 }3 E+ `2 C$ o - f1 [( m2 S" _5 e* B& ~9 \ Purescript purescript-web35 _; t0 @4 ?6 o: d x 0 l7 g" q1 D, _. S& IPHP web3.php 8 l5 Z/ i) U, P9 {) y1 i4 D; D7 Q! P1 {; u8 i PHP ethereum-php 1 V3 p& F7 O( p5 _ ?6 c7 Y p2 [: X; `0 W9 Y, m1 K } 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。9 s$ I( \8 r. n ! D& X& Q9 g! f: ^ 下面用一个Hello合约,体会下Solidity的语法:% k7 V. Z# h, S" C$ ~/ r- g 8 ~1 z6 n0 k' V' l7 B+ ^$ b) }
  1. 0 z3 t* r/ M' I: G3 t ~* q& H! q( Z0 ?
  2. <div>contract Hello { ( n5 N0 Y9 E ~$ ^
  3. function hello() public returns(string) {* j1 o7 l4 t* B# ]+ q( e9 V
  4. return "Hello World"; + P; K: A$ K, v7 t& K
  5. } & K" Q' _1 k; l
  6. }</div>
复制代码
6 C9 L5 e3 F) W9 V5 X& \2 A7 g7 w% U2 m4 C2 j ) Q H# W! }$ S: F# U 如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。( C7 X9 ? M7 d: `2 l 2 ?9 G4 y* ?) E/ B9 X; j5 E有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战, # ]! T8 n& s' g" p: Q8 Q1 H; P# X) ~. i& b/ ^/ u9 v 在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用 1 J! F8 j k4 r7 x3 C! L( D) A 5 G0 p+ ~& t- e& C# n+ A! A补充 & f8 |% }) l, x' T6 X7 S! j4 y2 i7 \. [1 m 对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。6 e" P! L3 G5 v' d ! A( d6 v% W2 P! r) W欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。 + L- U! u& t9 X: {6 Q " e2 Q/ x+ D, U, a深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2