Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。! w9 t+ ^$ ^& o# H4 |
但是涉及多工种,多步骤。入手还是非常困难的。- n# L8 M6 U7 T3 ?  B
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
: _* c4 P8 n' q" O) r6 o$ C开发DAPP for NEO,从未如此简单0 ^4 a/ ?9 a+ w$ @

  x, x$ y& P( K, o- t: Q- a. }绿谷镇楼。9 Y- t' u. K: c% ~6 Y/ R# m/ {3 N: y: V9 j
' }/ X$ L7 k" b  m# h
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。% l0 K# @/ |( w. ?
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。
" Y- I8 k* t7 B) _+ [) d! b' I8 d那么轻钱包在哪里呢?
' z8 q! j$ j9 \/ C$ l8 j
2 D3 ?* g9 c" n# \9 V3 w$ I" M找到这个项目,他还有一个兄弟项目
% K, v5 N/ N4 r% a, d8 g' g8 F7 L- v( {
他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。: p, x( S* T" ~5 [5 d* l5 j
在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。9 i- e) _( `" W1 a
开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。4 i6 v! W* k& N5 ^# T/ m& A
目前c#的sdk完成度100%,目前在建设例子阶段。! G  b* d) M( a
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
: l9 p9 r* T* r这是SDK 对不对,那么轻钱包呢?+ n; j: |4 W9 X, p' P
轻钱包就是SDK的例子,包含在SDK代码中$ y5 a( {: q) a. L) v2 s- l
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。
# g& P  I" b& e: }& ]5 a( |1 O( f' E我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。2 i4 ]! K* ?3 G7 c& t
C#的例子钱包长这样
. @2 J, Q- h2 w" J9 `1 e. s) n7 f& X8 p  u  k. g0 V& l
Ts的例子钱包长这样; U6 q: k$ j# i- ]
9 R% p, g0 p! X4 ^
钱包和DAPP有什么关系
0 q( _' C: X, ~我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。0 B1 w  W6 w( P; k
Nep5 交易,没问题,ico募资,没问题。
* w2 e: x9 O7 {; y$ k1 k你会说,NEOGUI难道不是啥都能发么?用户咋用?! N. T. R# W9 I, r( T
确实如此,功能强,不代表好用。4 X. S; o1 A% l! `; W' T
DAPP就是为了解决这个不好用的问题产生的。: m2 G) d( {; I5 k9 Y
那DAPP的最小单位不就正是一个个交易嘛?
/ x$ v  J! J) G/ s& X* s于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
( e8 S( X0 `/ A: K. |  a/ J交易就发出去了,不就完成了让用户简单使用的功能了嘛。
1 x6 _3 G7 A! r1 b  S/ I( Q$ t& s看DAPP功能在这里
" s; A% F& Z2 q0 Q# E8 ]) K6 N/ r5 Q( }# r
钱包的使用
% Q8 r: l1 H- L: j0 N之前说过钱包的使用,不再赘述。
) }/ D: b" s) Vhttp://www.cnblogs.com/crazylights/p/8338117.html
: F! `9 a6 r9 D8 a; X8 a# Q. I1 ^1 @! y) x
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
4 w2 w3 a- y3 a" v4 C$ a
4 y. X2 ]2 y  M6 I; `6 Z这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。4 e( G2 l6 z) d7 K4 \# b/ F- ]
& i' T8 S1 s; D( B4 Q
注意这个DAPP区域,我划分出了红黄蓝绿四个区域, x* F# P5 ^# I. `2 s$ V* R. y
黄区
9 b& A8 H( f% y. @黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。/ F& `% F3 x6 i- s
到时候我们的网页版使用同样的json,啥也不改,就跨平台了。4 H. c( p8 W3 T: B

* P# a1 N' E2 y; v* _3 a自动加载dapp路径下所有的json
: I2 r! n4 `& P7 v绿区
: f# t$ l: K; U绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
- {5 ]( E, o, Z8 {$ y
# A* @; e0 `2 m% a4 x比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
+ D4 p* K! `7 [6 r- P( W% k一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易
) G! C  U% m/ l8 I' c: r绿区里就是操作和输入
% D' @0 H4 E8 B1 I" c% w' Z蓝区' f* {0 V7 B. w, F0 ^4 \! a4 [( t
蓝区就是显示你输入的值而已3 C, o% U9 `" I& [/ M; Z0 M5 z0 U
, r4 g; L# N; L; Y0 g, f
红区5 }! L  n$ }$ z5 ^; o! U8 p
红区是用来执行操作和显示结果的
. B  o. i$ ~% p# Z$ bCheck这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。% a/ V4 D& Z" _* F! {: B# H

4 \8 v/ k1 C' M( k' U# U不写代码实现一个DAPP) m; D, b: t, Q8 B3 X
因为我们是用json配置DAPP,那是不用写代码的。/ ?6 |5 I: P" w8 {8 a8 B+ ]
当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
" j' s  M3 }# m7 j1 ?让我们开始看起来3 n+ e% k9 s+ Q2 z
3 K. ]/ u8 F1 l" e' x$ N* e3 r
这是WHO AM I dapp的全貌, V; Z) s# F" ]- w
他有三个功能,在红色区,我折叠了两个,一个一个看
; p# i1 G$ k; A9 V  y) l) N% @' w; Etitle部分
3 T# v* i( O& b* E$ Cjson里面的title就指定这个DAPP的名字6 g$ G, Q+ r: j: W! M1 k9 E. z

! |( B1 u" V/ S' M6 j3 _+ XConsts部分, I7 \- \# h- j- N
Consts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误( P/ M& p2 d! V5 G) B
这里consts.base 其实是whoami DAPP的 合约ScriptHash+ k2 l9 Y% A# V/ k# j8 W  o
主要是scriptcall 和 scriptparam 需要引用
2 `* F1 m& e9 _# X, ?
0 j3 K7 E& {- oFuncs部分一
, N& S3 {0 p2 p  }Funcs部分,看起来很复杂,但是他一共就五个部分
: l8 [% l/ ?/ u$ ^8 RName desc inputs call results0 ?: i1 C. z% b8 p0 h! y! R
  O' d' f- l4 e
Name 和 desc 对应图上红色,不用解释。
% [6 u% a( d5 z. z2 e6 SInputs对应图上黄色
: F3 G/ @! E8 E0 E1 j6 i  c2 D( T) _: K
我们这里指定需要输入一个地址,上面就自动生成了这个UI  H5 Z# C* n/ J% v
Funcs部分二9 @, p. S- N( B3 f
% I1 R( e! ?0 m: i# Q
这里看起来比较复杂的是Call部分,9 D, j& p. t1 n# p
Type表示这个dapp操作只需要去查一下存储区。. I. f' y! R% H/ @
查存储区不需要调用合约& }; n2 d- L" o0 \% S
需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。8 ]& \1 g! w/ `
还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
0 Q% C1 W4 V4 p* P3 N- zFuncs部分三$ O" f! w( y5 ~

0 A2 P  J* z! D" ^( [Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。
& `! `' i/ `) B" a  ?& J, V7 ?一个DAPP功能完成了
8 Z2 Z. S6 o4 c$ u9 W
1 u; _- C4 {& I  J+ `结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。
2 [7 Z% R; z% M5 p  b其他部分
7 O4 O5 v# i& ?; _4 ?了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了
4 Q+ g* Q6 I7 t9 O; I% pSetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能
9 t9 g* d$ }2 f  n5 ]/ C$ r) y& H4 h( v! N2 x
Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)
, m9 B8 b9 ~, q/ h9 Y0 }. q$ U) K9 p% l
这里的按钮变成了两个,第一个会把交易发出去。% ]8 K0 H) w; {: f
第二个会让你在交易面板看看你刚才生成的交易是啥。
5 D, K7 Z5 C" t& e/ I" b8 j8 ?9 t8 J
我们这个客户端,只有一个功能:发交易。3 G: W! a  ?: J- M( p
我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。, e7 l6 I0 L' e. Z9 m" x
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。
' L6 b$ a9 F, g% H4 B9 m/ D) {One more thing" Q7 s2 t! r2 B5 ]
还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。
. h9 ?2 q$ s6 |4 |& X( X8 c- H  C0 t其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。$ t8 W# j9 b" B) f# u# j' Z
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
0 K, V$ |) x2 m% }你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13