之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程。

 

但是涉及多工种,多步骤。入手还是非常困难的。

 

经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:

 

开发DAPP for NEO,从未如此简单

绿谷镇楼。

 

 

首先请记住NEL的GITHUB首页,这里拥有NEO相关的一大堆开发成果,牛逼我就不吹了,你自己看一看这些项目,你至少可以感受到,我们真的是马不停蹄。

唯一的问题是文档化程度很低,我们欢迎有兴趣的同志一起来提升建设NEL这个围绕NEO的中国开发者社区。

 

那么轻钱包在哪里呢?

找到这个项目,他还有一个兄弟项目

 

他们分别使用 c# 和 typescript 开发 的轻钱包SDK,提供你开发轻钱包的所需工具。

在仔细观察过蓝鲸涛代码、neonjs等代码后,他们均无法完成我们的目标。

开发一个开发者使用的轻钱包,于是我们下定决心,绕了很大的弯路,重新建立了这些代码。

目前c#的sdk完成度100%,目前在建设例子阶段。

Ts的sdk完成度50%,但仅移植c#代码,风险为零,大家只需要等待。

这是SDK 对不对,那么轻钱包呢?

 

轻钱包就是SDK的例子,包含在SDK代码中

虽然是例子,我们在功能性上面已经能让大部分NEO钱包汗颜,而且还有我们马不停蹄的开发热情,会不断提升开发NEO轻钱包的平均水准。

我想用不了多久,开发NEO轻钱包就会变成一件很困难的事情,因为你开发了半天,还要承担着巨大的压力。别人会说:你看那个钱包还不如一个例子。

 

C#的例子钱包长这样

Ts的例子钱包长这样

 

钱包和DAPP有什么关系

我们的钱包定位是例子,也是开发者工具,他只有一个功能,发交易,但做到啥交易都能发。

Nep5 交易,没问题,ico募资,没问题。

你会说,NEOGUI难道不是啥都能发么?用户咋用?

确实如此,功能强,不代表好用。

DAPP就是为了解决这个不好用的问题产生的。

那DAPP的最小单位不就正是一个个交易嘛?

于是,我们的钱包有一个DAPP模块,你不需要写代码,只需要配置一下,这个DAPP 是由哪几笔交易构成的,帮助用户填个参数,按个按钮。

交易就发出去了,不就完成了让用户简单使用的功能了嘛。

 

看DAPP功能在这里

钱包的使用

之前说过钱包的使用,不再赘述。

http://www.cnblogs.com/crazylights/p/8338117.html

 

做实验之前先load 一个key 进来。这个钱包保护不是很彻底,我知道出了问题是无法阻止你们发出WTF诅咒的,诅咒完,来github提个issue,甚好。或者直接发个pr帮我们修bug,更好。

这是个实验钱包,所以只支持导入一个key。你高兴的话研究一下这个钱包的代码,做点改装。

 

注意这个DAPP区域,我划分出了红黄蓝绿四个区域

黄区

黄区是选择一个DAPP,对我们这个系统来说,一个DAPP就是一个json,这是跨平台的。

到时候我们的网页版使用同样的json,啥也不改,就跨平台了。

自动加载dapp路径下所有的json

绿区

绿区是选择一个dapp之后出现的,我们把dapp 分解为一个个的操作

比如Who am I 这个 DAPP 就三个操作,一个是查一个人的名字,输入地址。

一个是设置名字,输入地址和名字,设置名字我区分为 test 交易,和发送交易

绿区里就是操作和输入

蓝区

蓝区就是显示你输入的值而已

红区

红区是用来执行操作和显示结果的

Check这个DAPP功能的操作就是从存储区查询,结果就是显示一个string ,给这个地址取得名字是啥。

 

不写代码实现一个DAPP

因为我们是用json配置DAPP,那是不用写代码的。

当然,如果我们配置的功能无法满足你的需求,你就需要写代码了。

让我们开始看起来

这是WHO AM I dapp的全貌

他有三个功能,在红色区,我折叠了两个,一个一个看

title部分

json里面的title就指定这个DAPP的名字

Consts部分

Consts用来配置一些常量,后面可以引用,这样能减少一些直接填值的错误

这里consts.base 其实是whoami DAPP的 合约ScriptHash

主要是scriptcall 和 scriptparam 需要引用

Funcs部分一

Funcs部分,看起来很复杂,但是他一共就五个部分

Name desc inputs call results

Name 和 desc 对应图上红色,不用解释。

Inputs对应图上黄色

我们这里指定需要输入一个地址,上面就自动生成了这个UI

Funcs部分二

这里看起来比较复杂的是Call部分,

Type表示这个dapp操作只需要去查一下存储区。

查存储区不需要调用合约

需要两个参数,脚本hash去const里面拿,地址从输入拿。这个(address)有这个,我们就会把这个string处理成address的scripthash。

还有其他的Call type,主要有invokescript,测试执行合约,和sendrawtransaction,发布交易。具体你就可以看代码啦。

Funcs部分三

Results 配置输出,对于getStorage 只能有一个输出。做过智能合约开发你就知道,getstorage取到的是bytearray,我们这里可以指定类型,会帮你翻译好。

 

一个DAPP功能完成了

结果就是通过这样的配置,这里就得到了一个可以方便的查询每个人的名字的小工具,这就是DAPP的意义了。

 

 

其他部分

了解了我们是如何简单的开发DAPP的,其他功能,我就简单说说了

 

SetName(test) 的 calltype 是invokescript,此时还是免费操作,适合做一些查询NEP5余额啦,查询NNS地址啦之类的不需要对区块链产生影响的功能

 

Setname(sendraw) 的calltype 是sendrawtransaction,这是要花gas的(NEO10个gas内的交易免费,基本还是免费的)

这里的按钮变成了两个,第一个会把交易发出去。

第二个会让你在交易面板看看你刚才生成的交易是啥。

 

我们这个客户端,只有一个功能:发交易。

我们把DAPP定义为一种方便的帮助用户发起各种各样交易的辅助工具。

根据我们提供的这些功能,你是不是觉得,开发DAPP,也不那么复杂了呢。

 

One more thing

还有一个好消息告诉大家,NNS (neo域名服务)TEST版就快放出了。NNS域名服务还会发行代币。

其实我们智能合约早就写了,就是没有一个合适的地方放DAPP,总不能让大家都拿着NEOGUI去拼合约吧。万事俱备,才敢告诉你。

现在这个未完成的NNS.TEST DAPP其实已经可以注册域名啦。

你要是高兴的话,根据我们 nel github docs项目里的NNS白皮书已经可以自己完成这套功能啦。

DAPP 开发直通车-如何基于NEL 轻钱包来开发DAPP的更多相关文章

  1. 使用 neon-wallet-db + neon-js + NEO-cli /rpc 搭建轻钱包服务端

    本文将搭建一个不具有任何功能的NEO轻钱包,所有的精力都仅集中于成功运行neon-wallet-db项目并搭配全节点的neo-cli /rpc接口为轻钱包客户端提供服务. 首先需要准备几个项目: ne ...

  2. 设计模式之美学习(九):业务开发常用的基于贫血模型的MVC架构违背OOP吗?

    我们都知道,很多业务系统都是基于 MVC 三层架构来开发的.实际上,更确切点讲,这是一种基于贫血模型的 MVC 三层架构开发模式. 虽然这种开发模式已经成为标准的 Web 项目的开发模式,但它却违反了 ...

  3. NEO区块链-DAPP开发直通车-第零篇

    什么是DAPP DAPP 是以太坊发明的词汇 Decentralized Application. 目前基于区块链技术开发的应用程序广泛的接受使用了这一名称.   NEL将为开发DAPP提供全面的服务 ...

  4. NEL程序员专用轻钱包 进入0.01状态了

    这个轻钱包能干什么,现在就能在测试网看个余额,转个帐,调用个合约. 而且功能非常程序员化 你会说是不是没啥用   但是他有非常有用,因为他可以很容易的拼出NEOGUI拼不出来的交易 比如参与ICO交易 ...

  5. 基于netty轻量的高性能分布式RPC服务框架forest<下篇>

    基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开 ...

  6. 基于netty轻量的高性能分布式RPC服务框架forest<上篇>

    工作几年,用过不不少RPC框架,也算是读过一些RPC源码.之前也撸过几次RPC框架,但是不断的被自己否定,最近终于又撸了一个,希望能够不断迭代出自己喜欢的样子. 顺便也记录一下撸RPC的过程,一来作为 ...

  7. 基于Python的Web应用开发实践总结

    基于Python的Web应用开发学习总结 项目地址   本次学习采用的是Flask框架.根据教程开发个人博客系统.博客界面如图所示. 整个学习过程收获很多,以下是学习总结. 1.virtualenv ...

  8. 基于Jenkins自动构建系统开发

    1  绪论 1.1 课题的研究背景 随着IT行业的不断发展,软件开发的复杂度也随着不断提高.与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经 ...

  9. 提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件

    提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件 11月5日,在『WAVE Summit+』2019 深度学习开发者秋季峰会上,百度对外发布基于 ERNIE 的语义理解 ...

随机推荐

  1. 1: jsp的4个作用域 pageScope、requestScope、sessionScope、applicationScope的区别

    1.区别: 1.page指当前页面有效.在一个jsp页面里有效 2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletReq ...

  2. Go语言系列(三)- 基础函数和流程控制

    一.strings和strconv的使用 1. strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 . 2. strin ...

  3. C++回顾day03---<输入输出流>

    一:C++输入输出包含下面3个方面 (一)标准I/O 对系统指定的标准设备的输入和输出.即从键盘输入数据,输出到显示器屏幕.这种输入输出称为标准的输入输出. (二)文件I/O 以外存磁盘文件为对象进行 ...

  4. 【JS】CharToAsciiToBinaryToAsciiToChar

    <!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js&qu ...

  5. PHP中ajax返回数据类型为JSON数据的处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Java并发之Thread类的使用

    一.线程的几种状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wa ...

  7. 410 for 循环 运算 改变循环的控制流 死循环 遍历数组 定义方法 有名函数匿名函数 定义函数的方法取值 date math 局部变量 函数 局部与全局变量 次幂/随机数/取绝对值/向上取整/平方根

    for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1 ,在执行2, 表达式, 如果2结果为false,退出循环 如果2是true 执行4 在执行3 执行2 举例打印1- ...

  8. 【洛谷P1706全排列问题】

    题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 代码如下: #include<iostream>#include<cstd ...

  9. ssh-copy-id 拷贝用户秘钥

    生成秘钥 ssh-keygen -t [rsa|dsa] 将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub 将 .pub 文件复制到B机器的 .ssh ...

  10. html(jQuery)替换字符串(全部替换)

    var  str= "a<br/>b<br/>c<br/>"; var Newstr = str.replace("<br/&g ...