Solidity 知识点速记整理 - (2026年) (1 - 40)

Source

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


Solidity 知识点速记整理 - (2026年) (1 - 40)

在这里插入图片描述

1、函数可见性

1. private:仅当前合约可用,子合约不可调用
2. internal:当前合约 + 子合约可调用
3. public:外部、当前 / 子合约均可调用(自动生成 getter)
4. external:仅外部调用(合约内需 this. 调用),接口函数推荐用

2、合约大小限制

EIP-3860 移除初始化代码 24KB 限制,运行时代码仍限 24KB,解决复杂合约部署超限问题

3、create vs create2

1. create:地址 = 部署者地址 + nonce 哈希,不可预测
2. create2:地址 = 部署者地址 + salt + 字节码哈希,可提前预测地址

4、Solidity 0.8.0 算术运算

1. 0.8.0+:默认开启溢出检查,溢出直接回滚
2. 0.8.0-:允许溢出无报错
3. 兼容:0.8.0+ 用 unchecked 块关闭溢出检查(降 Gas)

5、地址列表:Map vs 数组

1. Map:O (1) 快速判断地址是否存在,无法直接遍历,适合大型列表
2. 数组:O (n) 遍历,内存连续易遍历,适合小型列表
3. 最优:Map + 数组(兼顾快速判断 + 遍历)

6、以太坊哈希函数

核心为 Keccak-256(SHA-3 标准),用于地址、交易 / 区块 / 合约代码哈希计算

7、Ether 单位换算

1 Ether = 10¹⁸ Wei(核心记忆点)

8、assert vs require

1. 用途:
    * require:业务层校验(输入 / 权限 / 余额),可自定义错误提示
    * assert:代码逻辑校验(理论永真),失败代表合约有 bug
2. Gas:0.8.0+ 二者触发均返还剩余 Gas

9、Checks-Effects-Interactions 模式

安全编程范式,执行顺序:先校验条件→再改合约状态→最后外部交互,防止重入攻击

10、以太坊验证节点

每个验证者最低质押 32 ETH;节点需长期在线并正常履行区块提议、共识签名等职责,合规运行可获得链上验证奖励;若离线失职或恶意作恶,会触发罚没(Slashing) 扣除质押 ETH。

11、Fallback vs Receive

1. 共性:均为 payable 回调函数,处理 ETH 接收 / 无匹配函数调用
2. 触发:
    * Receive:仅接收无数据的 ETH 时触发
    * Fallback:调用无匹配函数 / 接收带数据的 ETH 时触发

12、以太坊区块 Gas 限制

1. 以太坊 PoS 机制下,区块 Gas 限制由全网验证者节点投票动态调整,不再由 PoW 时代的矿工决定。
2. 上海升级仅涉及质押 ETH 提款逻辑,未涉及区块 Gas 限制规则及数值调整;以太坊历史长期区块 Gas 上限为3000 万,当前主网已不再沿用该数值。

13、tx.origin vs msg.sender

1. tx.origin:交易原始发起者(全链路最初方),有安全风险,禁止权限控制使用
2. msg.sender:直接调用者(上一级主体),权限控制核心用
3. 示例:John→合约 A→合约 B,B 中 msg.sender=A,tx.origin=John

14、 view/pure 修饰符区别

* view:可访问合约状态变量,不可修改
* pure:既不可访问、也不可修改状态变量

15、ERC721 中 transferFrom/safeTransferFrom 区别

* 均为代币转账函数,safeTransferFrom 带安全校验,transferFrom 无
* safeTransferFrom:校验接收合约是否实现 onERC721Receive 且返回指定魔术数,不满足则抛异常回滚,避免代币丢失
* transferFrom:无校验,可能导致代币永久丢失

16、ERC1155 转 ERC721 步骤

1). 部署新 ERC721 合约
2). 为每个 ERC1155 代币生成唯一 ERC721 代币
3). 将 ERC1155 代币所有权转移至对应 ERC721 代币
4). 销毁原始 ERC1155 代币

17、 modifier 修饰符作用

* 可在函数执行前 / 后执行自定义逻辑,增强函数功能
* 提取通用操作,提升编码效率、降低耦合
* 控制函数访问权限(如校验合约所有者),校验失败则停止执行并回滚,防未授权访问

18、 uint256 最大存储值

2256 次方减 1;n 位无符号整数最大值为 2ⁿ-1(如 uint2 最大值为 3

19、核心代币标准定义

ERC20:同质化代币标准(如 USDT、ETH),所有代币属性完全相同,可互相替换,核心用于实现代币转账、余额查询、授权转账等基础功能。
 ERC721:非同质化代币标准(NFT),每个代币唯一且不可替换(如数字藏品、游戏道具),每个代币有唯一 ID 标识,核心特征是 “唯一性”。
ERC1155:多标准代币标准,兼容同质化 + 非同质化特性,可同时管理多种代币(如 1 个 ERC1155 合约可发行同质化代币 + 不同 NFT),相比 ERC20/ERC721 更高效,减少合约部署成本。

20、利率基础

* 固定利率:贷款期限内利率保持不变
* 浮动利率:随市场利率调整,锚定央行最优惠利率 / Libor 等基准利率

21、ETH 转账函数(核心考点)

* transfer/send:均有 2300gas 限制,未实现回退函数 / 回退函数超 gas 则转账失败、操作回滚;send 额外返回布尔值标识成败,二者均因限制被判定为不安全,不建议使用
* call 函数:推荐使用,无 gas 限制、支持任意地址转账 / 指定燃气量;注意防范重入攻击

22、Solidity 省 gas 高效循环技巧

1. 杜绝无限循环,避免重复计算、复杂嵌套循环
2. 避开除法 / 取模等高耗 gas 操作,不使用大数组(用 maps 替代)
3. 循环中常量 / 不可变变量,用 constant/immutable 关键字声明

23、Solidity 整数类型

无符号整型(非负):
uint8、uint16、uint32、uint64、uint128、uint256
有符号整型(可正负):
int8、int16、int32、int64、int128、int256

24、EIP-1559 基础手续费(base fee)规则

由以太坊网络通过base fee tracker 算法,根据交易需求、区块大小动态调整;
当前手续费>目标则下调,<目标则上调,匹配网络实时交易状态。

25、 冷读 / 热读

冷读:首次读取存储变量,从存储区读,Gas 成本高; 
热读:重复读取,从缓存读,Gas 成本低;均由 EVM 自动处理

26、AMM 资产定价

核心恒定乘积算法a*b=k,a 兑换为 b 的数量按该算法推导计算(无手续费)

27、 接口合法函数修饰符

仅支持 4 种:
external(仅外部调用)、
view(不修改合约状态)、
pure(不读写合约状态)、
payable(可接收以太币)

28、 函数排序(Solidity )

函数顺序必须按以下排列:
构造函数 (constructor)
接收函数 (receive())
回退函数 (fallback())
external 函数
public 函数
internal 函数
private 函数

同一可见性组内遵循:普通函数 → view → pure

29、函数修饰符排序(Solidity 风格指南)

Solidity 函数修饰符排序规范:
可见性(external/public/internal/private)
override
virtual
可变性(view/pure)
自定义修饰符

30、时间测量关键字 / 单位

* 时间戳:now(等价block.timestamp,秒级);block.number返回当前区块号
* 原生时间单位:seconds/minutes/hours/days/weeks/years,可与数字搭配使用

31、存储槽与地址占用

1. address 类型占 20 字节(160 位);
2. 以太坊每个存储槽固定为 32 字节(256 位);
3. 一个 address 占用 160 位后,同一个存储槽还剩余 96 位;
4. 若后续变量大小 ≤ 96 位,Solidity 会自动将其与 address 打包存入同一个存储槽。

32、两类拍卖核心

荷兰式拍卖:从高价逐步降价,第一个出价即成交,适合大宗、艺术品、易降价清库存场景。
英式拍卖:从起拍价逐步加价,最高出价者成交,适用于房产、豪车、稀缺标的竞拍。

33、Solidity 认证

tx.origin 做权限校验易遭钓鱼攻击,优先用 msg.sender

34、闪电贷

闪电贷是 DeFi 无抵押借贷,遵循同一笔交易内必须借还闭环,零抵押、资金体量灵活;常被用于套利、清算、合约漏洞攻击。

35、重入攻击

原理:利用接收 ETH 的 fallback/receive 函数,在转账未更新状态时递归再次调用合约,盗取资产。
防御:
严格遵循 检查 - 效果 - 交互 模式(先改状态、后转账);
使用 ReentrancyGuard 防重入修饰器;

36、无限循环限制与解决

1. 天然限制:受燃气费上限、栈深度限制,超量直接报燃气不足
2. 代码处理:循环内加计数器,达阈值主动终止

37、 访问控制(Access Control)

作用:限制合约敏感函数与状态变量的访问权限,防止未授权调用。
实现方式:
基础:public/private/internal/external 可见性修饰符
进阶:自定义管理员修饰符、OpenZeppelin Ownable / AccessControl 角色权限管控。

38、抢先交易(Front Running)

抢先交易:攻击者监听内存池交易,设置更高 Gas 费插队优先打包执行。
三明治攻击:在正常交易前插、后插两笔交易,夹砸价差套利,不单是放区块中间。

39、提交揭示方案(CRS)

* 用途:区块链投票 / 竞标核心协议,保障流程公平、完整
* 流程:分两阶段 —— 提交(加密信息上链)、揭示(校验哈希匹配度,匹配则有效)
* 适用:DAO 投票、期权、竞标等需保障公平性的场景

40、 abi.encodePacked 漏洞

* 成因:参数编码无填充、直接拼接,易引发哈希碰撞,攻击者可伪造交易
* 解决方案:替换为abi.encode,参数间填充至 32 字节,从根源避免碰撞