Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。
6 s1 d4 \, B6 c: N但是涉及多工种,多步骤。入手还是非常困难的。4 H8 n5 @8 b! M- a- W# w, K+ D9 {8 t
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
2 B5 m  Z: Z9 b# w开发DAPP for NEO,从未如此简单
; o4 T& t1 h" b
5 d; E* p9 s1 [, b3 W' x7 G绿谷镇楼。7 f7 B6 k  ?0 r0 ?0 V: v$ \, h+ v
2 M* |6 q4 G8 |
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。; Z+ p7 m- H- s7 M; _
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。
6 I: e6 k) p) I3 N8 _7 j1 n0 V  x/ Z那么轻钱包在哪里呢?
* T6 r) c6 P7 `9 I, u# i
6 W3 \5 ]+ B6 U% r, C. _# z找到这个项目,他还有一个兄弟项目. b5 _. ?# K& V" ?- q5 j0 q: N. x

, F% {5 m8 i7 o+ z+ R! I) P9 }他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。% D2 F& V6 {4 I7 u9 `. U: @0 u+ G0 G
在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。/ D, M" A8 U3 Q( l+ `; k1 [
开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。
- d* l  C5 S6 `  X目前c#的sdk完成度100%,目前在建设例子阶段。
! }$ L& r: \9 L% _3 Y0 z9 X- |Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。8 l' @$ v/ J; ^4 ^7 i+ e6 U
这是SDK 对不对,那么轻钱包呢?  O4 D# s% M6 V+ {0 t
轻钱包就是SDK的例子,包含在SDK代码中" ]- e9 r# s( ~! _/ U! {
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。& h5 M3 l6 s4 \, J
我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。/ [8 E/ J6 y% |2 w) ^
C#的例子钱包长这样0 \2 l, {! }! U/ v

! g* p1 A8 J  J; nTs的例子钱包长这样+ o! V, G$ P; B) `% Q* T* F& F
" y1 Y% \& i" J/ l8 w
钱包和DAPP有什么关系5 Q) N/ G( ]* @" t
我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。4 U  ~2 n. v' {# X* ^
Nep5 交易,没问题,ico募资,没问题。0 W) K1 A- s! Q8 ^
你会说,NEOGUI难道不是啥都能发么?用户咋用?
8 U/ U7 F1 p" y确实如此,功能强,不代表好用。
0 b) K3 ^- {1 X# }, DDAPP就是为了解决这个不好用的问题产生的。
- u0 L" d& M9 V: A那DAPP的最小单位不就正是一个个交易嘛?
- Q; }. _" u8 T1 S( P/ a于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。* G9 X$ F  F. }/ ?3 G4 U! g6 K/ Q
交易就发出去了,不就完成了让用户简单使用的功能了嘛。' ]$ V, [6 \+ U! k" F( w/ u# Q
看DAPP功能在这里
+ I  k' s8 [% l" s6 z
: A$ A# k, {; Q, }, D9 @钱包的使用
. f' p) u  P2 h2 O) [之前说过钱包的使用,不再赘述。
0 J! a1 I+ n3 Zhttp://www.cnblogs.com/crazylights/p/8338117.html
, G, g( k3 b4 c- O) V: }' _9 P- s% W9 _# F9 [$ G
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
# _8 E0 p5 U7 r. g% y
  L( _$ A: J- i这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。2 i4 S) b/ ]0 F" p) i

, C) S$ |/ T) J$ o注意这个DAPP区域,我划分出了红黄蓝绿四个区域/ Y/ i4 d0 G. |' d( u
黄区
5 O) F$ `  p1 z, g+ B0 v黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。- _4 ?- m- N3 e3 N' |
到时候我们的网页版使用同样的json,啥也不改,就跨平台了。+ q- c6 W2 N- n6 w" s) C
# @+ ^- I$ ]  E. X( E6 R2 r
自动加载dapp路径下所有的json4 K' `6 @# V, J6 [  @/ u4 E1 T3 s
绿区
/ u" F8 D- L5 }( D绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作, Z; u, E/ Y/ h" g' v- p' G7 u" v- _
! w( k4 ~4 n+ W# U# S- I
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
9 X# k4 h! ]) W5 _" l一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易6 t5 F8 @" w# q
绿区里就是操作和输入0 P- L, n/ z6 y9 W6 c4 q
蓝区( V+ P6 R  E) C0 |6 O
蓝区就是显示你输入的值而已( b! O7 w4 Q" w- q

3 H- Y7 S7 j3 \, M! w红区
) V0 w1 x! N) G% J! O  ~' F红区是用来执行操作和显示结果的
% {0 _  c" G/ G% R+ i" VCheck这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。, y( F7 n) x3 o' }, }

' D8 x' W% ], C不写代码实现一个DAPP
4 J. q6 A, R6 }3 m$ E. a因为我们是用json配置DAPP,那是不用写代码的。" K: }: D" x' D+ P+ K, W) }
当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
$ c, g+ P4 S- Y$ K9 |3 @让我们开始看起来
* z1 H1 c4 }" }  D0 r' p/ [- o* m7 c/ ^
这是WHO AM I dapp的全貌
6 n' L( U1 w0 R! G# p% j8 V他有三个功能,在红色区,我折叠了两个,一个一个看6 K4 x& V0 S. U  |. }; O( \& P
title部分4 n. `& P; q3 k! d+ e+ q
json里面的title就指定这个DAPP的名字
* ^4 l: A# Z: l( L! l: s
  H0 j  w$ f, C. vConsts部分
# @0 b$ d. I# z% K3 Y4 b$ NConsts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误2 B8 q8 R8 f0 u
这里consts.base 其实是whoami DAPP的 合约ScriptHash
: {8 k" L, o$ L6 b; t9 a+ Q. x主要是scriptcall 和 scriptparam 需要引用; `' x8 D( i% E0 d

# ^. h& p% ?5 a9 FFuncs部分一7 o/ Q6 _3 X; E" L6 o% w  f& x
Funcs部分,看起来很复杂,但是他一共就五个部分
6 g4 U" U: I! y% O( ?3 ^7 {) ZName desc inputs call results
% R* h$ t4 A5 Y: y9 i( W9 Y* t3 K2 n
Name 和 desc 对应图上红色,不用解释。
' z  p$ p/ ~& p% I& U$ \Inputs对应图上黄色
6 C& s9 ~: C. z, {
  {' ?& n* E" f4 H我们这里指定需要输入一个地址,上面就自动生成了这个UI5 e8 t! i3 z+ J8 K- T4 a5 W) Z3 ]
Funcs部分二
, {9 ]5 u, o, r; ]) T: V& l: @: G2 J0 r3 r! Y* u7 E
这里看起来比较复杂的是Call部分,0 E  M9 g  x7 A% `
Type表示这个dapp操作只需要去查一下存储区。
# A# [& ^* i3 n/ z查存储区不需要调用合约7 R; ]/ i+ a$ q7 n2 A6 s, p3 Z
需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。
9 V! c+ l5 u) l! G/ \' U/ g& \还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。  p+ |' S2 \8 G  F! o
Funcs部分三$ Z/ I/ q' p7 i3 _/ a$ ]& |' B
: O6 X/ H" }# f* e
Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。% m+ c/ q0 w& d
一个DAPP功能完成了
7 f& y- X- V3 U; p
/ y) P' D- ?8 q: I3 s" N1 w& j结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。/ d$ {0 V: p* M
其他部分& T& [0 K% U1 o8 f% R. g+ d( d
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了9 B" F3 F: [& m! v: L9 b
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能( m9 }" g$ W; j# q- F3 F% n

0 Y2 Q+ u, u+ w% O* P& [+ u. HSetname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)
: l9 f1 W+ r4 H; H* v2 E% y
2 T% K1 V4 b# H& C% I" r这里的按钮变成了两个,第一个会把交易发出去。
) I  |0 J( H/ I$ u* E6 k6 `. A第二个会让你在交易面板看看你刚才生成的交易是啥。# e# a# Q7 w0 r; p& R( }8 E' X
; V$ v. g' X- K3 P0 h
我们这个客户端,只有一个功能:发交易。
8 k, F" ~  w% N% ]. k- F& k我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。/ j% e% S( f9 }2 m4 N
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。) x( O7 G+ T4 ~8 e
One more thing
/ ~! e; j% g) Y2 B& ^7 O3 {还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。
! V2 V- A4 {" d& O3 v其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。5 ~8 {' X( Y: ~' a
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
, A: {9 }9 X; {2 y+ l# o4 j你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13