Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。7 m2 O* b" f9 O# }. t+ T- P3 l5 X
但是涉及多工种,多步骤。入手还是非常困难的。% @  v8 M3 q& S0 e; p
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:' W  ~3 |% j9 m/ T# j0 x8 ~6 L/ b
开发DAPP for NEO,从未如此简单" P# ?3 N5 _! E6 v; f" `* P+ s

) Z! l7 o% j. z3 |. q3 w绿谷镇楼。$ _! w& A2 X4 v. }, i  \3 I+ _
6 y, R7 {' \" b# I, V
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。
# `1 L* q6 z7 \1 G$ k唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。; m1 }& _) K: R! q6 ]
那么轻钱包在哪里呢?
* M+ i. P( N- Z( O2 g+ X; j% d
3 L" {4 K, ]  p- ^7 G$ j; }找到这个项目,他还有一个兄弟项目
& L# _1 |& F  ]/ Q* P+ l
1 ]# {9 J9 Z# ]8 Q/ ~* I" [' J# Q他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
- t- O" P5 y. l' B在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。$ \% O4 ^$ s5 Y$ X
开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。: L3 k  f' i4 N1 ]: S
目前c#的sdk完成度100%,目前在建设例子阶段。  F3 ^1 w+ n0 ~4 U( i
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
8 e# p) T) g6 S这是SDK 对不对,那么轻钱包呢?! A: t  _, f; M# p* [4 x
轻钱包就是SDK的例子,包含在SDK代码中) R% e0 \. Z9 j$ o7 b
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。: U- {9 n' A9 l
我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
  [/ z+ E" M1 H. S" G. u$ g0 HC#的例子钱包长这样( T; u: C  g7 M$ ?' k8 O  f. A

: @& ]; y# ]& F* e( kTs的例子钱包长这样  F2 \2 R) C( m) j
7 L+ J' F/ ?9 @9 K; j1 r
钱包和DAPP有什么关系
5 E; G9 i( A" r我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。
! s0 ]+ }0 q& r0 K7 MNep5 交易,没问题,ico募资,没问题。. r4 U2 S  @5 Y8 J# n+ C8 D/ H9 c
你会说,NEOGUI难道不是啥都能发么?用户咋用?
- U# Y/ J+ c# Z; T确实如此,功能强,不代表好用。
4 L9 g. y; d& b) ~$ l4 D, D/ }3 S2 nDAPP就是为了解决这个不好用的问题产生的。# L0 a) e7 P/ }# E* p
那DAPP的最小单位不就正是一个个交易嘛?5 l7 ?* E7 X) _1 N
于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
( S5 u+ B2 C  r! R$ h9 u* }交易就发出去了,不就完成了让用户简单使用的功能了嘛。& }# t( ?0 ~* b. Q4 K
看DAPP功能在这里& e. A$ y/ M7 j

  i) g% _$ W0 r钱包的使用+ k8 i. w" B8 Z9 `& I8 d2 C) v
之前说过钱包的使用,不再赘述。  B8 d* n' F7 G& ~
http://www.cnblogs.com/crazylights/p/8338117.html
: p4 K# t) `8 T8 F
' }8 q4 k3 x' J! b( ^; G做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。" D7 R; ^+ k3 E. |9 ~3 S
7 S. }! V) t% ?8 J" {
这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。
& H/ w, _1 s) h. d. V- j, f% W* M
注意这个DAPP区域,我划分出了红黄蓝绿四个区域& B6 I' g' D, `
黄区3 d7 A- A: u* {, Y2 S
黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。5 T1 \; t. o' l( q
到时候我们的网页版使用同样的json,啥也不改,就跨平台了。
2 @0 a3 @. `8 t
+ a7 I# B0 g* y) R& I; N自动加载dapp路径下所有的json
/ e4 E; d. w, Z绿区
& q8 J& f2 G& T" l2 k, w绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作# A: ]! y; ?" N5 k, x2 ~

1 T! q4 \3 U8 t* b  P比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。5 g4 I" v5 B7 A7 t) A
一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易
- p. R2 @. g6 _4 h绿区里就是操作和输入
/ c. H4 |  \+ _+ }& D% L! Y蓝区
3 Z; [' V& j* P. B' F/ F$ ^4 t蓝区就是显示你输入的值而已; `! b; F' A! T% E
- b; F: {% s  n' n% c
红区
- ^" a! e$ o. d" B红区是用来执行操作和显示结果的
$ h4 o6 l/ b8 w. H; p9 @Check这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。
7 t& d6 f% l$ y: j$ W( ~( W. O0 {% F5 b; B! ?- I. l
不写代码实现一个DAPP
, z4 ]  k  v$ D因为我们是用json配置DAPP,那是不用写代码的。/ t* A3 k; @6 ^7 c1 Y9 U  R, ~* ?
当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
3 P) y# E3 ]3 F/ s8 }让我们开始看起来! |  c7 L  N' p( }
2 ]8 J. k' N* t& J
这是WHO AM I dapp的全貌
5 T% E& L; c' H, O他有三个功能,在红色区,我折叠了两个,一个一个看
" H: y/ t) |7 i- A% h% e3 Htitle部分. V3 W- t, W; P9 f* O# e) g
json里面的title就指定这个DAPP的名字
: Y- e* H; X% b, d, @
; t. H: J+ N6 HConsts部分+ h( ^. @3 T2 W# j& Q
Consts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误( ]+ O' F' R0 V) B, U) D$ ^
这里consts.base 其实是whoami DAPP的 合约ScriptHash
  c; W! e, I! |1 W2 W" I主要是scriptcall 和 scriptparam 需要引用$ G4 ?4 ]5 M/ P  H) G

5 z  }* M/ z$ gFuncs部分一2 S/ I+ b( P1 }# G8 N
Funcs部分,看起来很复杂,但是他一共就五个部分
6 P9 u& b8 S3 y0 T  OName desc inputs call results( Y8 E, W+ H" l+ Y, B( s: }
% m) ?6 l" \8 v5 P: f. ?7 c  B* X
Name 和 desc 对应图上红色,不用解释。4 i# a- X2 N1 G9 ~8 ~3 M% N* M# l
Inputs对应图上黄色
8 o; v  k9 d/ c# d& E# Z1 V% Y4 {1 M0 @( S$ g% H
我们这里指定需要输入一个地址,上面就自动生成了这个UI
7 x& v; Z5 e, ~# ~- kFuncs部分二: V; n1 A6 E; Y$ |1 w9 b' t' h. [
( B) l- u8 {$ n( w) c: x2 l: o  |
这里看起来比较复杂的是Call部分,
' X, E5 Q8 B" h! U# cType表示这个dapp操作只需要去查一下存储区。3 v: [8 G; h7 U% @, [
查存储区不需要调用合约
8 _: x( U; G2 A) E  {0 g, C需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。5 Y6 f) ^4 L; t# r; q6 p, a1 P
还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
! a0 d5 Q. |( X0 M+ k5 sFuncs部分三3 k# o$ X: k, V

0 R0 U" B. x) ?( ~! H1 w0 d; hResults 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。
" y% u5 N4 ]3 @. ~: b2 @/ D) T. k) e一个DAPP功能完成了
3 m3 k# @) ^/ k0 X! C+ k+ n9 q9 b# |/ z8 F0 H6 R3 w, W
结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。
, K9 H, Q! b1 i: G- H其他部分
# P  s: _+ C" r. Z, v" J了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了. y9 g# t$ T0 r
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能+ D! z& v' k/ ^- N& V; |( u

" @" P. _; s8 t* eSetname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)
0 v; U# g4 e' F" R
& ?) i0 a% h% J0 h这里的按钮变成了两个,第一个会把交易发出去。1 v" o2 X1 _( Y2 S8 J0 w* G
第二个会让你在交易面板看看你刚才生成的交易是啥。5 I1 f0 D# w' z; Z+ J1 C
& M$ G! R7 p  {8 `& O
我们这个客户端,只有一个功能:发交易。
2 ]9 j) U1 J8 c* W  D' b0 G我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。# ]. j2 [7 |2 b, l
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。- A$ ~/ a; J+ T
One more thing" v8 @  [% r) _! T! F7 a
还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。6 A  E- b/ B7 e
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。: Y$ u8 n) k9 v1 F$ G8 j* H
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。' X, \: v! H8 n; j1 j5 x) L/ E
你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13