Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。
7 J" f6 U# Y' x4 E3 J但是涉及多工种,多步骤。入手还是非常困难的。
# f; [: k4 S- o3 f( v# F4 o经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
9 @. d+ B+ G' d5 a开发DAPP for NEO,从未如此简单3 A7 E4 ]& ]  o  T( G
3 F+ n2 q9 K' d1 m, ~# C' A$ L
绿谷镇楼。' A. h5 u" v9 ]
2 z! X4 h3 P, h: |; Z. D; a+ T
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。
5 \/ N6 H4 l) v% A+ S; g4 `- i$ _& }唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。
: D& {# a* I6 w2 B那么轻钱包在哪里呢?4 C* z" @5 V6 ~$ w$ \: o6 o2 H

; F7 h" H8 ^9 i! _找到这个项目,他还有一个兄弟项目9 T: H  d" D! h6 Z2 f% c) L; Y

9 h: m% s" N1 B+ H他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
9 D+ L1 J- ^  }在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。9 w" Z$ K/ a9 P+ V6 {
开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。/ i- K6 W5 z; O9 I% x6 L8 z
目前c#的sdk完成度100%,目前在建设例子阶段。
% ~% m# ?* `2 |- k5 g; ]Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
- s: _8 c  ]0 Y0 D这是SDK 对不对,那么轻钱包呢?' z2 `  [* x! q) d) Z8 l
轻钱包就是SDK的例子,包含在SDK代码中
& Q  Y& I0 W) t( M: o! @  `! o虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。* N# H! R; Q7 U6 k0 s% J
我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
6 D6 q7 Y  z1 H) RC#的例子钱包长这样  N2 J, Y# c8 _2 Q+ R
% q5 f# \$ `7 p* `8 m& {
Ts的例子钱包长这样+ E* K2 m! X% a3 {1 s: y7 t$ f+ V

- ^& m! B& M0 `& ~1 y3 X( y/ G0 p钱包和DAPP有什么关系' i( K2 ?0 ~3 h7 u+ ~$ P( \1 t7 R
我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。) _7 p2 q: N. f$ X* B7 z) Y7 N
Nep5 交易,没问题,ico募资,没问题。# |% Q5 {2 ]! Y9 `' ?6 B
你会说,NEOGUI难道不是啥都能发么?用户咋用?
- n+ f' U+ y0 n确实如此,功能强,不代表好用。& R& x; O% _4 `: g8 @7 C9 B- k
DAPP就是为了解决这个不好用的问题产生的。! p( |* @+ _, ^( m. d# l
那DAPP的最小单位不就正是一个个交易嘛?
5 c# M# }1 X+ ?& E1 v7 R) R. l/ s于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
/ C# p; a  J0 S! F交易就发出去了,不就完成了让用户简单使用的功能了嘛。
  ~# S9 v4 s- a5 X* j看DAPP功能在这里
9 i' R, d6 T% p9 |/ H# J4 ~* d* i6 g; k' |$ x' c  k6 w
钱包的使用
( F# e- a# U- n4 m, E' Y8 U  s之前说过钱包的使用,不再赘述。
. y, ~; d4 i, X, Xhttp://www.cnblogs.com/crazylights/p/8338117.html
( Q' V9 j& {1 Z- g/ U5 i% b. s/ h0 Z' f+ `. F7 g- _/ o
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。1 }2 u. `& b. D( z! M, D

- r9 O) s6 M  n$ r. _9 m- N' m这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。
7 j) V; ]/ ?  j, r3 u5 G- |( |, P# u/ \& [) V
注意这个DAPP区域,我划分出了红黄蓝绿四个区域* B7 x: g! F8 u2 t; o; o2 }
黄区. A8 u. C( L- i/ o* N9 D8 a
黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。
* Z$ `, d( k$ Q8 c& Q2 y. a9 {到时候我们的网页版使用同样的json,啥也不改,就跨平台了。
. i3 Z+ P  H' u+ R5 y$ I3 D% z$ B# q- N9 e+ g
自动加载dapp路径下所有的json$ _! N6 j% W: D
绿区- e6 \9 Z/ S/ {
绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
, u+ x. A  L, g9 D4 ?  e1 @7 b8 ]" g4 |9 ^: Z6 Y: y3 I
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。5 ]7 {( I9 @/ [2 v
一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易
- R" B+ K5 S% U8 a& f$ B: D绿区里就是操作和输入7 O- P# z4 S$ o6 U4 U/ y# k5 v
蓝区3 K% x* k/ v, S7 X$ c" e" S- u5 U
蓝区就是显示你输入的值而已
3 P8 A" Y% ]  }0 Z
! T# t, I, d8 H. L  c红区+ D+ _. n+ l$ g- Y. `8 s
红区是用来执行操作和显示结果的
- L- [2 r6 p# F; CCheck这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。
7 o( P- O# ?9 u+ N- S6 K" N+ |0 t" o. F% ]; u* P" B+ p
不写代码实现一个DAPP
0 C4 u; U" b4 K! ~) R因为我们是用json配置DAPP,那是不用写代码的。& K: D: o& y& T
当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。) S4 _8 M7 q3 M3 a/ T3 a
让我们开始看起来! ?; O1 e0 Z  p, T3 `3 u

0 f. p7 ?( O; F# j- a" D' Y这是WHO AM I dapp的全貌
/ z0 N  e2 \" J7 O1 J1 {( \他有三个功能,在红色区,我折叠了两个,一个一个看
- \, p6 X0 {( w5 J& Q; L  S, ttitle部分
/ P/ S# p- K  c1 [json里面的title就指定这个DAPP的名字
8 |! g  T* z. ^* W; p1 S# h5 i; S3 s2 h" W( u
Consts部分% ]9 V, \! Q2 V; H, N' j2 l9 O. K( R; i
Consts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误
" c! Y8 _% T4 t* Q; i" d这里consts.base 其实是whoami DAPP的 合约ScriptHash" h) z! H- y& q5 U: U4 P) n
主要是scriptcall 和 scriptparam 需要引用
+ ?* [) A. z$ r  k8 C5 y# ^
* O) Y! s0 v3 F# a5 LFuncs部分一' _& u* U( Y" m
Funcs部分,看起来很复杂,但是他一共就五个部分8 f' K. P6 o3 i9 e+ d) c9 T
Name desc inputs call results
# K6 [7 R; c) y* G$ `" @, u+ `+ Z
$ m, Q0 |, b/ u! q* I8 QName 和 desc 对应图上红色,不用解释。
4 c! C, X* a) T2 a% ?1 ]+ {Inputs对应图上黄色
3 l. }$ V8 o5 S8 N% d6 e& I' X1 U+ w7 ~5 G1 B8 S
我们这里指定需要输入一个地址,上面就自动生成了这个UI
/ w% Y7 C# ]1 q" `5 q  M6 NFuncs部分二
! X4 x. f0 G; {5 N* I% g
3 W% K) H  b( c, U# i这里看起来比较复杂的是Call部分,: }6 R- L& w+ K6 `% {
Type表示这个dapp操作只需要去查一下存储区。
3 |7 J' S1 ]' V8 ]' L: ?查存储区不需要调用合约
) h  w( P& @0 M1 Y需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。
' s  J; ?; j$ ]5 U) y8 j9 p! v还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
1 V" w. I. ^5 `% GFuncs部分三$ z; E) {! I  ^) H
+ P# i' {4 l. x" q% _2 j
Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。
( p* p0 v* k+ {0 B2 u. g( D# [一个DAPP功能完成了- `4 A- l0 c$ [7 p. p+ w. O
6 E( P0 r' N8 H- C7 \: x" O
结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。* J. F; y! C+ D) H5 [* A
其他部分
. R; U, J8 `  i6 ~: J了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了, D6 W' T* _* t0 e
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能$ l/ D" I7 [3 \% B$ S6 @$ E  X( X

5 X: s+ k) M! ]Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)  a/ Q$ K9 s1 @' B

- y& h- p8 {, z$ y8 |% B这里的按钮变成了两个,第一个会把交易发出去。
. u% m) C( @0 G) I. G" W第二个会让你在交易面板看看你刚才生成的交易是啥。4 B+ K3 F9 R9 E% I  G. L
0 O% G7 p' G6 w
我们这个客户端,只有一个功能:发交易。
. A! E& L( b4 \我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。
3 I# G0 x4 g. i' Y1 r) U: u8 V根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。" n. V' q+ ~' G/ @+ {; o
One more thing
: q/ k# d) X  B6 c$ E3 x! D还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。" L% {: w( [+ y; k  ^1 f7 w& C+ O' M
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。; ~  g% K3 p% ^( S" U
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。$ c( V. W( C2 x" j
你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13