Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。% o( s0 u, C. U$ w  `
但是涉及多工种,多步骤。入手还是非常困难的。
5 @) ^2 ^1 p' h1 P经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:
& v$ c) v: B+ n2 A: @( h开发DAPP for NEO,从未如此简单
8 I& _; |9 H- C7 F* [7 F! @) y; t! M0 V& g1 ?" F
绿谷镇楼。! m" H) D7 G1 }. ^" H  E
. l1 _3 n& l, X5 s
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。
% N' P( [' A8 ~, f, q2 d, a唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。) C8 p4 k- o$ A1 t5 R
那么轻钱包在哪里呢?
. W- m. a% r9 b
9 ?* V9 B( f5 l, f" k8 t- c" z6 Y找到这个项目,他还有一个兄弟项目% ?- b9 W; q, m; G  E+ o, `& U9 b
' P* ]' H5 \4 N5 A- i
他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
; N8 `, w3 O" [" E在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。
1 t% U# X" Z4 z4 H1 W开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。
; R9 Z+ F0 F, m- |; M目前c#的sdk完成度100%,目前在建设例子阶段。6 Q. K/ B' Q8 @
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。3 c  n6 S! t2 N- q- e3 f$ S
这是SDK 对不对,那么轻钱包呢?
& m' l% c: ]' }1 `轻钱包就是SDK的例子,包含在SDK代码中
$ D: r: C* Z3 ^* j3 u! F8 G虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。
0 n2 w9 c" b" r我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
: f3 y1 ^# Z5 f; Z$ A) a$ YC#的例子钱包长这样& N: v) K: u2 `
2 N3 f. ^- l8 u- f& B3 r
Ts的例子钱包长这样
  x2 R% |9 c# p8 X, `5 F9 H1 Q# h! E& K( @
钱包和DAPP有什么关系
5 j! \" u5 Z) L& W5 l我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。* s6 _2 [( W( i6 R
Nep5 交易,没问题,ico募资,没问题。/ V$ z/ i0 ]' A+ X
你会说,NEOGUI难道不是啥都能发么?用户咋用?! o! e) y) T" T4 `$ `; \- B
确实如此,功能强,不代表好用。, x9 K; E8 Y1 A$ R' p: I
DAPP就是为了解决这个不好用的问题产生的。
7 A# ^# T# W0 R, h: w, _那DAPP的最小单位不就正是一个个交易嘛?$ e5 C1 D1 F# y' E8 ~3 t
于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。/ h% ~6 I$ {/ r+ m
交易就发出去了,不就完成了让用户简单使用的功能了嘛。
: |+ J$ W( E8 ~+ r  T看DAPP功能在这里
: e* U7 s3 C0 o: w' A$ K
( z* R8 _- V& `+ v' p, M0 ^钱包的使用
0 ^* u* j# x$ }之前说过钱包的使用,不再赘述。7 h# V, x) i9 C& ^( x# ]2 C) t! q
http://www.cnblogs.com/crazylights/p/8338117.html8 p3 w# L1 m  b  \6 Q
* x$ X5 {$ Z( g# I$ @# f0 ~
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。. A/ u: v: ^! G
- [2 H/ d" w" f
这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。  Z7 L6 i4 v6 ]8 [' J
# A# A: ~/ X: D% X
注意这个DAPP区域,我划分出了红黄蓝绿四个区域
$ `% J5 \+ L+ }) D3 n' A9 B黄区/ V' i7 Y, {+ U( y3 b
黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。
: _* {( X! q+ M2 F/ Z/ m: Y到时候我们的网页版使用同样的json,啥也不改,就跨平台了。* A% P) G# i; d0 Y' R) U/ j

+ b2 M0 ?3 f. H  M$ c4 ^1 V  `自动加载dapp路径下所有的json% _" R8 }; ~' }% o* v
绿区! [$ G, }' V6 D4 Z
绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作# l9 v/ B5 U2 P& q2 h5 b9 K
- U, O7 b$ M5 U. W0 p9 g( W5 q3 ?
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
# ~+ z6 x/ Q0 o9 m& t* f6 j6 H一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易/ `' c# F0 A9 _
绿区里就是操作和输入; Z+ W0 P5 w( j- D; H) m
蓝区
4 m% R* U* i2 Y" T- w蓝区就是显示你输入的值而已
% D0 [7 C6 f  e1 [1 G3 b2 X: e9 ^# w* A
红区# v- }% a$ ]( A8 F
红区是用来执行操作和显示结果的
# h5 ?4 W. m: H) s* c/ e. FCheck这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。
3 Z: h) g1 l1 f7 d% I+ H) {2 [: H6 V% u# x  p
不写代码实现一个DAPP* P6 W9 |% ?5 F0 X' L
因为我们是用json配置DAPP,那是不用写代码的。
8 u0 K: s" w* j  T  n& z当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
) ^7 x7 V' }* q让我们开始看起来0 t: e0 D& {) Z, h- y0 W
2 V. J7 }! @: x- C3 F
这是WHO AM I dapp的全貌
2 M8 R4 A* E2 l9 m6 S% b! |0 ]他有三个功能,在红色区,我折叠了两个,一个一个看% o! W: s1 @7 G4 V/ q, O
title部分
  O9 V1 L3 e) l" L4 Vjson里面的title就指定这个DAPP的名字! h9 l  A; Q( K0 X& D4 w3 H

) }% J# s9 W* eConsts部分) {5 p/ Z" M% `0 c1 q$ G/ I
Consts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误
( c& d& F& B1 Y9 g* J这里consts.base 其实是whoami DAPP的 合约ScriptHash
+ b2 W' H1 C7 M9 D) I主要是scriptcall 和 scriptparam 需要引用
6 V$ b7 F2 @4 a  U, v4 }0 v8 C4 H" Y2 k) w( B: F- M" C+ [, q
Funcs部分一0 a+ [) x+ w  C; `9 P% }0 Z
Funcs部分,看起来很复杂,但是他一共就五个部分8 i8 k$ ~/ i& g- T" e7 p
Name desc inputs call results
; n7 A( j4 {& W6 `3 e" c# @5 |6 U1 ~; E0 y: R8 j% i! p
Name 和 desc 对应图上红色,不用解释。
& f* c/ ~1 a/ L( \Inputs对应图上黄色
2 u6 I5 L! U9 j+ E+ B, f
. d9 s/ w4 l& O9 ?9 I$ Z我们这里指定需要输入一个地址,上面就自动生成了这个UI$ A. b1 Q9 b- d/ C4 o. D) x/ J
Funcs部分二
3 k  F6 N" u3 L& G) I  R- [- N0 V
这里看起来比较复杂的是Call部分,
# ~) E* B- W  Q1 U0 Y+ @Type表示这个dapp操作只需要去查一下存储区。
* O7 Z( s4 s1 U6 K( V. [查存储区不需要调用合约
8 _% @1 l/ d) b$ G需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。3 Z' X: Z$ h* o8 F' R: S7 Q- F
还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
7 {9 r- Z4 l! H; x$ E4 c: gFuncs部分三: H$ [4 I0 M( K0 X+ D  O2 k

: C$ n0 V6 K% g  L& gResults 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。
1 c& D; c6 r9 E3 U1 G1 k1 @/ _一个DAPP功能完成了
. H2 J4 F  f5 I, K" ]
5 f& z$ }$ [/ h0 V# Q; M7 r结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。  I1 j( `" k0 m# G# _6 E
其他部分9 r- p" i5 J  P, H/ O. B7 L( n
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了( N' \4 Y9 u& k) p
SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能: K5 g0 x" R0 I2 `2 \' `
3 b* {8 e* w; j8 [
Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)
$ c- U- m5 s# E6 [7 S, F% h* t0 x( N7 v- j) k, e3 ~  |
这里的按钮变成了两个,第一个会把交易发出去。" ^- x( G$ O8 n6 ^3 H
第二个会让你在交易面板看看你刚才生成的交易是啥。7 @: V: p% ?# N4 E

! M0 C5 s' E2 {+ D9 p我们这个客户端,只有一个功能:发交易。
$ @. c- \) s3 J8 `3 m我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。
$ }4 z3 Q  t: [4 @% k- R2 u: }根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。
) H: n7 j+ D/ Z8 V3 vOne more thing
" g. K1 r7 I1 `还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。5 x/ s- F  @7 x; I. P# e' k
其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。
0 v$ P  P8 b) A0 z/ V6 C- v% }+ n5 g现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
4 t* h5 h6 Q% M+ Y' X* U, u你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13