Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。1 ~, D" Z8 @) j) l3 q+ n2 q3 B, u
但是涉及多工种,多步骤。入手还是非常困难的。0 {+ B/ ~. L8 w: Z# U  Q
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:  Y8 S* s7 y' [. N# w
开发DAPP for NEO,从未如此简单
- q; O: e. l( p  p0 N; q5 ?2 o" P2 H7 z  U" H
绿谷镇楼。
3 j- y! ?# M' ?; P, o. j2 y
, m* D# @3 J' W, P8 `* \首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。: A- H( S3 ~1 H& A5 I9 J4 t" r
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。
& e: Y" j6 P+ x9 H) ~3 R那么轻钱包在哪里呢?
( V" V+ M/ s' ^! _5 H4 J, X' o0 x  H; k9 ?2 P8 e3 M, m/ K
找到这个项目,他还有一个兄弟项目. @+ ], H5 ]5 U: L

4 y( h/ P4 \1 d: v+ @, @他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
( k2 K" ?7 W+ _; h4 x* n) u3 |在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。* A. D' q/ k1 ?9 b9 c
开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。
! e8 ~% [% J" J/ ?/ Z目前c#的sdk完成度100%,目前在建设例子阶段。$ [, C  Y( V. p" o' f, u8 d) d  d
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。: r( s% {& i% U$ ~- R) f
这是SDK 对不对,那么轻钱包呢?
( \: j. ?( Z0 X$ f5 f  t8 p轻钱包就是SDK的例子,包含在SDK代码中/ c2 L+ c/ _! X) j8 t/ m
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。5 K  n( H  P! `# l6 Y; r" u
我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。6 D7 X( ^, t" P) V1 m
C#的例子钱包长这样9 x3 l9 r' ?0 [9 f" V2 |( y+ _& _

4 q. Y; X8 g/ L, x; jTs的例子钱包长这样
: J1 a! D/ _# w3 Y' f/ t# ^8 I
钱包和DAPP有什么关系
5 f7 j. O/ S( g1 W; O: r6 a我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。
% B9 q9 Z6 F  V" S+ tNep5 交易,没问题,ico募资,没问题。3 n- I& C# ?) e4 X0 |' n( X2 i! |$ Z
你会说,NEOGUI难道不是啥都能发么?用户咋用?$ j3 b8 f6 S* b$ n, Y$ {
确实如此,功能强,不代表好用。
+ ]$ C6 N; m7 o0 j4 B! Q( wDAPP就是为了解决这个不好用的问题产生的。
8 K' Q- d; M: n2 p. J" U/ C- t那DAPP的最小单位不就正是一个个交易嘛?
; |1 I1 z+ e3 M5 D于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
& V$ o) G5 x7 o" G+ r交易就发出去了,不就完成了让用户简单使用的功能了嘛。
. h, a. J0 w$ w; Q1 m看DAPP功能在这里
: z: N- q& }* o) K: h5 ~1 r* C5 K; P& R  I
钱包的使用$ v6 w2 z3 d! c
之前说过钱包的使用,不再赘述。% T& N9 i( j( w5 `- y: q- e3 H. X
http://www.cnblogs.com/crazylights/p/8338117.html- i) W) l0 K5 v/ j; i

; ]+ c8 ]* a) i. p. X做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
* Z* H: Q" N3 f5 b5 \& S( f/ t! B! i2 k, s% Z# v3 k
这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。
$ g( @' g  q; }% S' g
0 s- H/ \  W7 p& f* h+ w注意这个DAPP区域,我划分出了红黄蓝绿四个区域9 w: j2 ^) T( f( _- y
黄区0 s: b! X* P( i) V1 t$ [
黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。
+ p6 T7 m+ f9 H) S" K到时候我们的网页版使用同样的json,啥也不改,就跨平台了。" n5 s$ O9 W' z
+ x% W' r. ~% u! a4 I, h, \
自动加载dapp路径下所有的json. D" E$ p9 x3 y
绿区
4 e7 K1 i% {& z- E0 Y. C8 {绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
2 ]+ u- H+ M1 q6 ?1 F& P2 |8 v+ U9 l1 ^* J
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
& @' {, o, g9 G) f. \7 E一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易
9 A& b8 N, J* ^  x" a3 |5 C绿区里就是操作和输入
" H$ F6 _, Q: u6 y' _蓝区& |; P. S8 W9 n0 D2 w
蓝区就是显示你输入的值而已
9 R2 K! H" i7 M" h9 Y5 M
' |( v) F* E# v. Z红区# @  W- }: ~1 o' ^* q5 P+ t. M
红区是用来执行操作和显示结果的
; y& R, e6 I/ |2 eCheck这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。
# p/ Q$ i! a' Q# j1 R. C' w: r8 c$ W* ?( F7 v% v: H/ Q4 M
不写代码实现一个DAPP- V: U) T# m, z
因为我们是用json配置DAPP,那是不用写代码的。
" W8 @, s, l( q  h当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。. W2 l5 s% b4 ^
让我们开始看起来
5 Q6 V" b" T+ E$ F0 @
5 |% d9 _7 j' z1 b这是WHO AM I dapp的全貌" S# Q, F5 l( ^+ w2 s* Z% @
他有三个功能,在红色区,我折叠了两个,一个一个看/ I9 m# j8 g3 n/ m! V2 L
title部分% r1 ~. t, A2 I
json里面的title就指定这个DAPP的名字, C+ e  n7 P& }( T. l

4 t- L) j. b7 L+ r$ c0 v& |- E8 ^Consts部分
* v, v, i* J3 J, L, N! mConsts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误, E1 m  s" F. P3 N, K7 Z! q0 ~1 B
这里consts.base 其实是whoami DAPP的 合约ScriptHash' P: _0 I- w+ p
主要是scriptcall 和 scriptparam 需要引用2 W9 u2 Z5 A7 f6 Y: n8 t

5 L" m6 P- L2 [$ X0 HFuncs部分一' ~9 |5 m3 @7 `' L5 O
Funcs部分,看起来很复杂,但是他一共就五个部分
! X0 u0 v- n, S0 ?  B5 L& V, `Name desc inputs call results
9 a" ]3 P) {1 V5 ~0 {- m1 O% T' E
5 X' J9 [: C, ^" U+ lName 和 desc 对应图上红色,不用解释。; C1 ^6 A/ X  G1 Z2 S" `
Inputs对应图上黄色* t6 X' t0 @6 @0 L

2 B  k- \; n/ \& a我们这里指定需要输入一个地址,上面就自动生成了这个UI: R5 f7 }! g& N) o5 D, Q
Funcs部分二, @) C+ G$ L! S

  N# |  C9 n# [1 p! W  H这里看起来比较复杂的是Call部分,
5 S# i; p1 i, R0 I$ w/ _Type表示这个dapp操作只需要去查一下存储区。
3 p" X1 T4 {; _$ J' p; k: \查存储区不需要调用合约0 c# o1 \' }, z2 ]
需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。' l) T9 p8 }( H6 w" R
还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
8 C7 i  Z4 ]  n8 {- ?8 O/ K0 {% a5 iFuncs部分三* F. ^$ C/ n0 N* o: F3 Y; v
: `2 U1 B2 I5 p; r" T& O
Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。
( L  ]/ U: ~6 @6 w4 y一个DAPP功能完成了# s# I- K' X3 {6 z: L8 B

+ k) J, ?8 ^0 E  n6 H, p4 ?( z结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。& i  q4 t4 |' F  M4 U6 q
其他部分# o9 s: a& b* S; \9 q- ?
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了
8 @0 k0 F, Z" T, DSetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能2 J  `# v. Y2 j. E5 K0 L

9 {* I, N9 s1 H4 [) ]9 V* B6 W4 j6 eSetname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的): S- Y8 ?' Q: E4 P/ {9 h8 }
# O+ ]  ?2 d; y/ v6 d, E  ^# O8 @
这里的按钮变成了两个,第一个会把交易发出去。
" u4 E5 K' q8 J5 b4 a8 `第二个会让你在交易面板看看你刚才生成的交易是啥。6 Z8 n- q0 J/ d8 q7 n
9 J. d5 J: Y( {2 a" t2 Z! T7 u
我们这个客户端,只有一个功能:发交易。
4 l+ e! A% b9 d3 b6 G! N; X$ S我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。, c1 P& k4 E9 ?- _* ]- G
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。- H" \& R( @: L* X. Q
One more thing
1 i: `: x. w3 A: o还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。3 u4 n) w& P; ^% w3 i4 u
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。6 P- I4 w  F+ Z: j! u
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
* L, z. H  S5 w7 K9 W. v* _5 ?% w你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13