Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。) \6 n" a( i# ~* }) O# ^0 d3 Q0 S
但是涉及多工种,多步骤。入手还是非常困难的。2 A( P$ p% _! a& H# B* \. ]- r
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:( Y6 u. m- V6 l9 y3 Z
开发DAPP for NEO,从未如此简单
! t7 E3 H: H6 G; z0 w& w' R) |
. n9 z& L# B$ h7 ]6 v绿谷镇楼。
: J# L" f! u* e+ H8 n, L: g4 K" e$ h* @; Q+ N+ i  O
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。: `$ r8 c  H5 D8 A2 V
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。
, S) Y# T; J$ c- }9 ?; i4 j那么轻钱包在哪里呢?# X7 {' Q, f+ l

7 \: G( g% J( u# u3 g2 ~8 D1 ^找到这个项目,他还有一个兄弟项目  c4 O( l- C% {% ]# G% C

! t4 k# r9 a( ?' {5 V& f1 H他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
  g' M0 I/ p' |: [' u; U在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。
4 X9 W; X+ A& E2 y& s开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。
; Q7 G* t7 W  r' i( E! `! _目前c#的sdk完成度100%,目前在建设例子阶段。* v6 r, [* n0 \4 f2 g! L
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
" P; h- |0 i8 ]4 h- T这是SDK 对不对,那么轻钱包呢?, {: w8 e+ R! `. L# b% u+ r
轻钱包就是SDK的例子,包含在SDK代码中1 z1 W/ i) {6 \/ D+ i/ i( J
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。4 q; B5 g' F/ L; m) d! m: V# }. J& ^
我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
4 x6 o: g3 f5 hC#的例子钱包长这样
) b) v+ n$ {2 M( b& W8 y& _9 C
( H( V$ [# U" \; o2 STs的例子钱包长这样' g  G( R$ K6 g: J  e

7 Q1 a6 y6 q4 C, ~6 L( z钱包和DAPP有什么关系
3 x3 i: S& v, T9 q7 ^0 l我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。
8 R9 M9 Q* V) X0 C- C  LNep5 交易,没问题,ico募资,没问题。
: C1 b2 l# i- O/ g1 T+ V4 M你会说,NEOGUI难道不是啥都能发么?用户咋用?& |3 b' b' k2 Q* z* g# k
确实如此,功能强,不代表好用。/ I' C# j8 @3 A( [4 m
DAPP就是为了解决这个不好用的问题产生的。
! f* [* x; A# n5 A2 j$ q  `那DAPP的最小单位不就正是一个个交易嘛?
- {# T5 J7 K1 T  q; \于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
# f3 b3 \8 k/ k" {( _交易就发出去了,不就完成了让用户简单使用的功能了嘛。
4 t# M% r0 O6 {9 C: F看DAPP功能在这里
, \2 g, v. h8 R9 n; H
/ G+ F$ R; K; l+ H1 A钱包的使用
* ?, t. V3 p9 f% |, P6 w2 f之前说过钱包的使用,不再赘述。
& [: G5 g* o% k9 bhttp://www.cnblogs.com/crazylights/p/8338117.html0 j' ?" a$ S6 g# i* e

2 ]* R! S# [9 ~) }' p做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
$ w& ?$ O% V7 Z6 A# B3 D6 |
/ y4 f$ w3 E  R  w这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。
, x( ~! }7 e$ N; U) W! P/ X+ ]. [0 X/ j  _2 q( O- T; u* r
注意这个DAPP区域,我划分出了红黄蓝绿四个区域
9 J8 \& z' T7 k0 c/ D3 b黄区
! X8 Z1 r* M: K) Q1 @5 P( K( D黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。
$ H  b4 N# l! E  W0 C) o- B5 |到时候我们的网页版使用同样的json,啥也不改,就跨平台了。4 \" W$ |, s: S' n

! G- E: `$ y! D5 C3 C3 i自动加载dapp路径下所有的json
% Z& ?) {5 r! |1 J! ?. p绿区
+ s( j: ^8 S, J/ r! m绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作$ L: P( W3 W% ~( V( U

& A4 p( p4 L( B+ p* g: H1 I比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。! y) w' K) d5 J. k
一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易% B7 s# K" ]8 L' r5 A6 S
绿区里就是操作和输入' [" Z. ]5 ^1 @
蓝区, \- g) I/ n0 Y* Y0 G2 f
蓝区就是显示你输入的值而已' [6 N  F  Y$ C7 F
$ b' P2 m- k; `
红区
$ h; M3 g( R$ J- F8 i红区是用来执行操作和显示结果的4 f% t# x* ~% a7 }3 ^  S/ G- _/ E' z- L
Check这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。
- Z- U' `% P% p2 }' ]/ P2 B0 i4 J* M  |/ r2 q; f! u
不写代码实现一个DAPP
+ q/ \4 k* }+ A5 ]/ O因为我们是用json配置DAPP,那是不用写代码的。
! D& ]! b5 ^- A9 U+ X4 ^当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
5 H. k5 O, c! n% U让我们开始看起来9 n; ~' d0 |3 }/ ~+ B

: U6 I6 c; [. E4 `: @0 {这是WHO AM I dapp的全貌2 M* Z5 E' J; |- I2 f( D( I( \
他有三个功能,在红色区,我折叠了两个,一个一个看% H! u2 w$ Y: ~
title部分
9 o0 t8 d, r3 [" V' ajson里面的title就指定这个DAPP的名字) W1 ]# l  S/ M
( e% p4 v' n( L% y4 ]
Consts部分
9 X% O# E" y% k, t4 ]8 W, PConsts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误
+ g# C# [& B: Q" m* u3 X; A这里consts.base 其实是whoami DAPP的 合约ScriptHash+ _) p' ^8 @" [: }* H( Z% U, L
主要是scriptcall 和 scriptparam 需要引用
6 N+ U: F7 R% ]. Y" j7 P, u, s1 Z& b- p
Funcs部分一' P. I/ W1 ]: \- B
Funcs部分,看起来很复杂,但是他一共就五个部分3 f2 b& S8 H# b, s* D0 I
Name desc inputs call results
: O' s6 K% P3 K" B% j5 m' L1 C  W# G# ]+ w% Z
Name 和 desc 对应图上红色,不用解释。
  z; Q( O! b  k2 x3 HInputs对应图上黄色
4 H& `% I$ M$ V
( |9 \! R3 @6 q+ ~7 J" r+ L. t我们这里指定需要输入一个地址,上面就自动生成了这个UI; h) J/ x+ m/ m# f; w: a8 U2 Z
Funcs部分二2 q8 {" Y3 C# D, ]/ Y9 l2 u, W  q7 `

* }2 g1 O, J0 d这里看起来比较复杂的是Call部分,
6 A  }4 w0 f; p/ }" O) jType表示这个dapp操作只需要去查一下存储区。( M. n0 M: G4 I
查存储区不需要调用合约5 Q+ x7 J: g; y1 B# E$ \
需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。
7 n8 a) ~( m9 P+ o5 y还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。4 _9 P9 Y) E  {5 ?
Funcs部分三! p# O; @% }: i( F; d# _# L
8 ^. L9 b* }" C8 P
Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。9 H% S/ m% a- h0 k. ]& I/ J4 a
一个DAPP功能完成了
$ q$ Q) ^+ P  j( U
/ S# n* i* q% W* c: M结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。
& H( d! p4 p: o' g) ]6 Y其他部分
- b) n, O1 @1 y1 Z: Y# P了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了6 J# V" ?/ f' g$ k6 Q
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能: G0 W4 Q6 g* [. P3 A" r; r

1 {- @6 P" I/ ^: XSetname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)
/ k! O1 j9 b8 D2 o/ y; I' F- Z- J% r5 \3 U' X6 L6 N
这里的按钮变成了两个,第一个会把交易发出去。3 j$ T/ Z  b  T9 k. q: T" O0 i
第二个会让你在交易面板看看你刚才生成的交易是啥。
  F; Y7 a" |6 b, p  `: i+ R8 H5 I* ?. n# n
我们这个客户端,只有一个功能:发交易。
' N0 U# d& V! {. L: G1 R$ |我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。
; e$ ^  r' l9 ]1 J  _6 v根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。
) W  v$ H5 d5 Z; ?+ l5 o- |One more thing0 }1 d* w- p7 U* s3 D" x/ i5 u
还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。6 U; V$ ^; r. Q% u! K9 Q
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。1 s8 @3 m& \: X5 b& S
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
# X0 R( t! Z+ z3 G! j3 _2 q你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13