Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。
" A& P6 R* B3 ^( G+ j; l# r但是涉及多工种,多步骤。入手还是非常困难的。& {7 I9 _: }: m. t, b' P
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
. s( x# w' l" X0 v开发DAPP for NEO,从未如此简单
  ^( F8 t# _0 S% K+ n7 h* y# A( K% m5 }
绿谷镇楼。7 k# l, b9 Y9 ~

7 C# J1 U2 b) g5 p& g2 R1 w首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。0 a% h! F; l( N4 y: }
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。* ]% j! W5 M( Q9 Q# H
那么轻钱包在哪里呢?! F4 B7 A+ ^; T5 n/ M" r$ Q' F

4 ~% y: J5 w& r9 Z找到这个项目,他还有一个兄弟项目
6 K- Z, t" ^0 m( l4 B; e- |5 u5 b& X9 h2 m8 C& I( @
他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。" S: [! c- A$ B( `4 v- I+ u
在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。
2 B7 Z' s$ G7 q7 F7 n1 X开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。+ }# e$ e+ C; M$ D! a* p8 v
目前c#的sdk完成度100%,目前在建设例子阶段。: K: \2 Q. Q% F% T. l
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
9 Q9 A: w, e( s( g$ r/ v- Y" w这是SDK 对不对,那么轻钱包呢?
/ T+ E& i& M: h: W轻钱包就是SDK的例子,包含在SDK代码中; v+ F" c8 v* ?6 r4 Q
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。
+ _" t$ n* ]4 f/ C我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
) @: v( r' O, _9 ^1 U" y. TC#的例子钱包长这样# W' ^* m$ q+ y- k- c

# E  E: J; {/ L: d, r5 [Ts的例子钱包长这样; R' D0 P% o6 g5 \/ `. p

1 S* n7 A0 X( Q4 X& v2 q钱包和DAPP有什么关系
. c+ _/ Q: D# l4 c! W我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。2 E, L( `) Y8 H4 V2 y; V* G. c2 [
Nep5 交易,没问题,ico募资,没问题。
6 _" u- ]9 V: B5 ]  b; k你会说,NEOGUI难道不是啥都能发么?用户咋用?
8 U* U5 ^: r  t% D% d  c; D确实如此,功能强,不代表好用。% ^0 @0 C+ K/ C/ y
DAPP就是为了解决这个不好用的问题产生的。0 W" K+ V+ }7 G' G3 I
那DAPP的最小单位不就正是一个个交易嘛?/ Q3 w! M2 z% m4 w  l# y
于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
  o  ^3 a0 `$ m6 u6 ^交易就发出去了,不就完成了让用户简单使用的功能了嘛。
6 o! x4 a: D: o, _+ x看DAPP功能在这里
" W) [# W4 E$ o7 @) b- |6 I; w- [1 z. p2 e: _9 f  ~3 K- f) c
钱包的使用
4 o$ B; G8 |  O之前说过钱包的使用,不再赘述。
* f1 t! `# M* N7 d& b4 Z+ shttp://www.cnblogs.com/crazylights/p/8338117.html( t! X2 U& S2 J$ D9 t* s
. Z& V, |; H6 f
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
" w% `% m1 b, q; L1 t2 G6 R7 q
# x5 }$ Z" q2 d. a. ~1 F这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。/ m3 J9 Y5 W0 e) K+ c

' S( x* d4 b, d) }! _+ T! x- c注意这个DAPP区域,我划分出了红黄蓝绿四个区域  a: K% e  r/ J: M( o) ?5 ?! j
黄区; s, K/ P# ^' ]" {; L/ Y
黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。
2 m' C5 M4 ~8 G* l7 i! M! ^* j1 ?到时候我们的网页版使用同样的json,啥也不改,就跨平台了。
# J, {5 o, f% T9 Q+ ^4 C/ j% r$ ^% Y! ~
自动加载dapp路径下所有的json/ T% ~% N+ f9 Z$ H" k9 h0 [" E
绿区
. G3 I  Q  s  g* j绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
0 W! u6 ^, i, |/ n+ ^/ {) _5 _; X4 M
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
8 W# q) b5 D  J, B0 i一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易' c# r) }0 R& y! V5 e. L; {+ ~- i
绿区里就是操作和输入
1 o* {9 w* P0 K" g0 @蓝区" M( s/ n8 ]+ I: s7 e$ o
蓝区就是显示你输入的值而已8 t  _1 }4 _. o6 F) A2 Z' T
5 j2 O. Z1 @: {9 w, }5 Y
红区7 I% S3 z5 r0 u7 _3 R6 |6 S
红区是用来执行操作和显示结果的8 Y8 s: \, w  ]  X" F
Check这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。
; i+ b0 z, h, r
- f3 g9 O2 {1 O  ]7 k, m不写代码实现一个DAPP. Z- W! J  g3 e+ y. {; w$ g
因为我们是用json配置DAPP,那是不用写代码的。. r2 H( G' \9 M2 M# B. F6 t" [
当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。1 l/ k  U" L! @0 e3 b% x' p
让我们开始看起来8 E0 |+ z: l$ `# \$ h  n8 ]
3 c5 T% \. o5 T0 B
这是WHO AM I dapp的全貌( }5 ^+ w3 h) Y
他有三个功能,在红色区,我折叠了两个,一个一个看9 J6 Z7 c1 n7 e2 h& r# u" m1 D
title部分
9 [5 ^& ~5 p* o2 s% Kjson里面的title就指定这个DAPP的名字
5 `+ ?6 W  r; J- |# @/ K* ~) I. ?. F3 z4 v) G% \% O/ ]
Consts部分
, u' P- b( c+ ~8 BConsts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误" m5 {$ c8 `1 X$ m
这里consts.base 其实是whoami DAPP的 合约ScriptHash& o, R2 S* o) g$ U& p: L
主要是scriptcall 和 scriptparam 需要引用; p8 E  A. P% {1 H( G# R
. e$ @, x' E0 D+ X0 X+ M3 x
Funcs部分一. E* ^( D. a$ Y  m" O
Funcs部分,看起来很复杂,但是他一共就五个部分: \4 p* C, ?. u& _
Name desc inputs call results
0 @6 I9 M) F. @7 j- G: g- D  a* B3 f$ M, _9 g
Name 和 desc 对应图上红色,不用解释。
  L% G2 d7 `) @* q9 p3 q6 tInputs对应图上黄色
- ?$ a# Y" b3 p3 C( P5 M3 w* B
3 _: X" o/ D1 W5 P6 }  Z8 `我们这里指定需要输入一个地址,上面就自动生成了这个UI. h. u7 ^5 Y* W( s# o  Q) ]$ [
Funcs部分二" s1 g- H1 A/ E+ E
5 i: B( u2 Y; `2 R& A
这里看起来比较复杂的是Call部分,
* t3 K1 O  s4 r8 j+ A' [Type表示这个dapp操作只需要去查一下存储区。. h/ N; @2 Y+ P4 K
查存储区不需要调用合约
- x0 i- T; R: A3 [- Z需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。
5 c& |) k, L6 _( K/ @! \" o+ [/ S还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
% g( [) m1 g4 j/ H: C  ]: LFuncs部分三2 }+ X; N: F) f
% E2 o8 \+ r8 g$ E
Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。; x/ B5 ~! Y2 e) A; _4 i
一个DAPP功能完成了6 Y' T6 z2 Q% n, P

  W7 D. O) E* W% c6 G8 w1 Q结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。6 i5 ?( E  @0 b* w. o0 `8 {8 d
其他部分# a) U7 L3 t' _" g
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了9 ]) a% m& B# n2 O8 {& J% I
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能- w+ l6 H; F4 v- c
3 N/ z" C; W9 j' |
Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)% w3 l" ^3 K0 V6 F& w
6 X/ {: }2 X1 L7 c3 u
这里的按钮变成了两个,第一个会把交易发出去。2 P# s$ P) W6 d# [  A& }% ^7 g2 f
第二个会让你在交易面板看看你刚才生成的交易是啥。
  E! f: E' L! g: a0 D0 m0 y
/ a' ^- I0 \6 H* E" J, z4 b我们这个客户端,只有一个功能:发交易。1 T3 I. G9 D: U: R
我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。0 L3 x0 z0 ^2 U8 f8 m! A' @3 d
根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。2 u% a( J0 N2 L: W
One more thing
7 v5 {4 O. O$ A$ d& V还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。! Y: [4 R, s7 @
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。9 j" @' E2 [6 @; o
现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。/ `" I! |: x) e) T
你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13