文章目录
- 前言
-
- [Solidity 知识点速记整理 - (2026年) (1 - 40)](#Solidity 知识点速记整理 - (2026年) (1 - 40))
-
- 1、函数可见性
- 2、合约大小限制
- [3、create vs create2](#3、create vs create2)
- [4、Solidity 0.8.0 算术运算](#4、Solidity 0.8.0 算术运算)
- [5、地址列表:Map vs 数组](#5、地址列表:Map vs 数组)
- 6、以太坊哈希函数
- [7、Ether 单位换算](#7、Ether 单位换算)
- [8、assert vs require](#8、assert vs require)
- [9、Checks-Effects-Interactions 模式](#9、Checks-Effects-Interactions 模式)
- 10、以太坊验证节点
- [11、Fallback vs Receive](#11、Fallback vs Receive)
- [12、以太坊区块 Gas 限制](#12、以太坊区块 Gas 限制)
- [13、tx.origin vs msg.sender](#13、tx.origin vs msg.sender)
- [14、 view/pure 修饰符区别](#14、 view/pure 修饰符区别)
- [15、ERC721 中 transferFrom/safeTransferFrom 区别](#15、ERC721 中 transferFrom/safeTransferFrom 区别)
- [16、ERC1155 转 ERC721 步骤](#16、ERC1155 转 ERC721 步骤)
- [17、 modifier 修饰符作用](#17、 modifier 修饰符作用)
- [18、 uint256 最大存储值](#18、 uint256 最大存储值)
- 19、核心代币标准定义
- 20、利率基础
- [21、ETH 转账函数(核心考点)](#21、ETH 转账函数(核心考点))
- [22、Solidity 省 gas 高效循环技巧](#22、Solidity 省 gas 高效循环技巧)
- [23、Solidity 整数类型](#23、Solidity 整数类型)
- [24、EIP-1559 基础手续费(base fee)规则](#24、EIP-1559 基础手续费(base fee)规则)
- [25、 冷读 / 热读](#25、 冷读 / 热读)
- [26、AMM 资产定价](#26、AMM 资产定价)
- [27、 接口合法函数修饰符](#27、 接口合法函数修饰符)
- [28、 函数排序(Solidity )](#28、 函数排序(Solidity ))
- [29、函数修饰符排序(Solidity 风格指南)](#29、函数修饰符排序(Solidity 风格指南))
- [30、时间测量关键字 / 单位](#30、时间测量关键字 / 单位)
- 31、存储槽与地址占用
- 32、两类拍卖核心
- [33、Solidity 认证](#33、Solidity 认证)
- 34、闪电贷
- 35、重入攻击
- 36、无限循环限制与解决
- [37、 访问控制(Access Control)](#37、 访问控制(Access Control))
- [38、抢先交易(Front Running)](#38、抢先交易(Front Running))
- 39、提交揭示方案(CRS)
- [40、 abi.encodePacked 漏洞](#40、 abi.encodePacked 漏洞)
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
Solidity 知识点速记整理 - (2026年) (1 - 40)

1、函数可见性
bash
1. private:仅当前合约可用,子合约不可调用
2. internal:当前合约 + 子合约可调用
3. public:外部、当前 / 子合约均可调用(自动生成 getter)
4. external:仅外部调用(合约内需 this. 调用),接口函数推荐用
2、合约大小限制
bash
EIP-3860 移除初始化代码 24KB 限制,运行时代码仍限 24KB,解决复杂合约部署超限问题
3、create vs create2
bash
1. create:地址 = 部署者地址 + nonce 哈希,不可预测
2. create2:地址 = 部署者地址 + salt + 字节码哈希,可提前预测地址
4、Solidity 0.8.0 算术运算
bash
1. 0.8.0+:默认开启溢出检查,溢出直接回滚
2. 0.8.0-:允许溢出无报错
3. 兼容:0.8.0+ 用 unchecked 块关闭溢出检查(降 Gas)
5、地址列表:Map vs 数组
bash
1. Map:O (1) 快速判断地址是否存在,无法直接遍历,适合大型列表
2. 数组:O (n) 遍历,内存连续易遍历,适合小型列表
3. 最优:Map + 数组(兼顾快速判断 + 遍历)
6、以太坊哈希函数
bash
核心为 Keccak-256(SHA-3 标准),用于地址、交易 / 区块 / 合约代码哈希计算
7、Ether 单位换算
bash
1 Ether = 10¹⁸ Wei(核心记忆点)
8、assert vs require
bash
1. 用途:
* require:业务层校验(输入 / 权限 / 余额),可自定义错误提示
* assert:代码逻辑校验(理论永真),失败代表合约有 bug
2. Gas:0.8.0+ 二者触发均返还剩余 Gas
9、Checks-Effects-Interactions 模式
bash
安全编程范式,执行顺序:先校验条件→再改合约状态→最后外部交互,防止重入攻击
10、以太坊验证节点
bash
每个验证者最低质押 32 ETH;节点需长期在线并正常履行区块提议、共识签名等职责,合规运行可获得链上验证奖励;若离线失职或恶意作恶,会触发罚没(Slashing) 扣除质押 ETH。
11、Fallback vs Receive
bash
1. 共性:均为 payable 回调函数,处理 ETH 接收 / 无匹配函数调用
2. 触发:
* Receive:仅接收无数据的 ETH 时触发
* Fallback:调用无匹配函数 / 接收带数据的 ETH 时触发
12、以太坊区块 Gas 限制
bash
1. 以太坊 PoS 机制下,区块 Gas 限制由全网验证者节点投票动态调整,不再由 PoW 时代的矿工决定。
2. 上海升级仅涉及质押 ETH 提款逻辑,未涉及区块 Gas 限制规则及数值调整;以太坊历史长期区块 Gas 上限为3000 万,当前主网已不再沿用该数值。
13、tx.origin vs msg.sender
bash
1. tx.origin:交易原始发起者(全链路最初方),有安全风险,禁止权限控制使用
2. msg.sender:直接调用者(上一级主体),权限控制核心用
3. 示例:John→合约 A→合约 B,B 中 msg.sender=A,tx.origin=John
14、 view/pure 修饰符区别
bash
* view:可访问合约状态变量,不可修改
* pure:既不可访问、也不可修改状态变量
15、ERC721 中 transferFrom/safeTransferFrom 区别
bash
* 均为代币转账函数,safeTransferFrom 带安全校验,transferFrom 无
* safeTransferFrom:校验接收合约是否实现 onERC721Receive 且返回指定魔术数,不满足则抛异常回滚,避免代币丢失
* transferFrom:无校验,可能导致代币永久丢失
16、ERC1155 转 ERC721 步骤
bash
1). 部署新 ERC721 合约
2). 为每个 ERC1155 代币生成唯一 ERC721 代币
3). 将 ERC1155 代币所有权转移至对应 ERC721 代币
4). 销毁原始 ERC1155 代币
17、 modifier 修饰符作用
bash
* 可在函数执行前 / 后执行自定义逻辑,增强函数功能
* 提取通用操作,提升编码效率、降低耦合
* 控制函数访问权限(如校验合约所有者),校验失败则停止执行并回滚,防未授权访问
18、 uint256 最大存储值
bash
2 的 256 次方减 1;n 位无符号整数最大值为 2ⁿ-1(如 uint2 最大值为 3)
19、核心代币标准定义
bash
ERC20:同质化代币标准(如 USDT、ETH),所有代币属性完全相同,可互相替换,核心用于实现代币转账、余额查询、授权转账等基础功能。
ERC721:非同质化代币标准(NFT),每个代币唯一且不可替换(如数字藏品、游戏道具),每个代币有唯一 ID 标识,核心特征是 "唯一性"。
ERC1155:多标准代币标准,兼容同质化 + 非同质化特性,可同时管理多种代币(如 1 个 ERC1155 合约可发行同质化代币 + 不同 NFT),相比 ERC20/ERC721 更高效,减少合约部署成本。
20、利率基础
bash
* 固定利率:贷款期限内利率保持不变
* 浮动利率:随市场利率调整,锚定央行最优惠利率 / Libor 等基准利率
21、ETH 转账函数(核心考点)
bash
* transfer/send:均有 2300gas 限制,未实现回退函数 / 回退函数超 gas 则转账失败、操作回滚;send 额外返回布尔值标识成败,二者均因限制被判定为不安全,不建议使用
* call 函数:推荐使用,无 gas 限制、支持任意地址转账 / 指定燃气量;注意防范重入攻击
22、Solidity 省 gas 高效循环技巧
bash
1. 杜绝无限循环,避免重复计算、复杂嵌套循环
2. 避开除法 / 取模等高耗 gas 操作,不使用大数组(用 maps 替代)
3. 循环中常量 / 不可变变量,用 constant/immutable 关键字声明
23、Solidity 整数类型
bash
无符号整型(非负):
uint8、uint16、uint32、uint64、uint128、uint256
有符号整型(可正负):
int8、int16、int32、int64、int128、int256
24、EIP-1559 基础手续费(base fee)规则
bash
由以太坊网络通过base fee tracker 算法,根据交易需求、区块大小动态调整;
当前手续费>目标则下调,<目标则上调,匹配网络实时交易状态。
25、 冷读 / 热读
bash
冷读:首次读取存储变量,从存储区读,Gas 成本高;
热读:重复读取,从缓存读,Gas 成本低;均由 EVM 自动处理
26、AMM 资产定价
bash
核心恒定乘积算法a*b=k,a 兑换为 b 的数量按该算法推导计算(无手续费)
27、 接口合法函数修饰符
bash
仅支持 4 种:
external(仅外部调用)、
view(不修改合约状态)、
pure(不读写合约状态)、
payable(可接收以太币)
28、 函数排序(Solidity )
bash
函数顺序必须按以下排列:
构造函数 (constructor)
接收函数 (receive())
回退函数 (fallback())
external 函数
public 函数
internal 函数
private 函数
同一可见性组内遵循:普通函数 → view → pure
29、函数修饰符排序(Solidity 风格指南)
bash
Solidity 函数修饰符排序规范:
可见性(external/public/internal/private)
override
virtual
可变性(view/pure)
自定义修饰符
30、时间测量关键字 / 单位
bash
* 时间戳:now(等价block.timestamp,秒级);block.number返回当前区块号
* 原生时间单位:seconds/minutes/hours/days/weeks/years,可与数字搭配使用
31、存储槽与地址占用
bash
1. address 类型占 20 字节(160 位);
2. 以太坊每个存储槽固定为 32 字节(256 位);
3. 一个 address 占用 160 位后,同一个存储槽还剩余 96 位;
4. 若后续变量大小 ≤ 96 位,Solidity 会自动将其与 address 打包存入同一个存储槽。
32、两类拍卖核心
bash
荷兰式拍卖:从高价逐步降价,第一个出价即成交,适合大宗、艺术品、易降价清库存场景。
英式拍卖:从起拍价逐步加价,最高出价者成交,适用于房产、豪车、稀缺标的竞拍。
33、Solidity 认证
bash
tx.origin 做权限校验易遭钓鱼攻击,优先用 msg.sender
34、闪电贷
bash
闪电贷是 DeFi 无抵押借贷,遵循同一笔交易内必须借还闭环,零抵押、资金体量灵活;常被用于套利、清算、合约漏洞攻击。
35、重入攻击
bash
原理:利用接收 ETH 的 fallback/receive 函数,在转账未更新状态时递归再次调用合约,盗取资产。
防御:
严格遵循 检查 - 效果 - 交互 模式(先改状态、后转账);
使用 ReentrancyGuard 防重入修饰器;
36、无限循环限制与解决
bash
1. 天然限制:受燃气费上限、栈深度限制,超量直接报燃气不足
2. 代码处理:循环内加计数器,达阈值主动终止
37、 访问控制(Access Control)
bash
作用:限制合约敏感函数与状态变量的访问权限,防止未授权调用。
实现方式:
基础:public/private/internal/external 可见性修饰符
进阶:自定义管理员修饰符、OpenZeppelin Ownable / AccessControl 角色权限管控。
38、抢先交易(Front Running)
bash
抢先交易:攻击者监听内存池交易,设置更高 Gas 费插队优先打包执行。
三明治攻击:在正常交易前插、后插两笔交易,夹砸价差套利,不单是放区块中间。
39、提交揭示方案(CRS)
bash
* 用途:区块链投票 / 竞标核心协议,保障流程公平、完整
* 流程:分两阶段 ------ 提交(加密信息上链)、揭示(校验哈希匹配度,匹配则有效)
* 适用:DAO 投票、期权、竞标等需保障公平性的场景
40、 abi.encodePacked 漏洞
bash
* 成因:参数编码无填充、直接拼接,易引发哈希碰撞,攻击者可伪造交易
* 解决方案:替换为abi.encode,参数间填充至 32 字节,从根源避免碰撞