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

文章目录

  • 前言
    • [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 字节,从根源避免碰撞
相关推荐
加密新世界2 小时前
[GTokenTool一键发币平台]什么是蝴蝶K线-不死鸟协议?
区块链
日取其半万世不竭2 小时前
Pixelfed 自建教程:开源去中心化图片社交平台
开源·去中心化·区块链
栗子~~5 小时前
Solidity 知识点速记整理 - (2026年) (41 - 74)
区块链
mutourend1 天前
Algorand的State Proof(状态证明)
区块链
互联网科技看点2 天前
LV 纪元|信任归于算法,价值源于时间
区块链
狙击主力投资工具2 天前
实战技法:上涨多峰密集续涨
区块链
2301_776045232 天前
场内交易和场外交易的区别详解
区块链
2301_776045232 天前
数字签名的特点与区块链应用要点
区块链
Shota Kishi2 天前
解析 Solana 网络结构:通过领导者调度、验证者分布与质押集中度理解分布式区块生产
分布式·web3·去中心化·区块链