1基本流程

Asch有三种网络类型,分别是localnet,testnet,mainnet,后两种是发布到线上的,可以通过公网访问。第一种localnet是运行在本地的,只有一个节点的私链,主要是为了方便本地测试和开发。Dapp的开发同样要涉及到这三种网络,即

  • 第一步,在localnet的开发,本地测试
  • 第二步,在testnet测试
  • 第三步,正式发布到mainnet

2启动localnet

每个开发者都可以在本地启动自己的localnet的,需要先下载阿希源码。

> git clone https://github.com/AschPlatform/asch.git

下载后就可以参照该项目的README进行后面的安装,运行操作。

3安装asch-cli

> npm install -g asch-cli

注意这一步不要用淘宝的cnpm有漏洞

4在本地创建一个应用程序

首先要进入你的阿希源码目录,并确保localnet的启动

> cd <asch source code dir>
> npm install
> node app.js

4.1创建你的受托人账户

每个dapp都有独立的受托人,这些受托人也是默认的记账人,他们负责区块的生产,跨链资产的中转,与此同时可以获得交易手续费。注册dapp的时候,我们只需要收集受托人的公钥就行,为了权力分散,最好每个秘钥分别由一个人保管这里为了演示,我们一次性创建5个账户,一个dapp最多有101个受托人,最少是5个。

> asch-cli crypto -g# 接下来输入 5 即可生成5个账户
[ { address: 'AijfU9bAE6Jpt5ve7zG3LoriDamH67eLb',secret: 'easy snap cable harvest plate tone planet yellow spot employ humble what',publicKey: 'a437a1d4bedf738e8620920ef29542644e3366c635b16fc9faa6f5db744bcd5c' },{ address: 'ABGGUL5D2SoBaQTqDMAb3u9RdUjYBcmRxx',secret: 'adjust edge exist hurry joke carbon spice envelope battle shuffle hawk thought',publicKey: '522cdc822d3bec74aa5c4e972ed6cba84850f9c4d521e43fe08675e9e4759bb9' },{ address: 'AMg37s4avDUojJd6d3df7HPA3vqtRRwved',secret: 'survey spoil submit select warm chapter crazy link actual lonely pig grain',publicKey: '6ee3ae36166f69e8b9408d277486c9870f40c1b7c16016328737d6445409b99f' },{ address: 'AL5p8BHzhCU3e5pkjMYbcjUSz771MrQcQr',secret: 'march struggle gap piece entry route kind pistol chunk spell honey summer',publicKey: 'ad558e44b347a54981295fcb5ee163c2915ca03536496129103e9d72c5025d69' },{ address: 'A2WassKticpB7cx15RZfenBekthwmqXRXd',secret: 'response modify knife brass excess absurd chronic original digital surge note spare',publicKey: '6b2594ebeee9b072087e5f1e89e5c41ee2d73eb788b63abeedf5c04664f0ce5b' } ]

4.2生成应用模板

应用模板包括注册DAPP必须的元信息,创世块以及一个初始的目录结构

应用生成模板需要使用dapps子命令,如下所示

# 生成应用模板的时候,最好建立一个新目录
> mkdir asch-test-dapp && cd asch-test-dapp
> asch-cli dapps -a

接下来,我们要回答一系列的问题,以生成应用的注册信息与创世块

? Enter DApp name Asch-test-dapp
? Enter DApp description Demo of asch dapp
? Enter DApp tags asch,dapp,demo
? Choose DApp category Common
? Enter DApp link https://github.com/AschPlatform/Asch-test-dapp.zip
? Enter DApp icon url https://yourdomain.com/logo.png
? Enter public keys of dapp delegates - hex array, use ',' for separator a437a1d4bedf738e8620920ef29542644e3366c635b16fc9faa6f5db744bcd5c,522cdc822d3bec74aa5c4e972ed6cba84850f9c4d521e43fe08675e9e4759bb9,6ee3ae36166f69e8b9408d277486c9870f40c1b7c16016328737d6445409b99f,ad558e44b347a54981295fcb5ee163c2915ca03536496129103e9d72c5025d69,6b2594ebeee9b072087e5f1e89e5c41ee2d73eb788b63abeedf5c04664f0ce5b
? How many delegates are needed to unlock asset of a dapp? 3
DApp meta information is saved to ./dapp.json ...
? Enter master secret of your genesis account [hidden]
? Do you want publish a inbuilt asset in this dapp? Yes
? Enter asset name, for example: BTC, CNY, USD, MYASSET XCT
? Enter asset total amount 1000000
? Enter asset precision 8

有几个注意事项

  1. DApp link是为了方便普通用户自动安装,必须以.zip结尾,如果您的dapp不打开开源或者没有准备好,可以把这个选项当做占位符,它所在的地址不必真实存在
  2. DApp icon url这是在阿希应用中心展示用的应用图标,必须以.jpg.png结尾,如果该图片无法访问,阿希应用中心会展示一个默认的图标
  3. How many delegates ...选项对话这个表示从dapp跨链转账资产时需要多少个受托人联合签名,该数字必须大于等于3小于等于101,数字越大越安全,但效率和费用越高
  4. 创世块中可以创建内置资产,但不是必须的,内置资产无法跨链转账,只能在链内使用

4.3注册应用到主链

注意这里的主链不是指mainnet,每个net下都有相应的主链,主链是相对Dapp而言。

可以我们使用registerdapp注册应用到主链,如下所示

> asch-cli registerdapp -f dapp.json -e "someone manual strong movie roof episode eight spatial brown soldier soup motor"
# 返回结果如下
0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb

0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb 是应用ID

使用浏览器访问http://localhost:4096/api/dapps/get?id=0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb,可以查询到该dapp了

{"success": true, "dapp": {"name": "asch-dapp-helloworld", "description": "A hello world demo for asch dapp", "tags": "asch,dapp,demo", "link": "https://github.com/AschPlatform/asch-dapp-helloworld/archive/master.zip", "type": 0, "category": 1, "icon": "http://o7dyh3w0x.bkt.clouddn.com/hello.png", "delegates": ["a518e4390512e43d71503a02c9912413db6a9ffac4cbefdcd25b8fa2a1d5ca27", "c7dee266d5c85bf19da8fab1efc93204fed7b35538a3618d7f6a12d022498cab", "9cac187d70713b33cc4a9bf3ff4c004bfca94802aed4a32e2f23ed662161ea50", "01944ce58570592250f509214d29171a84f0f9c15129dbea070251512a08f5cc", "f31d61066c902bebc80155fed318200ffbcfc97792511ed18d85bd5af666639f"], "unlockDelegates": 3, "transactionId": "0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb"}
}

4.4部署应用代码及子网络

现在我们把第二步中创建的模板代码拷贝到阿希的安装目录下的子目录DAPP,并改名为DAPP的ID

> cp -r asch-test-dapp path/to/asch/dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb

然后把第一步创建的受托人密码写入这个DAPP的配置文件中

> cat path/to/asch/dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb/config.json
{"secrets": ["easy snap cable harvest plate tone planet yellow spot employ humble what", "adjust edge exist hurry joke carbon spice envelope battle shuffle hawk thought", "survey spoil submit select warm chapter crazy link actual lonely pig grain", "march struggle gap piece entry route kind pistol chunk spell honey summer", "response modify knife brass excess absurd chronic original digital surge note spare"]
}

这里我们把所有受托人的配置到同一个节点了,在生产环境中不推荐这样做,应该把秘钥尽量分散到多个节点,以防止单点故障

4.5重启asch节点程序

> ./aschd restart

使用浏览器打开http://localhost:4096/dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb/,可以访问默认的一个前端页面,该页面可以进行一些简单的接口测试

也可以观察DAPP的日志来排查一些问题

> tail -f path/to/asch/dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb/logs/debug.*.log

4.6跨链充值

dapp的前端端通讯协议一般可以分为两大类:读和写读指的是数据查询,比如内置的区块查询,交易查询,转账记录,以及自己定义和实现的一些查询接口写指的是合约调用或事务执行,比如发起转账,设置昵称,提现等,同样,也包括其他的由开发者实现的各种合约或事务

每一个写入操作都需要消耗燃料资产,模板dapp默认的燃料是XAS,开发者可以通过调用相关接口改为适合您的燃料类型,可以设置成任意其他资产,包括内置资产。如果你的设置的燃料为外部资产,则需要从主链转入资产到这个DAPP,这个过程叫充值,相反的过程叫做提现,这都是通过阿希的跨链协议实现的。

充值有三种方式:

  1. 使用交互式的网络图型界面,在【应用中心】的【已安装应用列表】
  2. 使用asch-cli deposit命令
  3. 调用asch-jscreateInTransfer函数,具体可参考阿希JS的接口文档

4.7查询接口调用

查询接口一般通过http获得协议,比如

> curl http://localhost:4096/api/dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb/blocks
# 返回结果如下
{"blocks": [{"id": "9fae0c8200b7f4ef8c96f264e621f01a39a0b365ff42b80232aece0f3136b0e5", "timestamp": 0, "height": 1, "payloadLength": 103, "payloadHash": "c3674e36954811f869865a3b106ada847d47b6bc1ffc0a69c1859756d34cb5ad", "prevBlockId": "", "pointId": "", "pointHeight": 0, "delegate": "8065a105c785a08757727fded3a06f8f312e73ad40f1f3502e0232ea42e67efd", "signature": "fd7423c1ce4cb82e79125e39fc13e040cefce158af69b45d035aaf5a4c78db8f66aa3e93bbdfb72bfa0dd604f64f8bebc66dd08fd17715bb77225fc0743f680b", "count": 1}], "count": 1, "success": true
}

更多接口可以参考DAPP默认接口文档

4.8合约或事务调用

合约调用也有三种方式

  1. 在模板应用的默认前端页面,通过交互式网页图型界面进行
  2. 使用asch-cli dapptransaction命令,具体可参考asch-cli使用说明
  3. 使用asch-jscreateInnerTransaction函数,具体可参考asch-js接口文档

5目录结构

下面我们分析下asch dapp的目录结构

dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb/
├── blockchain.db         // dapp数据库文件,与主链的数据是分开存放的
├── config.json           // 应用的节点配置文件,目前主要用于配置受托人秘钥
├── contract              // 合约目录
│   └── domain.js         // 域名合约的实现代码
├── dapp.json             // 注册dapp时用到的元文件
├── genesis.json          // 创世区块
├── init.js               // 应用初始化代码,可以在该文件进行一些设置、事件注册等
├── interface             // 查询接口的实现目录
│   ├── domain.js         // 域名查询接口实现
│   └── helloworld.js
├── logs                  // 日志目录
│   └── debug.20170928.log
├── model
│   └── domain.js         // 域名业务数据模型定义
└── public└── index.html        // 默认前端页面

6实现你的业务逻辑

曾经我在这个博客里写过我们的开发理念

在asch dapp中实现一个业务逻辑,大概思路如下

6.1定义你的数据模型

在这个环节,你需要考虑的是在区块链中保存什么数据或状态,你的账单内容是什么哪些字段需要建立索引,以提高客户端查询速度

6.2实现合约逻辑

这个环节,你需要考虑的是一个事务或一个调用会修改哪些状态,比如资产余额,账户属性等我们在sdk中提供了丰富的接口可供调用,具体可参考sdk接口文档

6.3实现查询接口

在这个环节,你需要考虑的是如何给前端返回数据,比如区块,交易,各种合约业务状态的查询等也可以可用这个通道将一些非全局状态保存到本地节点,我们会在后续章节介绍这些高级用法。

转载于:https://www.cnblogs.com/pengjiawei/p/8177696.html

Dapp开发教程一Asch Dapp相关推荐

  1. Dapp开发教程一 Asch Dapp Hello World

    1 基本流程 Asch有三种net,localnet,testnet,mainnet,后两种是发布到线上的,可通过公网访问. 第一种localnet是运行在本地的.只有一个节点的私链,主要是为了方便本 ...

  2. Dapp开发教程一 Asch Dapp Hello World 1

    1 基本流程 Asch有三种net,localnet,testnet,mainnet,后两种是发布到线上的,可通过公网访问. 第一种localnet是运行在本地的.只有一个节点的私链,主要是为了方便本 ...

  3. Dapp开发教程三 Asch Dapp Mini DAO

    前边两篇教程可以称之为热身,从这里开始,进入正题. 这一次,我们要正式创建新的交易类型或者智能合约了. 1 创建合约 首先要进入dapp所在目录 cd dapps/<dapp id>/ 然 ...

  4. Dapp开发教程二 Asch Dapp Asset

    前一篇文章介绍了asch dapp开发的基本流程,这一次打算创建一个拥有内置资产的dapp,并顺便介绍下前后端通讯的协议和常用接口. 1 创建一个带内置资产的dapp 其实这篇文章有些标题党,因为创建 ...

  5. Dapp开发教程四 Asch Dapp Dice Game

    这个dice game与上一个mini dao相比,代码规模大了许多,功能也复杂了很多,创建了三个合约类型,彼此之间有依赖关系,合约的执行还要依赖历史交易数据. 但是我觉得在原理上与上一个项目相比,并 ...

  6. Dapp开发教程四 Asch Dapp Dice Game 1

    这个dice game与上一个mini dao相比,代码规模大了许多,功能也复杂了很多,创建了三个合约类型,彼此之间有依赖关系,合约的执行还要依赖历史交易数据. 但是我觉得在原理上与上一个项目相比,并 ...

  7. Kinect开发教程一:OpenNI的安装与开发环境配置

    小斤注:关于OpenNI2.X版本的安装与开发环境配置,请参考<Kinect开发教程六:OpenNI2简介.安装与VS开发环境配置> --------------------------- ...

  8. 微信小程序云开发教程一

    微信小程序云开发 初学者入门教程一(云开发环境搭建) 本教程适合刚刚入门的小白,云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现 ...

  9. QGC地面站二次开发教程一

    这一节是关于Q Ground Control源码编译安装的教程.因为需要做二次开发,所以必须要用QtCreator进行编译.改程序.再编译.采用的QGC源码版本是v3.4.0,是2018年8月10日最 ...

最新文章

  1. vb.net与c#相互转换工具
  2. 两数相乘结果溢出的判断
  3. matlab调用kmeans_matlab做聚类分析(k-means)
  4. springboot定时任务
  5. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
  6. php新闻列表排序,javascript 新闻列表排序简单封装
  7. Python字符串中常用的方法
  8. 违章查询源码 php,PHP教程:php车辆违章查询数据示例
  9. python基础:变量与数据类型
  10. Echarts基本图表
  11. vim超实用指南收藏这一篇就够了
  12. 关于Qt Creater中资源文件和文件路径的记录
  13. C语言程序——梅花易数年月日时起卦法
  14. 2022微信企业邮箱登录入口介绍,企业微信企业邮箱怎么开通注册?
  15. 四位共阳极数码管显示函数_求各位大神指正,四位一体共阳极数码管数字钟程序,仿真能运行,实物就只显8个8,不动...
  16. 使用unity3d 接入anySDK的总结2
  17. freemarker模板生成pdf文件
  18. 百元降噪耳机推荐有哪些品牌?适合学生党使用的降噪蓝牙耳机分享
  19. PHP7.1 mcrypt_module_open() is deprecated
  20. 嗨,我亲爱的朋友们!心存感恩1

热门文章

  1. android系统的游戏推荐,兼容主流游戏 Android 2.3系统手机大推荐
  2. 个人博客系统开发总结之 lucene全文检索
  3. java绘图 point_阅读以下说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某绘图系统存在Point、 - 赏学吧...
  4. 2021年安全员-B证考试内容及安全员-B证考试总结
  5. 李跃喊了两年的“三新”临盆 中移动做企业社交?没戏!
  6. 获200万天使投资,驾本易专注驾培服务,已帮2000多人拿驾照
  7. Error: The following dependencies are imported but could not be resolved:
  8. python正则匹配果壳数据实战
  9. 明清专题数据库:企业匹配官办书局距离、科举考试、商帮文化变量等
  10. UFIDA KSOA实施检查工具V1.0