Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。( Z- S( W$ \2 ]8 Q( @0 s
但是涉及多工种,多步骤。入手还是非常困难的。
8 J' u3 z6 P2 ?1 z# {经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
. Q  T1 d# W, L' X) r) ?开发DAPP for NEO,从未如此简单/ C& c/ |- m$ r7 p

+ T) ]2 N3 S9 c7 O绿谷镇楼。1 U/ F' E. Y1 a# O( X

5 n: h6 Y! q4 Q' P" V- [8 Z. m首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。: S, j7 ?2 x, h6 l& ^4 W
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。- F8 _) `" Z' r# S: N1 ?) m4 S
那么轻钱包在哪里呢?
" W# |3 N8 [$ {. p. M4 F5 t
+ S% s/ G7 S, p( Y/ `. Y+ m0 Y. ]找到这个项目,他还有一个兄弟项目3 v7 `0 f6 ?/ j
4 t; ?4 ?- d/ c9 [( C
他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。5 u1 U1 ]' J4 m' [. Q; r
在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。
) F9 ?* U9 K1 n5 C& T& Y开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。( Z+ V7 x% U& O) G4 d) o
目前c#的sdk完成度100%,目前在建设例子阶段。
1 n# Q! l: t! C$ C! D6 n: M. v* zTs的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
. H# \  _+ S( s) U# N* ]2 U1 q$ a  _这是SDK 对不对,那么轻钱包呢?
2 c; g6 g6 X! _轻钱包就是SDK的例子,包含在SDK代码中) [) R2 l! \1 y
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。
3 s- x1 R9 S  ?7 S$ f) a3 D我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
& E9 d' O; `7 i2 D% y$ oC#的例子钱包长这样
5 A/ A- Z2 P4 ]+ U( P! Q7 C! s; w- e: e# y
Ts的例子钱包长这样9 i! s9 u7 H, J+ f; Q
; ?$ ]3 G1 k5 ?# O0 ]0 x' w
钱包和DAPP有什么关系
1 V8 x' W! `1 j! [2 b" F* o我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。
" v! J1 b6 |" p" ^" l( QNep5 交易,没问题,ico募资,没问题。* C6 p3 G, g9 j- k! u! `
你会说,NEOGUI难道不是啥都能发么?用户咋用?
* B. Y) Y$ h# K8 x4 L- c确实如此,功能强,不代表好用。; S* b3 i3 Z( q1 H9 X
DAPP就是为了解决这个不好用的问题产生的。
# p, J+ J+ q4 n# ~' Y5 r8 |那DAPP的最小单位不就正是一个个交易嘛?, H3 ]: I  M( ~; ?
于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。5 L* g5 ~% V3 o* a
交易就发出去了,不就完成了让用户简单使用的功能了嘛。
) n6 J6 B# w1 o5 Q8 w* d看DAPP功能在这里9 Q: ^: O( D, o3 u- s

, C' y+ ?$ n9 q0 _* q7 G' o  N: \钱包的使用
$ Q5 }) [4 I5 r* r之前说过钱包的使用,不再赘述。
7 w$ Q& e; `8 {, v$ q: I5 Ehttp://www.cnblogs.com/crazylights/p/8338117.html
8 X2 c0 v% r) Z5 @. }9 x3 w) @8 \$ P$ @
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
+ G' W! w# g9 |( r  G2 D6 l2 v
: J+ i9 u% E' o2 |; O. M这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。
/ k4 Q  x" c; C9 N, H" P  K$ c& l4 e: x
注意这个DAPP区域,我划分出了红黄蓝绿四个区域+ n% Z$ x, R, B' Z
黄区
. s! {7 g% H& K% t黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。  t$ G% F: c! S* B
到时候我们的网页版使用同样的json,啥也不改,就跨平台了。
( r  @4 ?, B$ r( y. d' ^, _0 t
4 o: U* K% Z/ m* b自动加载dapp路径下所有的json, S; p' t4 Z& B- u" f
绿区
; B$ z+ |( J' U7 w6 d绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
- C) V5 a/ ]( Y' f" `3 Z; i( G6 n$ ^" u' c
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
" K* C% T0 o% b  S% q1 R一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易8 ]2 C& |% }: o4 t: b+ v8 U* q
绿区里就是操作和输入
) C1 Q( ?. a9 B9 i5 W+ A( Q蓝区
1 z: S0 A5 K3 q3 |- S蓝区就是显示你输入的值而已' R3 g8 @2 s6 G2 O, {
$ j7 D8 X% a2 D5 V) f
红区
+ ~( C4 l6 h. c% C红区是用来执行操作和显示结果的
  r7 Y# h6 t. M  q  \8 kCheck这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。4 c2 X: M/ `& Z7 d& n$ Z1 V

% p: J$ P3 C& }, o* O不写代码实现一个DAPP
7 Q) l' C- I6 |9 G! _' p因为我们是用json配置DAPP,那是不用写代码的。
$ J) l" P6 f% p" E) u  J当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
6 {" h" O7 y* k7 Z& a3 S让我们开始看起来
1 p, b$ q! a5 Z' _- n! ^% G3 Q$ F7 m9 l- w( _6 q+ a! i( s+ T
这是WHO AM I dapp的全貌
* ^3 q3 k$ i  v5 {! O他有三个功能,在红色区,我折叠了两个,一个一个看# g6 K, ^+ w" @: c* q7 r+ z
title部分
1 z! L3 Z4 p; P2 {7 {. Tjson里面的title就指定这个DAPP的名字) O6 a" Q2 y, s: }0 B
1 |- \; N6 `# m, @
Consts部分
7 i/ E. I! L8 m. W0 V" S2 zConsts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误
% m* H2 l! C( W, G0 w& a  ?/ |这里consts.base 其实是whoami DAPP的 合约ScriptHash
! i$ y4 ]2 l$ {4 v主要是scriptcall 和 scriptparam 需要引用$ P* z1 O' ?9 X2 f  l# F/ ?
0 }6 v  N+ O3 L/ e" l+ W, ^1 r& O/ g
Funcs部分一
6 J$ F. }" d5 }( W* HFuncs部分,看起来很复杂,但是他一共就五个部分
4 I/ _% `8 _% C) o9 q4 E  p4 d2 nName desc inputs call results
1 P7 F" ^! l* I4 ?( W9 I' j# T, |$ i
) B' G( u2 ^/ o( M8 O1 B) LName 和 desc 对应图上红色,不用解释。
" `% w# n2 i. |+ C+ pInputs对应图上黄色* Z# l6 F( Q( U/ B6 h: G. R

, ~8 J* Q# W5 d  ]我们这里指定需要输入一个地址,上面就自动生成了这个UI
: }  U6 V! t1 l! C& DFuncs部分二
5 {* ?" V/ C4 U* w2 e0 ~4 b2 o5 |9 c1 F: B' F0 l+ |
这里看起来比较复杂的是Call部分,
6 z! \# ?+ C% P+ r3 v) u+ OType表示这个dapp操作只需要去查一下存储区。
5 }5 u9 w- y; z! S, _查存储区不需要调用合约: z' ^8 f! O% y' S: u
需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。
, I. A! k8 g8 Q3 _8 [# c还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。1 E% s- h' }/ t
Funcs部分三0 Q2 Q  f9 a0 ]% Z

+ o2 M# _! p, m1 v( j4 vResults 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。6 p, ^# i" N( T
一个DAPP功能完成了) p; }, M2 T2 j
" B0 c; B0 K' n  m9 g3 i
结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。
# ~6 R& n9 _$ S; H3 e其他部分0 }' \* @2 p8 M+ V
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了5 u# _& s( _+ Q! C( e% C
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能. w' |: u  l. c9 C* a

3 W8 j! l  Q; C, uSetname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)
! u/ z0 J9 k/ |4 J! w" h: _! G2 O! o" z1 y: M" [# R
这里的按钮变成了两个,第一个会把交易发出去。
* P: k! P; ~8 U- ?+ _第二个会让你在交易面板看看你刚才生成的交易是啥。. g7 a3 z! c' V
# L/ D5 j9 u: q# y1 l
我们这个客户端,只有一个功能:发交易。; C7 u% x: I' |/ c  ]! V0 a, U  z
我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。7 `- ^3 s6 g' y& v5 v8 y
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。
0 A( j" \9 b( f: A/ K' X" {! wOne more thing2 L, U  p' G6 {2 ]+ T
还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。; s$ B& b9 ]" G5 s, w
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。
( B* ]' I8 f4 l$ N' R0 F现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。/ }3 F- M( R2 ?) T; M$ G/ O- \
你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13