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

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

### 概述

阅读大牛郭宇的文章

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

第二篇笔记见这里：[here](https://blog.jlab.tech/jlab-2)，主要是合约介绍。

我们继续合约部分

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

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

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

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

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

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

哦，郭宇推荐了：[Solmate](https://github.com/Rari-Capital/solmate) 也提供了一系列对应的 EIP 实现，同时，他们更注重合约的运行效率，优化了执行中的 gas 费用，并且每个合约依赖更少，阅读起来更加简单。

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

[Compond](https://compound.finance/) 是 DeFi 借贷领域的老牌项目，代码质量经过实践的检验，如果你的项目涉及到 DeFi 相关的需求，请务必阅读他们的合约代码。

[Uniswap](https://uniswap.org/) 是世界上最大的 DEX，他们的合约实现的非常优秀，无论你是否有 DeFi 方面的需求，我都建议你完整阅读他们的合约代码。

[Lens](https://lens.dev/) 是 [AAVE](https://aave.com/) 推出的以 NFT 为核心的新型社交合约开发套件（或者他们称之为社交合约协议）如果你的项目设计到 SocialFi，可以参考他们的代码实现。（**重点关注**）

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

郭宇些的关于 DAO 和链上治理， [CodeforDAO](https://twitter.com/codefordao) 的合约，在这个项目中，实现了传统的治理模式，多签积极治理与模块化合约。

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


