Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。 U2 E9 m! P/ D% O8 g1 q$ [+ S; N ! ^1 v$ r- Z& a8 Z$ h中心化应用. i8 h7 ?+ ~, A; N( D. H. M1 \6 p 9 v; T1 `" F! Y1 g) c0 S 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图: % r E, ]% D# Q: r- ]# S; L3 Z7 x 0 O; M) G! ~/ W平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。# ~+ R/ b+ f6 P/ ] f4 G3 O( E3 z0 [去中心化应用DAPP+ n% P/ f3 `9 O' {5 L5 w, \ % n: E5 E4 i' ~7 U& i" V 而去中心化应用有什么不同呢? 看看它的架构图: 7 ]3 E$ M+ H) Q) N 6 J: A. Z& I0 l' W s0 C" S! ~前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方, 1 e* ?: k. a- D. D) c, `0 p! B 7 f V4 ^& b( e' S9 h& e从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。- V' e" V3 X9 C# {: k5 S2 o - U+ j3 o/ l! O% `. D如何开发 : |: j: \" z4 F* X! q( ]5 {" q6 k; }% {7 [, ^6 k3 ^/ S! s+ c# u9 | 在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。 , C$ o S; A l( [. [" s # k$ h; G6 p C7 A- p5 P4 h. q开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 0 O- a9 k& v5 i: O; F6 H: |9 N! m' I% Y 下面是一个对比: 9 E1 [/ Y, @$ I6 i5 m5 z0 i+ i0 z 客户端UI 客户端UI4 b! L `9 r- ^" u, u : p3 n% s" A; k$ e8 e. J HTTP RPC* _2 H/ X }$ ]" D 9 z" S1 X6 Q/ s* U 后端服务程序 智能合约4 y/ L( K" R* d$ M 0 T% l8 |- W* d Nginx/Apache 节点+ t" x5 r! x' {4 C 9 Y9 Q# L1 @2 u; b# x1 D( p) m( l: N+ z 因此对于去中心化应用来说,程序员可以从两个方面切入: ( f/ U' o% {! W' o2 f1 u& g7 ^ % l$ U9 {0 l, `* V1 n n3 e一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3 ) x! y8 a: t& p0 J5 X5 {& B4 P7 i; t; L/ z- |; s/ O8 O; z6 ?* Q 这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。 1 ~( g: h! I) \# W- z : A# ^, Z* \- l% u目前的主流语言都有Web3的实现,列举一些实现给大家参考:6 b$ m- f4 Z# @5 b- p/ E # C7 U0 e5 ^% P) L W- p# ~- Y2 @ JavaScript Web3.js: D F" I. V9 p' M & p- A0 g5 C% e3 p. c! f8 v% | Python Web3.py . J* a/ n" g5 s9 N' |1 u. G {$ T/ F/ J, m( [0 l0 _$ a Haskell hs-web3 ' e) O; i* F8 F! i3 r( q7 _! g% o; `6 }$ _ ` Java web3j- @" O4 k* o7 s9 j . \& U# ^5 r9 B. B+ R8 |8 \Scala web3j-scala 5 W$ \3 Z5 }& C& Q" U ; C! R0 J* e% H9 Q! KPurescript purescript-web33 K' I% Z- L1 [: O+ x 7 r$ O0 o! s8 `# g6 D% I) x PHP web3.php ( F( C0 k' b; ?5 I1 y" m' u* z) w0 t% {+ f4 l9 O' H9 j1 ] PHP ethereum-php# g1 x' f. o( n( E 1 ~6 m9 @) x2 k! [, h! s- [另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 0 j' x& J, `* u: n4 _$ a) h4 P4 A. L 下面用一个Hello合约,体会下Solidity的语法:. H( o+ w+ `% s . u ?; `% l; q: V; j
  1. ( e% a$ D8 ~$ e0 n
  2. <div>contract Hello {: R. v9 |+ C* c
  3. function hello() public returns(string) {0 P0 ~3 ]3 w4 S8 Z" u# p8 U& Z& R
  4. return "Hello World";4 C6 F1 F& d3 K
  5. }8 R2 ?& B8 n: c
  6. }</div>
复制代码
. o/ n! m+ H/ h' I* I. \$ u9 w + G9 a( s$ y5 `# c: \, j $ H" \7 d' P. {% g/ w* e如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。8 g: o9 S! ^$ ~. g( \) t $ ] b# e: V: t( m( p 有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,) }# X- f! c' D$ B $ w4 m" l- t1 u8 a; D6 p" ]在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用+ T( D- v- M: ~* m% { ) L8 ]. s* R! Q( ]5 h 补充 : M \8 T% p9 S) T" i. N9 w- r - G8 z4 D4 @. _+ Q! d {5 Z对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。1 X# B; ~- G& Y9 z, m9 ~ ) i6 K! }3 n6 s q 欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。6 {& s2 X# V% N6 p. v# q 0 i1 i& r7 b5 u. \0 R3 U2 k+ | 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2