终极 Solidity 课程

这篇文章介绍了RareSkills提供的Solidity课程,适用于不同水平的开发者,涵盖了从基础到高级的多个主题,如Tornado Cash、Compound V3等技术细节。课程内容免费提供,旨在通过深度理解和优化代码来提升开发者的技能。

学习 Solidity

终极 Solidity 课程

这门课程适合谁?

此课程适合有经验的程序员。如果你还不知道怎么编程,建议先学习 Python 或 JavaScript,然后再回来。

如果你是 Solidity 新手,请从头开始。

然而,所有水平的 Solidity 开发者都可以从这里的资源中受益 —— 后面的章节讨论非常先进的主题,例如 Tornado Cash 的工作原理。我们还提供了对 Compound V3 代码库的唯一协议 walkthrough。

ALT TITLE

你可以信赖的质量

虽然这并不是一门智能合约安全课程,但智能合约安全研究人员经常引用这里的资源。我们的理念是,安全源于对自己所做之事的深入理解。

因此,我们不会仅仅为了列出很多话题而生成一个大清单。我们深入研究那些即使是经验丰富的 Solidity 工程师也可能忽视的非显而易见问题;通过我们 Solidity Bootcamp 的授课经验,我们知道知识差距常常在哪里。

深入理解应是任何编写管理他人加密资产的代码的人的期望。因此,我们的教程优先生成强大的心理模型,即使这需要付出更多的努力。

最后,我们鼓励你将我们的教程与其他在同一主题上的教程(以及那些由人工智能聊天机器人生成的内容)进行比较。

我们相信你会对我们文章的深度、全面性和清晰度感到震撼。

初学者 Solidity 教程

不需要电子邮件!这为有经验的程序员准备,他们想快速切入主题并立即在高度优化的主题顺序中练习他们刚刚获得的信息。我们强调 Solidity 语言中的意外和不寻常的方面,同时略过那些我们可以合理假设对称职开发者是显而易见的内容。除了偶尔的幽默评论外,我们将教程做得尽可能简短(但不更短)。虽说这是一个 Solidity 初学者教程,但它是为经验丰富的编码者设计的。

了解一种语言和了解一个领域是有区别的。知道 Python 并不意味着你是一名数据科学家,知道 JavaScript 并不意味着你是一名前端开发者,知道 Kotlin 也并不意味着你是一名 Android 开发者。同样,知道 Solidity 并不意味着你是以太坊智能合约开发者。然而,Solidity 是开发智能合约的先决条件。

1. 开发环境

设置 Remix

2. 固定大小数据类型

Solidity 是一种类型语言

3. 设置 Foundry

2024 年最流行的开发框架

4. 算术

在 Solidity 中进行数学运算的快速概述

5. 如果语句

关于条件运算符的快速课程

6. 循环

迭代运算符的语法

7. 数组和字符串介绍

无限制大小的数据类型

8. 嵌套数组

二维和三维数据类型

9. 存储变量

在 Web3 中使用“数据库”

10. 存储中的数组

持久性列表

11. 映射

持久性列表

12. 嵌套映射

具有多个层级的持久性哈希映射

13. msg.sender 和 address(this)

确定哪个钱包在调用智能合约

14. 构造函数

在部署时配置智能合约

15. Require

保护智能合约免受恶意参数的影响

16. ERC-20 代币

去中心化金融最基本构件的介绍

17. 元组

批量组合值

18. 应用二进制接口(ABI 编码)

Solidity 推荐的二进制编码格式

19. 合约调用其他合约

了解 Solidity 中的可组合性如何运作

20. 代币交换迷你项目

你第一个 DeFi 应用

21. 支付函数

通过函数调用转移以太币

22. 接收

智能合约如何接收 ETH 交易

23. Block.timestamp 和 block.number

今天的日期和时间是什么?

24. 发出事件

在智能合约中留下审计痕迹

25. 继承

在大型智能合约中组织代码

26. 修饰符

为 Solidity 函数添加可重用功能

27. 不可变变量

只写一次的变量

28. 常量

如何避免“魔法数字”

将 ERC-721 部署到 OpenSea

与世界分享你的 NFT

使用 Foundry 启动和验证 NFT

开源 NFT 的代码

以太坊的单位:wei、gwei 和 ether

处理大数字的方便关键词

结构体

如何将数据保持在组内

字符串

字符串组合、UTF-8 编码等

Solidity 中的单元测试

如何在 Foundry 中编写专业的单元测试

开始

你的第一个 Solidity 项目

在此时,你已经有足够的知识构建从头到尾的智能合约项目。如果你是 Solidity 新手,我们强烈建议你构建这些项目,而不是跳过它们。通过阅读教程,你只能学到这么多,有些知识只能通过实践获益。

ALT TITLE

专业 Solidity 风格指南

本文的目的是不重复官方 Solidity 风格指南,建议你阅读它。

ALT TITLE

常见的 Solidity 初学者错误

每个人都会犯错误,但有些错误比其他更常见。

ALT TITLE

Solidity 初学者项目

你现在有足够的知识来构建以下任何项目。知识来源于学习,但技能来自实践。

中级主题

代币 ERC、深入的整数及其他

如果你已经了解一些 Solidity,但准备进入下一个层次,这一部分适合你开始。

ALT TITLE

检测地址是否为智能合约

本文描述了三种在 Solidity 中确定地址是否为智能合约的方法:

ALT TITLE

Solidity 函数选择器

函数选择器是一个 4 字节标识符,Solidity 用于在底层识别函数。

ALT TITLE

ERC-721 设计和安全问题

ERC721(或 ERC-721)是最广泛使用的以太坊非同质化代币标准。

ALT TITLE

ERC-1155

ERC-1155 代币可以在单个合约中保存多种同质和非同质代币。

ALT TITLE

ERC-4626

ERC4626 是一个代币化保管箱标准,利用 ERC20 代币代表一些其他资产的份额。

ALT TITLE

ERC-721 可枚举

可枚举的 ERC721 是一种 ERC721,具有附加功能,使智能合约能够列出某地址拥有的所有 NFT。

ALT TITLE

ERC-1363

ERC-1363 让智能合约能够检测并响应代币的传入转移。

ALT TITLE

Uint256 最大值

Uint256 最大值可以使用 type(uint256).max 获取。

ALT TITLE

带符号整数

Solidity 带符号整数在智能合约中支持使用负数。本文记录了它们在 EVM 层面上的使用。

ALT TITLE

Solidity staticcall EIP-214

staticcall 类似于常规以太坊调用,但如果发生状态变化则会回滚。

ALT TITLE

OpenZeppelin Ownable2Step

onlyOwner 修饰符可能是 Solidity 中最常见的模式之一。

ALT TITLE

测试内部函数

要测试一个内部 Solidity 函数,可以创建一个从被测试合约继承的子合约。

ALT TITLE

Solidity 事件

Solidity 事件是 Ethereum 中最接近“打印”或“console.log”语句的东西。

ALT TITLE

Solidity gasleft()

本文的目的是描述 Solidity gasleft() 函数的行为及其用途。

ALT TITLE

在哪里寻找重入攻击

重入攻击只能在你的智能合约通过函数调用或发送以太币来调用另一个智能合约时发生。

ALT TITLE

在 Solidity 中生成随机数

区块链上的随机性很棘手,因为区块链是确定的,而随机性需要非确定性(否则它变得可预测)。

DeFi 原语

广泛使用的设计模式

一些构建块和设计模式在 DeFi 应用中出现得如此频繁,以至于最好直接研究它们。不要只是阅读这些教程,练习结尾处的问题。

ALT TITLE

MasterChef 和 Synthetix 的质押算法

MasterChef 和 Synthetix 的质押算法根据用户对池的时间加权贡献,在一个固定奖励池中分配给质押者。

ALT TITLE

定点算术

定点数是一个整数,仅存储分数的分子——而分母隐含在其中。

ALT TITLE

闪电贷

闪电贷是智能合约之间的贷款,必须在同一交易中偿还。

ALT TITLE

Chainlink 价格喂价

Chainlink 价格预言机是具有公共视图函数的智能合约,该函数返回以特定资产以美元计价的价格。

ALT TITLE

DeFi 利率是如何运作的

跟踪贷款人存款的直观方式是记录他们存入的 USDC 量及其存入时间。Compound V3 并不是这样做的。

ALT TITLE

Uniswap V2 Walkthrough

最多次分叉的 DeFi 协议

Uniswap V2 是 DeFi 中分叉次数最多的协议,并且启发了更多项目。Uniswap V2 书是对该协议逐行检查的文档。

ALT TITLE

架构

Uniswap 是一款 DeFi 应用,允许交易者以无信任方式进行代币兑换。

ALT TITLE

交换的价格影响

本文解释了如何在自动化市场做市商(AMM)中确定交易对的价格结算。

ALT TITLE

交换函数

Uniswap V2 的交换函数设计巧妙,但许多开发者第一次遇到时发现其逻辑令人困惑。

ALT TITLE

铸造和销毁函数

Uniswap V2 的生命周期的第一步是某人首次铸造流动性提供者(LP)代币(注入流动性,即代币到池中)。

ALT TITLE

协议 mintFee

Uniswap V2 设计为将六分之一的交换费用分配到协议中。由于交换费用为 0.3%,其中的六分之一为 0.05%,因此每笔交易的 0.05% 将汇入该协议。

ALT TITLE

TWAP 预言机

假设我们在一个池中有 1 Ether 和 2000 USDC。这意味着以太币的价格为 2000 USDC。

ALT TITLE

UniswapV2Library

Uniswap V2 Library 简化了一些与配对合约的交互,并被路由合约广泛使用。

ALT TITLE

路由器

路由合约为安全铸造和销毁流动性提供者(LP)代币(添加和移除流动性)提供了用户面向的智能合约。

ALT TITLE

构建一个 Uniswap V2 克隆

使用现代 Solidity 从头重建 Uniswap V2 是非常有教育意义的(或者如果你真的想硬核的话,可以使用 Huff)。

委托调用和代理

关于可升级智能合约的网络上最全面的资源

ALT TITLE

ABI 编码

ABI 编码是用于向智能合约发起函数调用的数据格式。这也是智能合约在呼叫其他智能合约时编码数据的方式。

ALT TITLE

EVM 存储

存储变量在底层的工作方式

ALT TITLE

Solidity 中的底层调用

在 Solidity 中,合约可以通过两种方法调用其他合约:通过合约接口,这被认为是高层调用,或使用 call 方法,这是底层方法。

ALT TITLE

Delegatecall

本文详细解释了 delegatecall 的工作原理。以太坊虚拟机(EVM)提供了四个 OPCODE 用于在合约之间进行调用:

ALT TITLE

ERC-1967

EIP 1967 是一个关于存储代理合约执行所需信息的标准。

ALT TITLE

ERC-7201

ERC-7201(前称 EIP-7201)是通过一个称为命名空间的公共标识符将存储变量分组的标准。

ALT TITLE

透明可升级代理

透明可升级代理是一个设计模式,用于在消除函数选择器冲突的可能性的同时升级代理。

ALT TITLE

信标代理

EIP 1967 是一个关于存储代理合约执行所需信息的标准。

ALT TITLE

克隆

EIP-1167,也被称为最小代理合约,是一种常用的 Solidity 模式,用于便宜地创建代理克隆。

ALT TITLE

Metaproxy 克隆

最小代理标准允许我们参数化克隆的创建,但这需要额外的初始化交易。

ALT TITLE

Nodelegatecall

nodelegatecall 修饰符防止 delegatecall 被发送到合约。

Solidity 治理

DAO 如何在链上协调

ALT TITLE

ERC-20 快照

ERC20 快照解决了双重投票的问题。

ALT TITLE

ERC-20 投票

ERC20 投票实际上并不会处理进行投票,它仍然是一个正常的 ERC20 代币,具有快照和委派投票的能力。

ALT TITLE

Solidity 治理

许多 DeFi 应用遵循的治理模式受到 Compound Finance 实现的深远影响。

ALT TITLE

Compound V3 Walkthrough

探索最具影响力的借贷协议的代码库

Compound V2 是最多次分叉的借贷协议,但不再使用,因此我们的 walkthrough 关注于 Compound V3。几乎所有现代借贷协议都从 Compound 获得灵感,因此如果你完全理解代码库,你将能够轻松理解其他 DeFi 借贷协议。

ALT TITLE

Compound V3 的架构

Compound 是 DeFi 中最重要的借贷协议之一,影响了多个区块链上几乎所有借贷协议的设计。

ALT TITLE

Compound V3 每秒利息

Compound V3 协议在秒的计量上计算利息。Compound V3 前端将其数值扩大到年份,以便于人们理解。

ALT TITLE

本金与现值和利率指标

跟踪贷款人存款的直观方法是记录他们存入的 USDC 数量和时间。

ALT TITLE

cUSDC V3(Comet)作为非标准的重置代币。 CometExt.sol

Compound V3 合约的行为类似于重置 ERC20 代币。重置代币是指其供应量以算法方式调整的代币,而不是固定的。

ALT TITLE

Compound V3 的抵押、清算和储备

在这一章中,我们将研究以下关于 Compound V3 的主题:抵押评估。

ALT TITLE

Compound V3 奖励

Compound 按照借贷者和借款者在市场中占据的比例,以 COMP 代币发放奖励。

ALT TITLE

UniswapV2Library

Uniswap V2 Library 简化了一些与配对合约的交互,并被路由合约广泛使用。

ALT TITLE

路由器

路由合约为安全铸造和销毁 LP 代币(添加和移除流动性)提供用户面向的智能合约。

ALT TITLE

Compound V3 中的 Bulkier

Compound V3 中的 Bulker 合约类似多重调用的合约,用于批处理多个交易。

gas 优化

提高智能合约效率的终极指南

ALT TITLE

我们的 Gas 优化课程(Udemy)

OG gas 优化课程。

ALT TITLE

以太坊访问列表交易

以太坊访问列表交易通过提前声明将访问哪些合约和存储槽,节省了跨合约调用的 gas。

ALT TITLE

终极 Solidity gas 优化技巧列表

超过 80 条 gas 优化技巧与窍门。

底层编程和字节码

Solidity 编译器背后发生了什么

我们的 Yul 课程(Udemy)

ALT TITLE

智能合约元数据

当 Solidity 为将要部署的智能合约生成字节码时,它在字节码末尾附加有关编译的元数据。

ALT TITLE

智能合约创建成本

智能合约创建成本可在 10 到 2000 美元之间,假设以太币的价格在 1500 到 2000 美元之间。

ALT TITLE

智能合约创建代码

本文解释了当构建以太坊智能合约时,字节码级别上发生了什么,以及构造函数参数是如何解释的。

ALT TITLE

EIP 150 和 63/64 的 gas 规则

EIP-150 或以太坊改进提案 150 是以太坊区块链的协议升级。

超越单元测试的测试

保护你的智能合约的工具

智能合约中的错误可能代价高昂。因此,尽可能多地使用工具将最大化你在对抗漏洞和黑客时的成功机会。

ALT TITLE

在 Foundry 中进行不变检测在本文中,我们将讨论不变性(invariants)以及如何使用 foundry 测试套件对 solidity 智能合约进行不变性测试。

ALT TITLE

突变测试(Mutation Testing)

突变测试是一种检查测试套件质量的方法,通过故意在代码中引入错误并确保测试能够捕捉到这些错误。

Solidity 进阶主题

对于那些在 Solidity 旅程中更深入的人

ALT TITLE

第二前像攻击(Second Preimage Attack)

Merkle 树中的第二前像攻击可能发生在当 Merkle 树中的一个中间节点被作为叶子节点呈现时。

ALT TITLE

预编译智能合约(Precompiled smart contracts)

以太坊的预编译在行为上就像嵌入以太坊协议中的智能合约。这九个预编译位于地址 0x01 到 0x09。

ALT TITLE

Solidity 中的 RSA 签名(RSA Signatures in Solidity)

创建一个给特定地址赋予权限的合约有几种名称:空投(airdrops)、预售(presale)、白名单(whitelist)、允许名单(allowlist)等。

Tornado Cash 操作指南

关于最重要的 Tornado Cash ,最深入的指南

ALT TITLE

Tornado Cash 是怎么工作的(How does tornado cash work)

Tornado Cash 是一个加密货币智能合约混合器,使用户能够用一个地址存入加密货币,并用另一个钱包提款。

  • 原文链接: rareskills.io/learn-soli...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/