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模式,实际上,是有可能突破的,不过,需要摸索和创新。

下面聊下所有软件工程都要面对的三个环境:开发、测试、生产。

研发过程的阶段不同,目标不同,流程操作不同,因此环境配置会有不同。

  1. 开发环境

因为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是实时出块,实际网络有延时、队列,详细参考手册修改模拟。

  1. 测试和生产环境

本地网络开发方便快捷,完成业务开发,内测后,可以发布到几个线上测试网,Rinkeby, Kovan, Ropsten (以上几个合并后会逐步废弃、关闭)或者 Goerli (未来合并后,一段时间内会只有Goerli)。

npx hardhat deploy --network rinkeby

注意:测试目标是为了确保业务安全、符合预期、稳定流转,而发布线上测试网络,所有状态只能通过ABI调用,任何人都可以使用,因此确保你在发布之前使用了特殊的权限管理或是地址硬编码。(例如测试阶段只允许你的地址调用,或者需要授权等)

另外一个方式:

hardhat node --fork URI

fork 主网状态充当测试环境,因为在本地,又模拟了线上,可管理、安全保密且快速。参考这里:详细指南

如果和外部第三方合约交互,1. 需要再三确认调用的地址是否正确。 2. 大部分流行的协议或者 DEX 在几大公开测试网络都提供了测试合约,包括 OpenSea 在内。

水龙头:Multi,Rinkeby


###