jLab:郭宇的Web3开发最佳实践阅读笔记-6
jLab:郭宇的最佳实践阅读笔记-6
概述
阅读大牛郭宇的文章
guoyu.mirror.xyz/RD-xkpoxasAU7x5MIJmiCX4gll..
第五篇笔记见这里:here,主要是合约开发的全流程实践。
本篇聊下客户端开发和后面的开发、测试以及生产环境调试。
这里大家应该更熟悉一些,在Web2已经很稳定了,例如React Native(跨平台)Flutter(跨平台)Swift(iOS)和 Java (Android),无论哪个方案,都有多个依赖库可选。
郭宇建议:
Flutter直接推荐了dart,另外web3dart,十一个dart package,与relay进行通信。
个人关注了下Flutter,跨越六个主流平台,虽然还未支持交叉编译,但一次编码六次部署,也很便捷了。
对于[Swift],推荐了web3.swift。
Java有Web3j。
以上,实际上我们依然遵循开头给出的DApp模式,实际上,是有可能突破的,不过,需要摸索和创新。
下面聊下所有软件工程都要面对的三个环境:开发、测试、生产。
研发过程的阶段不同,目标不同,流程操作不同,因此环境配置会有不同。
- 开发环境
因为DApp和传统软件不同,架构不是BS或者CS等,而是经过了几层周折,有一定成本。
以hardhat
为例,每次修改合约,都需要重新部署合约并且生成新合约地址,以及变更后的ABI的json文件。方式两种,1.使用插件,2.自己添加task进行复制。
hardhat-deploy
插件使用 --export-all
导出所有被发布的合约 ABI(包含地址信息)为一个完整的 json 文件。
{
"31337": [
{
"name": "localhost",
"chainId": "31337",
"contracts": {
"Membership": { address: "...", abi: [...] }
...
}
]
}
一个由 Chain ID(31337 是 hardhat Chain ID)索引的合约 ABI 清单,获取文件后可以动态构建合约调用。
注意:Provider/Signer
连接的网络,是哪个测试,还是正式网络,要进行判定。
hardhat是实时出块,实际网络有延时、队列,详细参考手册修改模拟。
- 测试和生产环境
本地网络开发方便快捷,完成业务开发,内测后,可以发布到几个线上测试网,Rinkeby, Kovan, Ropsten (以上几个合并后会逐步废弃、关闭)或者 Goerli (未来合并后,一段时间内会只有Goerli)。
npx hardhat deploy --network rinkeby
注意:测试目标是为了确保业务安全、符合预期、稳定流转,而发布线上测试网络,所有状态只能通过ABI调用,任何人都可以使用,因此确保你在发布之前使用了特殊的权限管理或是地址硬编码。(例如测试阶段只允许你的地址调用,或者需要授权等)
另外一个方式:
hardhat node --fork URI
fork 主网状态充当测试环境,因为在本地,又模拟了线上,可管理、安全保密且快速。参考这里:详细指南
如果和外部第三方合约交互,1. 需要再三确认调用的地址是否正确。 2. 大部分流行的协议或者 DEX 在几大公开测试网络都提供了测试合约,包括 OpenSea 在内。
###