Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。
. o9 K8 P' M/ Z/ Q" F  H8 j, R8 H但是涉及多工种,多步骤。入手还是非常困难的。
6 p4 f0 B3 t) F, N+ g2 m经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
( d* N5 n( @; z开发DAPP for NEO,从未如此简单5 \. ]! D5 g( S  K5 w/ n& Q* Y

) o9 N" Q. d. n  o& ]( Z绿谷镇楼。- a% d8 H0 a' G  s
( I0 X$ p/ m- [* \/ H" o: J
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。' D( U4 ~7 g1 e- D
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。
8 l& M, ?/ y5 i9 K- z8 j那么轻钱包在哪里呢?
4 O% J: T, p5 |6 \% p9 v2 K* F; z2 D2 Z5 e0 Z9 B, q
找到这个项目,他还有一个兄弟项目( L) q5 R' ?9 s2 P$ N" R0 k4 Q6 Z

* f1 F7 V0 _& z) G0 g. k& A他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
9 }& z$ h+ j# i5 D7 V在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。
( ~) c; u& b& W4 q5 N开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。0 C5 n' X, J: b
目前c#的sdk完成度100%,目前在建设例子阶段。4 ^" P5 ~5 k# q6 q/ y
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。. o9 h1 @+ ~4 G5 z7 N! G
这是SDK 对不对,那么轻钱包呢?
0 f6 ~! V8 K9 K2 W4 B轻钱包就是SDK的例子,包含在SDK代码中
& L% Q+ o$ a* s$ L虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。, d/ P+ G' e. Y# Z, }' i$ v
我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
: C* J- G; l# p. R9 z( jC#的例子钱包长这样
3 P* s! u3 ]6 ^+ C' }$ q
. I( ~8 i; m: E$ C6 \( U! fTs的例子钱包长这样0 y& ~; Z) u. i0 u4 X/ ~7 V. I' u
4 `2 @7 b; z5 f; v
钱包和DAPP有什么关系# Z( q0 a  `9 u
我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。' I$ z' `/ h/ n- @
Nep5 交易,没问题,ico募资,没问题。8 `7 r( o3 q9 I4 w! K
你会说,NEOGUI难道不是啥都能发么?用户咋用?
( }1 S# g6 f6 C8 L. A$ q2 F确实如此,功能强,不代表好用。7 g7 |  H% m. j+ L1 ~! O6 T2 f
DAPP就是为了解决这个不好用的问题产生的。
$ h' [. ]3 a# Y; G! D9 \9 P那DAPP的最小单位不就正是一个个交易嘛?
) ~. W- ]; z. _  Q, G& \于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
& j& i% i5 _! `交易就发出去了,不就完成了让用户简单使用的功能了嘛。
6 d" d- Y8 T+ M' M看DAPP功能在这里* h3 c, ]' u2 h/ Y3 [
3 i& j* g* }" N! T) o9 o& p
钱包的使用
+ l' b: H/ `6 [/ T, k之前说过钱包的使用,不再赘述。" @+ x; K8 b0 ?0 p7 m
http://www.cnblogs.com/crazylights/p/8338117.html% I& m* Y' p8 G# H4 O" |' x

; W" T$ v' f$ `, i8 a+ d; C& W做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
' h4 A& s& J. g: `: A6 t3 Z4 T0 O  I# g% o  ]7 w
这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。3 J- N6 Z3 L6 I$ I8 x9 q  c

; z: e( T. |) y- m注意这个DAPP区域,我划分出了红黄蓝绿四个区域
2 C: J1 Q0 Z& r2 P7 s0 u7 `黄区# Q. _1 j" H- J: g: U% ~
黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。3 d+ s; i* x  c' X5 c4 @
到时候我们的网页版使用同样的json,啥也不改,就跨平台了。
# |8 S. N# v8 q2 g1 B2 t: G  [5 }" G
自动加载dapp路径下所有的json
; A( y$ V7 c# E" c- P% b绿区
7 o+ j. {* q+ |. r! ~$ H8 N% I绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
6 H: {% T  X$ ^3 g; {* R  F! n7 m5 w
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。/ J& D' S; n# B7 R. R! V
一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易
* W5 ~3 j2 i& }& {& z) y绿区里就是操作和输入2 p7 \! A8 M7 j+ t* w
蓝区  O# k6 V* w0 S' o
蓝区就是显示你输入的值而已& J% i( \1 }6 a% s, U( }
0 ?: s* n1 \1 z6 G7 s& T- X
红区( C3 t% v$ y# U  w" Z
红区是用来执行操作和显示结果的4 a5 p* V3 d# |: s4 a' f  H6 s1 e
Check这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。. f7 U, C( U$ v1 L/ \7 V
/ i: U9 {. |: ]: f! l/ M
不写代码实现一个DAPP; Y+ K+ h- D: N+ V  U
因为我们是用json配置DAPP,那是不用写代码的。# P- N( C$ ^3 m6 N$ l/ C
当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
' f$ X7 j$ i) `" C2 a% o让我们开始看起来
3 u9 G% b' c" Q' _" |4 A' `) x. m* x, t9 a% T' o% Y2 F
这是WHO AM I dapp的全貌$ m3 O1 ?. v( g/ n
他有三个功能,在红色区,我折叠了两个,一个一个看8 z4 w* v4 I( U7 X0 R, P
title部分
' O& f' x+ P  }) W/ E/ t) x* hjson里面的title就指定这个DAPP的名字: l( M* W5 p) f5 Z. W7 k
6 |& M3 ~* f5 X5 A3 `4 e) i  {
Consts部分- v* T( _  L1 q# j: Y
Consts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误
5 h5 L* g  H3 w6 U/ Y这里consts.base 其实是whoami DAPP的 合约ScriptHash
* q1 k. u1 Z# G9 Y6 i4 @6 V) U主要是scriptcall 和 scriptparam 需要引用
) e3 |# [/ {0 c: G- [2 c5 q: C. ]: i
0 |. ^9 x) X& K7 rFuncs部分一
6 w, L/ a! D, S% U/ ~: aFuncs部分,看起来很复杂,但是他一共就五个部分# N) N% x* z" J, z( _1 `3 p
Name desc inputs call results
; g* P) n! E% P) b9 c1 r; F$ T8 m1 A( m8 y$ q7 z  W
Name 和 desc 对应图上红色,不用解释。; q* K9 R# O; |6 y
Inputs对应图上黄色
4 t+ S. d' h, [2 }$ m& s" v' d8 Q7 C3 ]* L1 I; b1 T. E* N
我们这里指定需要输入一个地址,上面就自动生成了这个UI
2 U7 I4 B/ F: t3 eFuncs部分二
$ ]8 r6 [. |, X& R0 M' C  q+ S. x
! W7 c9 n! i4 N! }/ M这里看起来比较复杂的是Call部分,
( ^- W5 C- @1 ?! oType表示这个dapp操作只需要去查一下存储区。0 h7 D0 y: R& C1 G  E! W& P
查存储区不需要调用合约
  m5 M- `( R9 a: O需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。
& U9 }- p! c6 b% ~$ s6 w还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。' p* Y. K+ q' p  J' \) P' d
Funcs部分三4 E; K, n; A( e* O, o# U

) q" b( \' r& k2 M# Q! \9 UResults 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。2 E, I2 e) |, `" h$ m2 R1 r8 w
一个DAPP功能完成了
5 s; g0 F7 @8 h3 ^4 @5 B. p9 k2 P; b0 |& D0 [# E
结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。0 K4 R& G$ N) T2 i; Z  j
其他部分0 E: Z% r! ]: D- i; a
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了
1 I( i& q8 |* C* Y% p% ?7 w. d# m( bSetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能
7 f1 ~$ Y  n; c' y; Y4 \) N# W+ g2 s; G1 M) E; g  Z
Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)* i  d$ m2 a, o
1 z/ N2 V) n) q# E2 N/ L3 Z
这里的按钮变成了两个,第一个会把交易发出去。
" ]4 G4 ]+ p" c7 B! C第二个会让你在交易面板看看你刚才生成的交易是啥。+ _: s  B/ ]7 |
5 Q; b# n1 U% M2 _6 r
我们这个客户端,只有一个功能:发交易。
% M- t5 p; m5 k* h我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。8 m# l) \" L( n
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。* p3 d* \4 l7 V3 j# W/ h
One more thing
. _9 [% N. i& {* {7 c还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。
6 q- F7 C7 x8 A6 ^. x0 D其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。
5 A' p8 B/ J! [+ s现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
; H$ P- K$ ^. F& t你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13