Skip to main content

Command Palette

Search for a command to run...

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

Published
1 min read

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

概述

阅读大牛郭宇的文章

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

第二篇笔记见这里:here,主要是合约介绍。

我们继续合约部分

合约编程语言特征:Solidity虽然看起来像是JS语言,但是EVM上并没有V8引擎来做AST拆解和二进制编译,而是经过solc编译器,成为二进制机器码,放在链上,被EVM加载运行,所以,他不是动态语言。

那他的变量类型包括多种数据类型(不支持浮点数),复杂数据结构(例如 maparraystruct)、合约支持继承和多重继承(is)、原型方法重写(override)等。合约有特殊的构造函数,合约声明的函数支持修饰器语法。特殊地,合约中可以通过 payable 声明或显示转换来实现对原生 Gas token (ETH) 的资金操作。

对于复杂结构,例如Struct,多层Map,尽量不要太多嵌套,因为会带来超量的gas消耗,所以状态变量(存储在区块链上的)要清晰简单。

优秀的合约代码:因为考虑gas成本、存储成本、安全性、性能等问题,所以要写出优秀的代码,还是需要经过训练的。训练的方式很简单:学习优秀合约项目的设计思路和编码思维。

郭宇推荐的:OpenZeppelin 合约是进入 Web3 领域必须反复的阅读的圣经之一,自 2017 年以来,他们实现了大量的 EIP(以太坊改进提案),并成为了智能合约编码的实际标准。

在安全性、代码完成度、可维护性、注释和测试方面都做的很好,不过在gas的测试度量、线上gas节约效率方面,还有待提升(我推荐下郭宇的Foundry和Solmate)。

哦,郭宇推荐了:Solmate 也提供了一系列对应的 EIP 实现,同时,他们更注重合约的运行效率,优化了执行中的 gas 费用,并且每个合约依赖更少,阅读起来更加简单。

ERC721A 是知名 NFT 项目 Azuki 发布的 ERC721 改善版本,通过特定的位操作,他们实现了内存占用的优化,带来了批量 mint 低 Gas 费用的优势。如果你的项目涉及到大量 NFT 的铸造,可以参考它的合约代码来进行实现。(我印象721已经给出了改进,包含了721A的能力?)

Compond 是 DeFi 借贷领域的老牌项目,代码质量经过实践的检验,如果你的项目涉及到 DeFi 相关的需求,请务必阅读他们的合约代码。

Uniswap 是世界上最大的 DEX,他们的合约实现的非常优秀,无论你是否有 DeFi 方面的需求,我都建议你完整阅读他们的合约代码。

LensAAVE 推出的以 NFT 为核心的新型社交合约开发套件(或者他们称之为社交合约协议)如果你的项目设计到 SocialFi,可以参考他们的代码实现。(重点关注

我想给大家推荐的是 Zora v3 版本合约与 Gonsis safe,前者是著名的 NFT 交易市场退出的交易合约,后者是著名的多签名钱包合约实现。这些都是我们在使用智能合约能够完成的产品当中非常重要的组成部分。

郭宇些的关于 DAO 和链上治理, CodeforDAO 的合约,在这个项目中,实现了传统的治理模式,多签积极治理与模块化合约。

以上,SeeDAO如果要长期的发展,不是靠几个玩具一样的大赛作品或者快速搭建的Demo来建设Web3,而是需要充分使用专业的基础工具,合约体系,来搭建自己的应用,同样,对于开发者来说,会调用合约很简单,但是一个稳定、安全、可持续的大型应用,是需要我们扎实的时间投入和能力建设,因此武器库部分会持续关注、介绍和学习一些优秀的技术栈、合约库,共同学习,共同提高。

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!

web3-tech-stack