Skip to main content

Command Palette

Search for a command to run...

jLab:郭宇的Web3开发最佳实践阅读笔记-6

Published
1 min read

jLab:郭宇的最佳实践阅读笔记-6

概述

阅读大牛郭宇的文章

https://guoyu.mirror.xyz/RD-xkpoxasAU7x5MIJmiCX4gll3Cs0pAd5iM258S1Ek

第五篇笔记见这里: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


###

More from this blog

让你的私钥随时更换,可以四处旅行

是的基于社交恢复和社区运行的TEE KMS,普通个体的私钥可以依赖多层安全机制:passkey+Email+社区KMS(硬件安全)+AA多签(可适配多种签名机制,增加抗量子签名模块)。听起来非常棒!是人类数字未来中需要的东西。下面是我的一个研究项目,进行中,有经验的大牛可以指点一下(嵌入式和硬件钱包开发、TEE、抗量子等等)。 STM32MP157F-DK2 Development Project STM32MP157F-DK2 开发项目 🇬🇧 Jump to English Vers...

Jan 25, 20263 min read

人性之光-以自由之名

以自由之名 v0.1.5 有点怪怪的标题,原谅理工男的简单和直接。 先分享一点感触和认知:某个角度看,人性是想象力、创造力和情感,是人类独有的特质。 人性是区别于AI和机器人,以及其他生命和造物的独有内核。人性是一种对自由的追求:发挥你的想象力、创造力,拥有自己的情感,是人存在的一种方式,这种方式,称为自由。 作为普通个体,想在人类社会拥有自由,除去国家和法律赋予的基础保障和基本权利之外,哈耶克有个观点是时间、空间和选择的范围,是自由的基础保障;而福柯则反向给出了规训的方式:时间空间和力量(并非...

Jan 25, 20261 min read

How to play with AI vibe coding?

我们要和 AI 沟通,要总结几个经验,供大家参考(血泪教学,迭代无数次): 三个重点 重设计、三层文档体系、渐进式开发。 第一点 最重要就是设计一定要占据你开发时间的一半以上,包括研究,包括和 AI 的交互讨论,包括提取一些专题,然后跟其他的 AI 交流生成深度的报告,包括自己阅读相关的报告和分析,以及一些范例的 repository。 第二点 要完整的文档体系,不管哪一种,都要跟随文档体系来去不断地迭代你的和 AI 交互的过程;我现在使用的是,嗯,三层的文档管理体系。第一层呢是backlog...

Aug 17, 20252 min read

It is Fun for me.

jFlow: from research to production 创新之路:最有趣的探索之路。 创新之路 Road of Exploration Research Input=Idea:描述你的 idea,进行严谨的论证过程,逻辑结构类似于缩小版本的 SCI 论文。通过分析论证,得出结论,是真正有价值创新。 output=Solution:定义你的产品,包括产品定位、目标用户、核心功能、商业模式,让团队、社区、早期投资者、用户、合作伙伴等,都快速了解你的产品的价值所在。 Devel...

Aug 12, 20251 min read

我的AI小助手:RAG 本地测试记录(updating...)

预期: 数据: 本地个人计划和隐私、正常论文相关的科研、业界跟踪和研究分析,三大类都存储在本地,不要流出个人电脑。 初步的7B模型(本人MiniMac的上限)进行大体分析。 可以使用外部deepseek和grok,claude等外部API,但沟通内容是隔离和脱敏的,最简单就是7B分析的结论,进行隐私脱敏(自行设定脱敏规则)和单独目录存储(独立知识库),这个动作是离线断网进行。 然后针对沟通外部的独立知识库,可以充分利用外部大模型能力。 个人计划是使用雷电连接mac book和mac m...

Mar 15, 20251 min read

jLab

69 posts

It is my Lab for curiosity!