Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。 + ^: W2 d5 s+ C4 V7 w/ x0 q1 q/ b- w$ {3 Z1 @, Z+ L/ ]8 c 中心化应用 - z. }9 b9 m0 c4 H1 o. ?! T4 v% u: J8 m 作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:$ V4 D, I% W7 P4 r, r+ y # \" C8 v/ S3 q平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。 8 K5 T# I, T: S) L/ W9 L ( T8 P+ |. w/ q u" A: _& i去中心化应用DAPP ' L8 f6 {$ [( c# o6 k 9 b" N& x+ O9 E# Q. k9 z; t而去中心化应用有什么不同呢? 看看它的架构图:5 ]; ~+ [6 E' n; X& F, H ' C' J2 t R+ N1 J+ F9 F前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方, 8 W9 s( d* `4 _, Z! k5 w6 [% {6 R7 d+ J& {! M9 \ 从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。2 X: Q8 `6 p: C2 E , c7 k' V& [0 c" E. b4 _( ^' `, I 如何开发6 ?/ A( X6 a0 n0 M) l g 6 m+ x/ g' K$ e p, ]在开发中心化应用最重要两部分是 客户端UI表现和 后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。, Q$ y( ?( y0 P; m; U g $ \0 j; B5 k1 A开发一个去中心化应用最重要也是两部分: 客户端UI表现及 智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。 , b, |5 `6 o/ y; i1 X2 B! ^' o! T w* d 下面是一个对比:9 B, E, F9 L" G9 K* C1 r8 ?/ a9 b 0 t+ V+ S* R+ _ 客户端UI 客户端UI ( Q" V1 w: G5 {4 W! Q6 W7 }7 @6 \6 H HTTP RPC , ]( B+ ?6 d% L, b4 E , U- P# C- \/ K6 i 后端服务程序 智能合约1 p* `% N- R5 v' B; J( T 2 ~: N$ R. W8 h% p. R9 v Nginx/Apache 节点) A& W% a4 _) U U' c$ O & h7 f' y# O: d9 A* s7 u 因此对于去中心化应用来说,程序员可以从两个方面切入: 4 y) Y1 d9 f# _% v" A3 V1 J. S0 h6 h/ w6 v 一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如Web\APP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3 4 A8 J6 J3 D( Y6 G8 ~ ) C0 f3 g+ C( h8 t这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。: {. N! Y- G2 D + t; }' v! \6 r V目前的主流语言都有Web3的实现,列举一些实现给大家参考:7 Y$ |, K3 d# K8 s; s% ~. d2 D . y+ h1 x3 Z9 W! n' m, bJavaScript Web3.js3 C" A, y, ^6 ?5 K, X- O & Y# N7 Y3 d$ w% M: B- b Python Web3.py4 G3 Q/ A3 w2 a! K7 S: v ' H% s2 h( l6 B j# W/ D! y8 ~Haskell hs-web3 # e; K8 ^& i7 ], b( o% e2 l9 l, U; w. }7 w 8 v1 I" k% }5 v6 b% H. GJava web3j! b8 `$ W1 j* U; N8 J+ S9 T# j( ]# y 2 A' _' ^- N9 [5 q- Y$ H7 ~Scala web3j-scala9 _6 d# F0 ^3 J" x* V. }% F ; t- g5 z+ G0 d9 X$ lPurescript purescript-web3 0 i- P. M* H& w5 L6 v# G! d - l& u# V j& ?8 ?PHP web3.php! M( m/ z/ \& g0 q 9 [/ i# Q% l: S- ]+ ~ PHP ethereum-php 7 \6 x: f) p+ [3 E! V$ W" l u x. A/ K; v' V. P 另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。 ( U2 x$ m- y6 D; n 2 H! J B- R: e5 A下面用一个Hello合约,体会下Solidity的语法:7 ~8 o5 G( [( O; v4 V* U0 U & n; V& U7 h8 r* J: S6 X
  1. 6 Q) D/ B7 Y5 r, v2 b
  2. <div>contract Hello { 6 X* a+ L5 e" ~) N
  3. function hello() public returns(string) { Z1 N5 e' d2 }% A! e% ?
  4. return "Hello World"; - M6 @6 v `8 X$ j# k1 L
  5. }! ^% ?5 B, n, q" N; ? q: C1 I( X/ w4 ~
  6. }</div>
复制代码
4 ]- b! v. K/ {8 J( E6 U) P ! m) W6 S y2 X0 K `- e+ C$ e( N如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。 3 [1 Y) t0 |0 ~8 {4 [9 p% w6 V ^ 0 @9 r8 G& o& H3 u9 ?2 E' @有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战, ; C- q1 r/ [6 y; q( J) @! Q u/ H% O$ A+ y- j' }, U( l 在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用% q. f; P! X3 X6 ` ; a& z, M$ @; K3 v补充 d' @) G4 N) {. V$ X 4 s; h% s* {& f& ?9 ?* X; d) g对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。 " L6 M3 I! V1 \$ ]. I7 D! x- ?5 u, F1 a$ P0 r, A# U! l0 M1 G: _ 欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。/ G9 T9 F) I* x, x8 `+ m * M( N( w: |- T) j/ ]. h* d" F 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2