Blockchain-zju / dapp-dev-guide

A guide for Dapp developing.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Dapp开发指南

本文档为协会内部的Dapp开发指南,遵循本文档开发的Dapp可完美接入协会钱包ZJUBCA.WALLET,同时也兼容主流钱包(如Scatter,MEET.ONE等)。

在开发协会内部Dapp或内外通用的Dapp时,请务必遵循本开发指南

基础设施

由于协会钱包主要基于EOS麒麟测试网(kylin testnet)。Dapp应优先适配kylin测试网。

前端

设计

原则

  1. 所有Dapp均以H5的形态接入协会钱包,因此Dapp应优先适配移动端。为了使Dapp更通用,我们推荐使用响应式页面
  2. 所有操作应是简洁、明确的,特别是需要签名授权的操作,在设计和流程上须简洁明了。
  3. 页面的所有Alert、Confirm等提示交互信息,不能用浏览器原生的,而必须采用UI库提供的组件

UI库

为了统一UI风格与减轻技术选型的成本,我们推荐以下UI框架:

技术

SDK

目前所有的Dapp均采用Scatter提供的SDK与区块链交互官方文档。协会钱包实现了Scatter几乎所有的API接口。不同于Scatter的socket通信方案,协会钱包与Dapp的交互采用iframe间消息通信的方案实现(受限于ionic技术本身),但对应用层来说开发体验一致。

为了减轻Dapp开发者的负担,做到code once, run everywhere,我们专门对主流桌面钱包Scatter的SDK进行了二次开发。

IMPORTANT!!!! 请Dapp开发者务必使用zjubca-scatter-js作为Dapp与区块链交互的SDK。 如此可实现兼容协会钱包与市面上所有实现了Scatter接口的主流钱包。

对于eos.js的版本选择,我们建议使用最新的v20.0.0

框架

考虑到Dapp的复杂度及开发周期,为了统一协会内技术栈,降低协会开发者开发成本,我们优先推荐vue.js

您也可选用下列技术框架:

注意事项

  1. Dapp内涉及发送交易的操作,均会拉起钱包原生组件对交易进行签名,再交由Dapp端发送至区块链节点,因此Dapp端须自行处理response
  2. Dapp所用的网络节点与钱包互相隔离,互不影响
  3. 切忌用自己的公网私钥作为测试用私钥!!!(也不要用别人的)

钱包

请务必使用Scatter桌面钱包进行开发调试!!!!!!

合约

请忘了solidity,C/C++ 值得你拥有。

开发

官方入门教程

为了更好的开发体验,我们推荐使用js4eos进行合约项目初始化与自动化测试。你也可以自行定义项目结构与开发范式。非常欢迎在开发体验上贡献实践经验

资源开销

  1. 由于测试网token可免费获得,出于对用户体验的考虑,我们建议合约中涉及的所有RAM开销均由合约开发者自行承担
  2. 开发者应合理设计合约代码以防止额外的资源开销。

合约安全

常见的合约攻击手段须避开。参考智能合约攻击方式汇总

部署

为了规范Dapp部署流程,降低开发和硬件成本,我们建议使用Github page进行部署。

  1. 在项目中安装gh-pages
  2. package.jsonscripts字段中增加"predeploy: npm run build"的命令(假如本地编译命令为npm run build)
  3. package.jsonscripts字段中增加"deploy:gh-pages -d <your build dir>"
  4. 之后每次部署只需运行npm run deploy即可。
  5. 前往仓库的setting下配置github page,source branch选择gh-pages

注:当配置了自定义域名时,会在gh-pages下生成CNAME文件。但由于每次部署是强制push,会导致CNAME丢失,因此建议将CNAME文件放至项目目录,每次部署时将CNAME自动拷贝到<your build dir>文件下

案例

About

A guide for Dapp developing.