Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。( U. Z5 u/ v" `' x& p8 P  g* x) S
但是涉及多工种,多步骤。入手还是非常困难的。$ T) ]) L% B) t4 s& Q
经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:% P; t, M7 a6 c3 Z
开发DAPP for NEO,从未如此简单
' ^  O. D: b  Z8 f/ |0 Q6 U8 W$ ~* t* H! p- t% s' p
绿谷镇楼。
) [9 Z! Z( I5 P/ d0 M: @4 I5 X6 J, r9 B- }
首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。, `8 }0 w0 x7 R3 O. }5 ^
唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。3 Y7 u7 y( [5 C( T
那么轻钱包在哪里呢?9 S8 G9 @2 T7 H5 g
- g, w* ~- Q9 G* f9 n. j. d
找到这个项目,他还有一个兄弟项目9 j% O* f2 Q/ q% R
$ U( f7 d, ]+ Q/ \* T0 ~
他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。
0 L5 Z+ _2 b& G8 `1 e& p/ N在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。9 V2 f3 O/ X1 [- |# E6 M' K+ g
开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。" e2 b( C$ Q; a2 `1 A0 G
目前c#的sdk完成度100%,目前在建设例子阶段。% N3 N% u6 T+ S8 ^
Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。
; y& s$ f: L: P5 k& d2 @* ?这是SDK 对不对,那么轻钱包呢?
2 M4 ^3 q( j7 m! |& X轻钱包就是SDK的例子,包含在SDK代码中. `1 ^) y' p- Z
虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。
' n- ~4 J$ L& E1 O9 m我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。
. q6 p% I* Q' ]C#的例子钱包长这样
) p6 s2 @% b0 H* ]6 B& o6 ~+ b5 ]9 m9 _) Z4 I  a8 H4 _; W
Ts的例子钱包长这样" Z# z/ t. ?+ h5 ]
* }  G, y2 Q2 @6 |
钱包和DAPP有什么关系
& O# Z, Y5 w9 D8 e( \6 ?0 p- L我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。1 ^- A( g9 u! g
Nep5 交易,没问题,ico募资,没问题。' p0 W) I4 U) X7 j, O; t
你会说,NEOGUI难道不是啥都能发么?用户咋用?5 \. d* h7 s" e1 M6 Y
确实如此,功能强,不代表好用。
, i+ t5 m) ^" ^  T/ ^DAPP就是为了解决这个不好用的问题产生的。
6 f; j) M' w* C/ m那DAPP的最小单位不就正是一个个交易嘛?& p; i. Q2 p9 W3 }6 }
于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。
# A& J2 U% p6 C交易就发出去了,不就完成了让用户简单使用的功能了嘛。. f4 G8 t/ j; ^
看DAPP功能在这里
* u+ Q& ^# Z+ W6 ?, Q' S3 e
8 @7 [8 `& n0 h& w# X* H钱包的使用
8 d  G% A, v9 A之前说过钱包的使用,不再赘述。
6 S  L+ X- ?8 h" x: Y8 m# ehttp://www.cnblogs.com/crazylights/p/8338117.html
* {9 S' @  `* T4 K: d* u* x, y! v3 o; v  M, B) C9 f5 V9 }
做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。
4 {) {5 Q0 ]( Q8 N6 h# A. J4 F( n3 p
这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。+ m8 n' Q; k. k+ s9 T

1 R, ]3 B' _7 A8 J& ~: h注意这个DAPP区域,我划分出了红黄蓝绿四个区域
7 d/ M1 I8 T# \/ c6 {' T黄区
6 |0 U3 V" Q; g6 m6 W+ l黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。0 \8 I% w# l6 A  y  Y
到时候我们的网页版使用同样的json,啥也不改,就跨平台了。8 [0 u" u1 O: |

# T; {8 o6 m: Z" X自动加载dapp路径下所有的json! b. g* D- a. ?3 V! k
绿区
: e4 [  h5 A2 R4 r1 [绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作
6 \( {: v' y8 Q% p& J" C) i1 v6 y& W. K3 z2 @6 x
比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。
8 c# W+ |' k: [0 T  F5 ~一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易
; w+ m8 [! `9 w! h* k" v$ C* f! B绿区里就是操作和输入9 `; F' V1 F+ q* K: Q7 ~$ A# G5 G
蓝区( w2 C& A' e4 d6 q2 f
蓝区就是显示你输入的值而已7 i7 D$ m( U, w/ U
7 s7 y1 X2 m. j( }& X1 m  G$ U/ \1 t" ~
红区9 D( ^: M! K) ~, S* e6 P1 s
红区是用来执行操作和显示结果的% S$ @6 [4 K. \2 k4 q( l
Check这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。9 x" k2 i( n2 b( ^

& H% `6 E- m0 f. w0 f& L$ w不写代码实现一个DAPP
! r( b5 E, k7 m! e0 b因为我们是用json配置DAPP,那是不用写代码的。
0 ^# p3 c+ Y: [5 J/ n当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。
. f7 W) J1 u7 J3 H% }8 Z7 O* A% J让我们开始看起来
' ~; I1 D0 Q* `; x( B8 n3 V' h4 B, U7 C1 H) R5 Y0 z2 |
这是WHO AM I dapp的全貌
* k2 q2 `0 i1 ]; Q' Y/ e他有三个功能,在红色区,我折叠了两个,一个一个看
. {5 ^3 m: F3 u! Ytitle部分0 @; s( l) n! E6 t# B7 `- l
json里面的title就指定这个DAPP的名字
3 O6 ]+ ]- P5 Z* O# T. b- z1 S! Q1 `9 t- m& t8 K
Consts部分
; t% T1 U% J' ]2 A0 UConsts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误
8 v: R  b. h  _* M这里consts.base 其实是whoami DAPP的 合约ScriptHash
# T$ o( D7 G" z8 c主要是scriptcall 和 scriptparam 需要引用
8 {% K5 K. ]  a. h7 o/ a' _8 w8 v1 d
( b4 ~8 ?3 A- `3 g, u6 sFuncs部分一/ V3 z  d& ?, Q
Funcs部分,看起来很复杂,但是他一共就五个部分8 i6 P. ?4 n( ~% J9 y
Name desc inputs call results) \/ w( b9 W5 W, _9 j  q: W  |- p
0 h- c; l8 ]: E2 \3 `& R; K+ c$ N0 u
Name 和 desc 对应图上红色,不用解释。
3 Q; ?1 Q+ g4 q, V* Q6 x& fInputs对应图上黄色9 |. `' K# F5 B9 [* G' T" {
1 M% S, g7 `% R0 T1 A& }
我们这里指定需要输入一个地址,上面就自动生成了这个UI
" G$ S2 _; p7 {3 i) U7 F7 k3 RFuncs部分二+ x$ Q2 b& z0 L3 |' W7 T3 \9 K

) g7 r/ H; L8 y) |这里看起来比较复杂的是Call部分,
+ z! t9 |# h3 F& mType表示这个dapp操作只需要去查一下存储区。
7 ^# q8 a# ?& a6 \# _查存储区不需要调用合约, ]2 I0 r; [, m0 n3 Y3 S
需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。) k+ H3 z; \9 o$ E
还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。
. ^  B) o" c$ o) S+ c. W3 X4 U! ~) CFuncs部分三
( d; I7 {# X0 U
6 l0 l" e: B. ~$ H7 ^, |8 lResults 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。/ H1 h1 x% X/ S# s
一个DAPP功能完成了( q: {3 y% G* q

$ J0 W3 o' T+ m3 u: u0 [, i: t结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。5 m! S4 l0 [- u
其他部分  D5 k8 ?- \2 Y8 Z9 y
了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了
; Y2 \7 A% Q$ z# TSetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能5 r1 C9 ~: W+ V% i9 o) ~
+ u& ]1 K$ `) m$ s# D2 H- O4 U
Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)1 ^+ @! w3 t' f3 r) L8 S" p2 D
$ F0 b* _# B2 _# F
这里的按钮变成了两个,第一个会把交易发出去。
, S8 B/ r; g9 z$ w. v  L# K第二个会让你在交易面板看看你刚才生成的交易是啥。7 Y3 s4 v- n8 L
: E# a4 ?1 c& k% E# Z: Z
我们这个客户端,只有一个功能:发交易。8 r7 L9 k& \% u  V( A
我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。
% W# k5 `* Y* d3 h6 v$ }  Z根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。, t5 q# V( m8 U% S- j( s2 H
One more thing
+ L0 o$ u3 @' \9 a( h+ J) K还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。
/ Q( b+ k7 [- A其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。
7 k4 G) K/ O+ R  e1 [6 y' M- u9 h" v, Z现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。
! p3 T, J) v" u& w1 w8 N* V你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13