{"content":{"title":"终极 Solidity 课程","body":"# 学习 Solidity\r\n\r\n## 终极 Solidity 课程\r\n\r\n### 这门课程适合谁？\r\n\r\n此课程适合有经验的程序员。如果你还不知道怎么编程，建议先学习 Python 或 JavaScript，然后再回来。\r\n\r\n如果你是 Solidity 新手，请从头开始。\r\n\r\n然而，所有水平的 Solidity 开发者都可以从这里的资源中受益 —— 后面的章节讨论非常先进的主题，例如 Tornado Cash 的工作原理。我们还提供了对 Compound V3 代码库的唯一协议 walkthrough。\r\n\r\n![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/learn-solidity-1.png.webp)\r\n\r\n \r\n\r\n###  你可以信赖的质量\r\n\r\n虽然这并不是一门智能合约安全课程，但智能合约安全研究人员经常引用这里的资源。我们的理念是，安全源于对自己所做之事的深入理解。\r\n\r\n因此，我们不会仅仅为了列出很多话题而生成一个大清单。我们深入研究那些即使是经验丰富的 Solidity 工程师也可能忽视的非显而易见问题；通过我们 Solidity Bootcamp 的授课经验，我们知道知识差距常常在哪里。\r\n\r\n深入理解应是任何编写管理他人加密资产的代码的人的期望。因此，我们的教程优先生成强大的心理模型，即使这需要付出更多的努力。\r\n\r\n最后，我们鼓励你将我们的教程与其他在同一主题上的教程（以及那些由人工智能聊天机器人生成的内容）进行比较。\r\n\r\n我们相信你会对我们文章的深度、全面性和清晰度感到震撼。\r\n\r\n### 初学者 Solidity 教程\r\n\r\n不需要电子邮件！这为有经验的程序员准备，他们想快速切入主题并立即在高度优化的主题顺序中练习他们刚刚获得的信息。我们强调 Solidity 语言中的意外和不寻常的方面，同时略过那些我们可以合理假设对称职开发者是显而易见的内容。除了偶尔的幽默评论外，我们将教程做得尽可能简短（但不更短）。虽说这是一个 Solidity 初学者教程，但它是为经验丰富的编码者设计的。\r\n\r\n了解一种语言和了解一个领域是有区别的。知道 Python 并不意味着你是一名数据科学家，知道 JavaScript 并不意味着你是一名前端开发者，知道 Kotlin 也并不意味着你是一名 Android 开发者。同样，知道 Solidity 并不意味着你是以太坊智能合约开发者。然而，Solidity 是开发智能合约的先决条件。\r\n\r\n[**1\\. 开发环境**](https://learnblockchain.cn/article/11347)\r\n\r\n设置 Remix\r\n\r\n[**2\\. 固定大小数据类型**](https://learnblockchain.cn/article/11310)\r\n\r\nSolidity 是一种类型语言\r\n\r\n[**3\\. 设置 Foundry**](https://learnblockchain.cn/article/11305)\r\n\r\n2024 年最流行的开发框架\r\n\r\n[**4\\. 算术**](https://learnblockchain.cn/article/11336)\r\n\r\n在 Solidity 中进行数学运算的快速概述\r\n\r\n[**5\\. 如果语句**](https://learnblockchain.cn/article/11343)\r\n\r\n关于条件运算符的快速课程\r\n\r\n[**6\\. 循环**](https://learnblockchain.cn/article/11304)\r\n\r\n迭代运算符的语法\r\n\r\n[**7\\. 数组和字符串介绍**](https://learnblockchain.cn/article/11297)\r\n\r\n无限制大小的数据类型\r\n\r\n[**8\\. 嵌套数组**](https://learnblockchain.cn/article/11308)\r\n\r\n二维和三维数据类型\r\n\r\n[**9\\. 存储变量**](https://learnblockchain.cn/article/11311)\r\n\r\n在 Web3 中使用“数据库”\r\n\r\n[**10\\. 存储中的数组**](https://learnblockchain.cn/article/11285)\r\n\r\n持久性列表\r\n\r\n[**11\\. 映射**](https://learnblockchain.cn/article/11337)\r\n\r\n持久性列表\r\n\r\n[**12\\. 嵌套映射**](https://learnblockchain.cn/article/11346)\r\n\r\n具有多个层级的持久性哈希映射\r\n\r\n[**13\\. msg.sender 和 address(this)**](https://learnblockchain.cn/article/11307)\r\n\r\n确定哪个钱包在调用智能合约\r\n\r\n[**14\\. 构造函数**](https://learnblockchain.cn/article/11299)\r\n\r\n在部署时配置智能合约\r\n\r\n[**15\\. Require**](https://learnblockchain.cn/article/11348)\r\n\r\n保护智能合约免受恶意参数的影响\r\n\r\n[**16\\. ERC-20 代币**](https://learnblockchain.cn/article/11302)\r\n\r\n去中心化金融最基本构件的介绍\r\n\r\n[**17\\. 元组**](https://rareskills.io/learn-solidity/tuples)\r\n\r\n批量组合值\r\n\r\n[**18\\. 应用二进制接口（ABI 编码）**](https://learnblockchain.cn/article/11296)\r\n\r\nSolidity 推荐的二进制编码格式\r\n\r\n[**19\\. 合约调用其他合约**](https://learnblockchain.cn/article/11300)\r\n\r\n了解 Solidity 中的可组合性如何运作\r\n\r\n[**20\\. 代币交换迷你项目**](https://learnblockchain.cn/article/11306)\r\n\r\n你第一个 DeFi 应用\r\n\r\n[**21\\. 支付函数**](https://learnblockchain.cn/article/11309)\r\n\r\n通过函数调用转移以太币\r\n\r\n[**22\\. 接收**](https://learnblockchain.cn/article/11339)\r\n\r\n智能合约如何接收 ETH 交易\r\n\r\n[**23\\. Block.timestamp 和 block.number**](https://learnblockchain.cn/article/11298)\r\n\r\n今天的日期和时间是什么？\r\n\r\n[**24\\. 发出事件**](https://learnblockchain.cn/article/11303)\r\n\r\n在智能合约中留下审计痕迹\r\n\r\n[**25\\. 继承**](https://learnblockchain.cn/article/11338)\r\n\r\n在大型智能合约中组织代码\r\n\r\n[**26\\. 修饰符**](https://learnblockchain.cn/article/11345)\r\n\r\n为 Solidity 函数添加可重用功能\r\n\r\n[**27\\. 不可变变量**](https://learnblockchain.cn/article/11344)\r\n\r\n只写一次的变量\r\n\r\n[**28\\. 常量**](https://learnblockchain.cn/article/11340)\r\n\r\n如何避免“魔法数字”\r\n\r\n[**将 ERC-721 部署到 OpenSea**](https://learnblockchain.cn/article/11341)\r\n\r\n与世界分享你的 NFT\r\n\r\n[**使用 Foundry 启动和验证 NFT**](https://learnblockchain.cn/article/11301)\r\n\r\n开源 NFT 的代码\r\n\r\n[**以太坊的单位：wei、gwei 和 ether**](https://learnblockchain.cn/article/11342)\r\n\r\n处理大数字的方便关键词\r\n\r\n[**结构体**](https://learnblockchain.cn/article/12153)\r\n\r\n如何将数据保持在组内\r\n\r\n[**字符串**](https://learnblockchain.cn/article/12156)\r\n\r\n字符串组合、UTF-8 编码等\r\n\r\n[**Solidity 中的单元测试**](https://learnblockchain.cn/article/12155)\r\n\r\n如何在 Foundry 中编写专业的单元测试\r\n\r\n### 开始\r\n\r\n### 你的第一个 Solidity 项目\r\n\r\n在此时，你已经有足够的知识构建从头到尾的智能合约项目。如果你是 Solidity 新手，我们强烈建议你构建这些项目，而不是跳过它们。通过阅读教程，你只能学到这么多，有些知识只能通过实践获益。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-8.png.webp)](https://learnblockchain.cn/article/6430)\r\n\r\n[**专业 Solidity 风格指南**](https://learnblockchain.cn/article/6430)\r\n\r\n本文的目的是不重复官方 Solidity 风格指南，建议你阅读它。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-9.png.webp)](https://learnblockchain.cn/article/9510)\r\n\r\n[**常见的 Solidity 初学者错误**](https://learnblockchain.cn/article/9510)\r\n\r\n每个人都会犯错误，但有些错误比其他更常见。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-18.png.webp)](https://learnblockchain.cn/article/11275)\r\n\r\n[**Solidity 初学者项目**](https://learnblockchain.cn/article/11275)\r\n\r\n你现在有足够的知识来构建以下任何项目。知识来源于学习，但技能来自实践。\r\n\r\n### 中级主题\r\n\r\n### 代币 ERC、深入的整数及其他\r\n\r\n如果你已经了解一些 Solidity，但准备进入下一个层次，这一部分适合你开始。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-11.png.webp)](https://learnblockchain.cn/article/11248)\r\n\r\n[**检测地址是否为智能合约**](https://learnblockchain.cn/article/11248)\r\n\r\n本文描述了三种在 Solidity 中确定地址是否为智能合约的方法：\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-10.png.webp)](https://learnblockchain.cn/article/11229)\r\n\r\n[**Solidity 函数选择器**](https://learnblockchain.cn/article/11229)\r\n\r\n函数选择器是一个 4 字节标识符，Solidity 用于在底层识别函数。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-9.png.webp)](https://learnblockchain.cn/article/11249)\r\n\r\n[**ERC-721 设计和安全问题**](https://learnblockchain.cn/article/11249)\r\n\r\nERC721（或 ERC-721）是最广泛使用的以太坊非同质化代币标准。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/screenshot-remix-parse-id-1.png.webp)](https://learnblockchain.cn/article/10524)\r\n\r\n[**ERC-1155**](https://learnblockchain.cn/article/10524)\r\n\r\nERC-1155 代币可以在单个合约中保存多种同质和非同质代币。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-8.png.webp)](https://learnblockchain.cn/article/9536)\r\n\r\n[**ERC-4626**](https://learnblockchain.cn/article/9536)\r\n\r\nERC4626 是一个代币化保管箱标准，利用 ERC20 代币代表一些其他资产的份额。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-7.png.webp)](https://learnblockchain.cn/article/11250)\r\n\r\n[**ERC-721 可枚举**](https://learnblockchain.cn/article/11250)\r\n\r\n可枚举的 ERC721 是一种 ERC721，具有附加功能，使智能合约能够列出某地址拥有的所有 NFT。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-6.png.webp)](https://learnblockchain.cn/article/8549)\r\n\r\n[**ERC-1363**](https://learnblockchain.cn/article/8549)\r\n\r\nERC-1363 让智能合约能够检测并响应代币的传入转移。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-5.png.webp)](https://learnblockchain.cn/article/11251)\r\n\r\n[**Uint256 最大值**](https://learnblockchain.cn/article/11251)\r\n\r\nUint256 最大值可以使用 type(uint256).max 获取。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-4.png.webp)](https://learnblockchain.cn/article/11257)\r\n\r\n[**带符号整数**](https://learnblockchain.cn/article/11257)\r\n\r\nSolidity 带符号整数在智能合约中支持使用负数。本文记录了它们在 EVM 层面上的使用。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3.png.webp)](https://learnblockchain.cn/article/11233)\r\n\r\n[**Solidity staticcall EIP-214**](https://learnblockchain.cn/article/11233)\r\n\r\nstaticcall 类似于常规以太坊调用，但如果发生状态变化则会回滚。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12862-1.png)](https://learnblockchain.cn/article/11335)\r\n\r\n[**OpenZeppelin Ownable2Step**](https://learnblockchain.cn/article/11335)\r\n\r\nonlyOwner 修饰符可能是 Solidity 中最常见的模式之一。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12862.png.webp)](https://learnblockchain.cn/article/11264)\r\n\r\n[**测试内部函数**](https://learnblockchain.cn/article/11264)\r\n\r\n要测试一个内部 Solidity 函数，可以创建一个从被测试合约继承的子合约。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351-2.png.webp)](https://learnblockchain.cn/article/11239)\r\n\r\n[**Solidity 事件**](https://learnblockchain.cn/article/11239)\r\n\r\nSolidity 事件是 Ethereum 中最接近“打印”或“console.log”语句的东西。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2.png.webp)](https://learnblockchain.cn/article/11234)\r\n\r\n[**Solidity gasleft()**](https://learnblockchain.cn/article/11234)\r\n\r\n本文的目的是描述 Solidity gasleft() 函数的行为及其用途。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1.png.webp)](https://learnblockchain.cn/article/10525)\r\n\r\n[**在哪里寻找重入攻击**](https://learnblockchain.cn/article/10525)\r\n\r\n重入攻击只能在你的智能合约通过函数调用或发送以太币来调用另一个智能合约时发生。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287.png.webp)](https://learnblockchain.cn/article/11237)\r\n\r\n[**在 Solidity 中生成随机数**](https://learnblockchain.cn/article/11237)\r\n\r\n区块链上的随机性很棘手，因为区块链是确定的，而随机性需要非确定性（否则它变得可预测）。\r\n\r\n### DeFi 原语\r\n\r\n### 广泛使用的设计模式\r\n\r\n一些构建块和设计模式在 DeFi 应用中出现得如此频繁，以至于最好直接研究它们。不要只是阅读这些教程，练习结尾处的问题。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351.png.webp)](https://learnblockchain.cn/article/11265)\r\n\r\n[**MasterChef 和 Synthetix 的质押算法**](https://learnblockchain.cn/article/11265)\r\n\r\nMasterChef 和 Synthetix 的质押算法根据用户对池的时间加权贡献，在一个固定奖励池中分配给质押者。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3-1.png.webp)](https://learnblockchain.cn/article/8441)\r\n\r\n[**定点算术**](https://learnblockchain.cn/article/8441)\r\n\r\n定点数是一个整数，仅存储分数的分子——而分母隐含在其中。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-1.png.webp)](https://learnblockchain.cn/article/9548)\r\n\r\n[**闪电贷**](https://learnblockchain.cn/article/9548)\r\n\r\n闪电贷是智能合约之间的贷款，必须在同一交易中偿还。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-1.png.webp)](https://learnblockchain.cn/article/11259)\r\n\r\n[**Chainlink 价格喂价**](https://learnblockchain.cn/article/11259)\r\n\r\nChainlink 价格预言机是具有公共视图函数的智能合约，该函数返回以特定资产以美元计价的价格。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-12.png.webp)](https://learnblockchain.cn/article/11269)\r\n\r\n[**DeFi 利率是如何运作的**](https://learnblockchain.cn/article/11269)\r\n\r\n跟踪贷款人存款的直观方式是记录他们存入的 USDC 量及其存入时间。Compound V3 并不是这样做的。\r\n\r\n![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/image-282.png.webp)\r\n\r\n### Uniswap V2 Walkthrough\r\n\r\n### 最多次分叉的 DeFi 协议\r\n\r\nUniswap V2 是 DeFi 中分叉次数最多的协议，并且启发了更多项目。Uniswap V2 书是对该协议逐行检查的文档。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-7-1.png.webp)](https://learnblockchain.cn/article/10517)\r\n\r\n[**架构**](https://learnblockchain.cn/article/10517)\r\n\r\nUniswap 是一款 DeFi 应用，允许交易者以无信任方式进行代币兑换。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-6-1.png.webp)](https://learnblockchain.cn/article/11255)\r\n\r\n[**交换的价格影响**](https://learnblockchain.cn/article/11255)\r\n\r\n本文解释了如何在自动化市场做市商（AMM）中确定交易对的价格结算。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-5-1.png.webp)](https://learnblockchain.cn/article/11282)\r\n\r\n[**交换函数**](https://learnblockchain.cn/article/11282)\r\n\r\nUniswap V2 的交换函数设计巧妙，但许多开发者第一次遇到时发现其逻辑令人困惑。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-4-1.png.webp)](https://learnblockchain.cn/article/11266)\r\n\r\n[**铸造和销毁函数**](https://learnblockchain.cn/article/11266)\r\n\r\nUniswap V2 的生命周期的第一步是某人首次铸造流动性提供者（LP）代币（注入流动性，即代币到池中）。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3-2.png.webp)](https://learnblockchain.cn/article/11254)\r\n\r\n[**协议 mintFee**](https://learnblockchain.cn/article/11254)\r\n\r\nUniswap V2 设计为将六分之一的交换费用分配到协议中。由于交换费用为 0.3%，其中的六分之一为 0.05%，因此每笔交易的 0.05% 将汇入该协议。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-2.png.webp)](https://learnblockchain.cn/article/11276)\r\n\r\n[**TWAP 预言机**](https://learnblockchain.cn/article/11276)\r\n\r\n假设我们在一个池中有 1 Ether 和 2000 USDC。这意味着以太币的价格为 2000 USDC。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-2.png.webp)](https://learnblockchain.cn/article/11281)\r\n\r\n[**UniswapV2Library**](https://learnblockchain.cn/article/11281)\r\n\r\nUniswap V2 Library 简化了一些与配对合约的交互，并被路由合约广泛使用。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-13.png.webp)](https://learnblockchain.cn/article/11270)\r\n\r\n[**路由器**](https://learnblockchain.cn/article/11270)\r\n\r\n路由合约为安全铸造和销毁流动性提供者（LP）代币（添加和移除流动性）提供了用户面向的智能合约。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12862-1-1.png.webp)](https://learnblockchain.cn/article/11334)\r\n\r\n[**构建一个 Uniswap V2 克隆**](https://learnblockchain.cn/article/11334)\r\n\r\n使用现代 Solidity 从头重建 Uniswap V2 是非常有教育意义的（或者如果你真的想硬核的话，可以使用 Huff）。\r\n\r\n### 委托调用和代理\r\n\r\n### 关于可升级智能合约的网络上最全面的资源\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-8-1.png.webp)](https://learnblockchain.cn/article/8296)\r\n\r\n[**ABI 编码**](https://learnblockchain.cn/article/8296)\r\n\r\nABI 编码是用于向智能合约发起函数调用的数据格式。这也是智能合约在呼叫其他智能合约时编码数据的方式。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351-1-1.png.webp)](https://learnblockchain.cn/article/9303)\r\n\r\n[**EVM 存储**](https://learnblockchain.cn/article/9303)\r\n\r\n存储变量在底层的工作方式\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-7-2.png.webp)](https://learnblockchain.cn/article/11247)\r\n\r\n[**Solidity 中的底层调用**](https://learnblockchain.cn/article/11247)\r\n\r\n在 Solidity 中，合约可以通过两种方法调用其他合约：通过合约接口，这被认为是高层调用，或使用 call 方法，这是底层方法。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-6-2.png.webp)](https://learnblockchain.cn/article/11227)\r\n\r\n[**Delegatecall**](https://learnblockchain.cn/article/11227)\r\n\r\n本文详细解释了 delegatecall 的工作原理。以太坊虚拟机（EVM）提供了四个 OPCODE 用于在合约之间进行调用：\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-5-2.png.webp)](https://learnblockchain.cn/article/11240)\r\n\r\n[**ERC-1967**](https://learnblockchain.cn/article/11240)\r\n\r\nEIP 1967 是一个关于存储代理合约执行所需信息的标准。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-4-2.png.webp)](https://learnblockchain.cn/article/10350)\r\n\r\n[**ERC-7201**](https://learnblockchain.cn/article/10350)\r\n\r\nERC-7201（前称 EIP-7201）是通过一个称为命名空间的公共标识符将存储变量分组的标准。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3-3.png.webp)](https://learnblockchain.cn/article/11246)\r\n\r\n[**透明可升级代理**](https://learnblockchain.cn/article/11246)\r\n\r\n透明可升级代理是一个设计模式，用于在消除函数选择器冲突的可能性的同时升级代理。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-3.png.webp)](https://learnblockchain.cn/article/8823)\r\n\r\n[**信标代理**](https://learnblockchain.cn/article/8823)\r\n\r\nEIP 1967 是一个关于存储代理合约执行所需信息的标准。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-3.png.webp)](https://learnblockchain.cn/article/11333)\r\n\r\n[**克隆**](https://learnblockchain.cn/article/11333)\r\n\r\nEIP-1167，也被称为最小代理合约，是一种常用的 Solidity 模式，用于便宜地创建代理克隆。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-14.png.webp)](https://learnblockchain.cn/article/11277)\r\n\r\n[**Metaproxy 克隆**](https://learnblockchain.cn/article/11277)\r\n\r\n最小代理标准允许我们参数化克隆的创建，但这需要额外的初始化交易。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351-2-1.png.webp)](https://learnblockchain.cn/article/11253)\r\n\r\n[**Nodelegatecall**](https://learnblockchain.cn/article/11253)\r\n\r\nnodelegatecall 修饰符防止 delegatecall 被发送到合约。\r\n\r\n### Solidity 治理\r\n\r\n### DAO 如何在链上协调\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351-3.png.webp)](https://learnblockchain.cn/article/11273)\r\n\r\n[**ERC-20 快照**](https://learnblockchain.cn/article/11273)\r\n\r\nERC20 快照解决了双重投票的问题。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351-1.png.webp)](https://learnblockchain.cn/article/11274)\r\n\r\n[**ERC-20 投票**](https://learnblockchain.cn/article/11274)\r\n\r\nERC20 投票实际上并不会处理进行投票，它仍然是一个正常的 ERC20 代币，具有快照和委派投票的能力。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-4.png.webp)](https://learnblockchain.cn/article/11258)\r\n\r\n[**Solidity 治理**](https://learnblockchain.cn/article/11258)\r\n\r\n许多 DeFi 应用遵循的治理模式受到 Compound Finance 实现的深远影响。\r\n\r\n![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/image-283.png.webp)\r\n\r\n### Compound V3 Walkthrough\r\n\r\n### 探索最具影响力的借贷协议的代码库\r\n\r\nCompound V2 是最多次分叉的借贷协议，但不再使用，因此我们的 walkthrough 关注于 Compound V3。几乎所有现代借贷协议都从 Compound 获得灵感，因此如果你完全理解代码库，你将能够轻松理解其他 DeFi 借贷协议。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-7-3.png.webp)](https://learnblockchain.cn/article/11260)\r\n\r\n[**Compound V3 的架构**](https://learnblockchain.cn/article/11260)\r\n\r\nCompound 是 DeFi 中最重要的借贷协议之一，影响了多个区块链上几乎所有借贷协议的设计。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-6-3.png.webp)](https://learnblockchain.cn/article/11261)\r\n\r\n[**Compound V3 每秒利息**](https://learnblockchain.cn/article/11261)\r\n\r\nCompound V3 协议在秒的计量上计算利息。Compound V3 前端将其数值扩大到年份，以便于人们理解。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-5-3.png.webp)](https://learnblockchain.cn/article/11284)\r\n\r\n[**本金与现值和利率指标**](https://learnblockchain.cn/article/11284)\r\n\r\n跟踪贷款人存款的直观方法是记录他们存入的 USDC 数量和时间。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-4-3.png.webp)](https://learnblockchain.cn/article/11272)\r\n\r\n[**cUSDC V3（Comet）作为非标准的重置代币。 CometExt.sol**](https://learnblockchain.cn/article/11272)\r\n\r\nCompound V3 合约的行为类似于重置 ERC20 代币。重置代币是指其供应量以算法方式调整的代币，而不是固定的。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3-4.png.webp)](https://learnblockchain.cn/article/11279)\r\n\r\n[**Compound V3 的抵押、清算和储备**](https://learnblockchain.cn/article/11279)\r\n\r\n在这一章中，我们将研究以下关于 Compound V3 的主题：抵押评估。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-4.png.webp)](https://learnblockchain.cn/article/11262)\r\n\r\n[**Compound V3 奖励**](https://learnblockchain.cn/article/11262)\r\n\r\nCompound 按照借贷者和借款者在市场中占据的比例，以 COMP 代币发放奖励。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-5.png.webp)](https://learnblockchain.cn/article/11281)\r\n\r\n[**UniswapV2Library**](https://learnblockchain.cn/article/11281)\r\n\r\nUniswap V2 Library 简化了一些与配对合约的交互，并被路由合约广泛使用。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-19.png.webp)](https://learnblockchain.cn/article/11270)\r\n\r\n[**路由器**](https://learnblockchain.cn/article/11270)\r\n\r\n路由合约为安全铸造和销毁 LP 代币（添加和移除流动性）提供用户面向的智能合约。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-15.png.webp)](https://learnblockchain.cn/article/11268)\r\n\r\n[**Compound V3 中的 Bulkier**](https://learnblockchain.cn/article/11268)\r\n\r\nCompound V3 中的 Bulker 合约类似多重调用的合约，用于批处理多个交易。\r\n\r\n### gas 优化\r\n\r\n### 提高智能合约效率的终极指南\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-9.png.webp)](http://udemy.com/course/advanced-solidity-understanding-and-optimizing-gas-costs/?referralCode=C4684D6872713525E349)\r\n\r\n[**我们的 Gas 优化课程（Udemy）**](http://udemy.com/course/advanced-solidity-understanding-and-optimizing-gas-costs/?referralCode=C4684D6872713525E349)\r\n\r\nOG gas 优化课程。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-10.png.webp)](https://learnblockchain.cn/article/11283)\r\n\r\n[**以太坊访问列表交易**](https://learnblockchain.cn/article/11283)\r\n\r\n以太坊访问列表交易通过提前声明将访问哪些合约和存储槽，节省了跨合约调用的 gas。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-20.png.webp)](https://learnblockchain.cn/article/11235)\r\n\r\n[**终极 Solidity gas 优化技巧列表**](https://learnblockchain.cn/article/11235)\r\n\r\n超过 80 条 gas 优化技巧与窍门。\r\n\r\n### 底层编程和字节码\r\n\r\n### Solidity 编译器背后发生了什么\r\n\r\n我们的 Yul 课程（Udemy）\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3-5.png.webp)](https://learnblockchain.cn/article/5879)\r\n\r\n[**智能合约元数据**](https://learnblockchain.cn/article/5879)\r\n\r\n当 Solidity 为将要部署的智能合约生成字节码时，它在字节码末尾附加有关编译的元数据。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-5.png.webp)](https://learnblockchain.cn/article/11238)\r\n\r\n[**智能合约创建成本**](https://learnblockchain.cn/article/11238)\r\n\r\n智能合约创建成本可在 10 到 2000 美元之间，假设以太币的价格在 1500 到 2000 美元之间。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-6.png.webp)](https://learnblockchain.cn/article/11238)\r\n\r\n[**智能合约创建代码**](https://learnblockchain.cn/article/11238)\r\n\r\n本文解释了当构建以太坊智能合约时，字节码级别上发生了什么，以及构造函数参数是如何解释的。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-16.png.webp)](https://learnblockchain.cn/article/11230)\r\n\r\n[**EIP 150 和 63/64 的 gas 规则**](https://learnblockchain.cn/article/11230)\r\n\r\nEIP-150 或以太坊改进提案 150 是以太坊区块链的协议升级。\r\n\r\n### 超越单元测试的测试\r\n\r\n### 保护你的智能合约的工具\r\n\r\n智能合约中的错误可能代价高昂。因此，尽可能多地使用工具将最大化你在对抗漏洞和黑客时的成功机会。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-7.png.webp)](https://learnblockchain.cn/article/11267)\r\n\r\n[**在 Foundry 中进行不变检测**](https://learnblockchain.cn/article/11267)在本文中，我们将讨论不变性（invariants）以及如何使用 foundry 测试套件对 solidity 智能合约进行不变性测试。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-17.png.webp)](https://learnblockchain.cn/article/11271)\r\n\r\n[**突变测试（Mutation Testing）**](https://learnblockchain.cn/article/11271)\r\n\r\n突变测试是一种检查测试套件质量的方法，通过故意在代码中引入错误并确保测试能够捕捉到这些错误。\r\n\r\n### Solidity 进阶主题\r\n\r\n### 对于那些在 Solidity 旅程中更深入的人\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-1-8.png.webp)](https://learnblockchain.cn/article/11278)\r\n\r\n[**第二前像攻击（Second Preimage Attack）**](https://learnblockchain.cn/article/11278)\r\n\r\nMerkle 树中的第二前像攻击可能发生在当 Merkle 树中的一个中间节点被作为叶子节点呈现时。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Rectangle-2351-4.png.webp)](https://learnblockchain.cn/article/11236)\r\n\r\n[**预编译智能合约（Precompiled smart contracts）**](https://learnblockchain.cn/article/11236)\r\n\r\n以太坊的预编译在行为上就像嵌入以太坊协议中的智能合约。这九个预编译位于地址 0x01 到 0x09。\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-2-7.png.webp)](https://learnblockchain.cn/article/11280)\r\n\r\n[**Solidity 中的 RSA 签名（RSA Signatures in Solidity）**](https://learnblockchain.cn/article/11280)\r\n\r\n创建一个给特定地址赋予权限的合约有几种名称：空投（airdrops）、预售（presale）、白名单（whitelist）、允许名单（allowlist）等。\r\n\r\n### Tornado Cash 操作指南\r\n\r\n### 关于最重要的 Tornado Cash ，最深入的指南\r\n\r\n[![ALT TITLE](https://img.learnblockchain.cn/2025/02/26/Frame-12287-3-6.png.webp)](https://learnblockchain.cn/article/11263)\r\n\r\n[**Tornado Cash 是怎么工作的（How does tornado cash work）**](https://learnblockchain.cn/article/11263)\r\n\r\nTornado Cash 是一个加密货币智能合约混合器，使用户能够用一个地址存入加密货币，并用另一个钱包提款。\r\n\r\n \r\n \r\n\r\n>- 原文链接： [rareskills.io/learn-soli...](https://www.rareskills.io/learn-solidity)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/20722","address":null},"history":"bafkreihacxsmztglz5lrf2gzpg24jpfiopaksrd6lncdkcxm6ms2k7fusm","timestamp":1741331637,"version":1}