文章目录
- 前言
-
- [Solidity 知识点速记整理 - (2026年) (41 - 74)](#Solidity 知识点速记整理 - (2026年) (41 - 74))
-
- [41、燃气挟持攻击(Gas Griefing)](#41、燃气挟持攻击(Gas Griefing))
- 42、空闲内存指针
- [43、绑定曲线(Bonding Curve)](#43、绑定曲线(Bonding Curve))
- 44、三明治攻击
- 45、滑点参数
- 46、时间加权平均价格(TWAP)
- [47、Solidity 合约调用](#47、Solidity 合约调用)
- [48、EIP 1559 前交易费用计算](#48、EIP 1559 前交易费用计算)
- [49、ETH 转账原理及流程](#49、ETH 转账原理及流程)
- 50、区块链随机数生成难点
- [51、Solidity 实现随机数生成](#51、Solidity 实现随机数生成)
- [52、EIP 1559 是什么](#52、EIP 1559 是什么)
- [53、ERC20 转账区别](#53、ERC20 转账区别)
- [54、向无 payable/receive/fallback 合约转 ETH](#54、向无 payable/receive/fallback 合约转 ETH)
- 55、代理合约存储冲突
- [56、Solidity 无原生浮点运算:原因 + 标准方案](#56、Solidity 无原生浮点运算:原因 + 标准方案)
- [57、ABI 两种编码对比](#57、ABI 两种编码对比)
- [58、PoW/PoS 区块时间戳](#58、PoW/PoS 区块时间戳)
- 59、函数选择器冲突(代理合约)
- [60、Payable 函数与 Gas](#60、Payable 函数与 Gas)
- [61、Memory 与 Calldata(函数参数)](#61、Memory 与 Calldata(函数参数))
- [62、UUPS vs 透明可升级代理](#62、UUPS vs 透明可升级代理)
- [63、ERC 777 代币](#63、ERC 777 代币)
- [64、ERC 721 Mint / SafeMint 区别](#64、ERC 721 Mint / SafeMint 区别)
- [65、ERC 165 标准](#65、ERC 165 标准)
- [66、ERC 721A 标准](#66、ERC 721A 标准)
- [67、Compound Finance 资金利用率](#67、Compound Finance 资金利用率)
- 68、签名重放攻击
- [69、Solidity 三种数据位置 Gas 消耗区别](#69、Solidity 三种数据位置 Gas 消耗区别)
- [70、可升级 / 代理合约 不建议用构造函数](#70、可升级 / 代理合约 不建议用构造函数)
- [71、智能合约 delegatecall 与 普通 low-level call 异常对比](#71、智能合约 delegatecall 与 普通 low-level call 异常对比)
- [72、2 的倍数乘除:移位省 Gas 原理](#72、2 的倍数乘除:移位省 Gas 原理)
- [73、EVM Gas 退还规则](#73、EVM Gas 退还规则)
- [74、DelegateCall 委托调用核心规则](#74、DelegateCall 委托调用核心规则)
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
Solidity 知识点速记整理 - (2026年) (41 - 74)
Solidity 知识点速记整理 - (2026年) (1 - 40)

41、燃气挟持攻击(Gas Griefing)
bash
攻击者通过高耗 Gas 操作耗尽区块 / 交易燃气,使合约后续子调用、业务逻辑因 Gas 不足执行失败,造成 DoS 瘫痪;
防范:谨慎外部调用、限制循环开销、做 Gas 预算控制、避免依赖外部不可信合约调用。
42、空闲内存指针
bash
- 定义:指向已释放内存地址的指针,内存数据仅标记为可用、并未物理删除,误用会导致程序崩溃或行为异常。
- 成因:编程逻辑错误、手动内存管理不当。
- 解决:内存释放后及时将指针置空;规范使用malloc/calloc+free管理动态内存;高级语言使用智能指针、垃圾回收机制。
43、绑定曲线(Bonding Curve)
bash
- 定义:加密资产专属定价曲线,通过数学公式设定代币价格,价格随代币铸造/销毁数量动态变化,横轴为代币供应量、纵轴为代币价格。
- 应用:链上自动算法定价;用于代币发行、流动性池机制、自动化交易,保障代币价格连续平滑变动。
44、三明治攻击
bash
- 场景:去中心化DEX交易所中的典型恶意套利攻击。
- 原理:黑客利用交易手续费低、链上交易公开透明的特点,在用户交易前后插入买卖订单;前置拉高/压低价格、后置平仓获利,夹在中间收割用户,造成用户交易滑点损耗。
- 解决:设置合理低滑点阈值,价格波动超出预算范围直接取消交易。
45、滑点参数
bash
- 作用:限定DEX交易允许的价格最大波动范围。
- 核心:规避短时价格剧烈波动风险,波动超过设定阈值则自动取消交易,降低交易者非正常亏损概率。
46、时间加权平均价格(TWAP)
bash
- 性质:传统基础算法交易策略,逻辑简单、通用性强。
- 逻辑:将总交易时长均匀拆分,在每一个时间节点提交等额订单。
- 目的:弱化大额订单对市场的冲击,压低平均成交价格,减少交易成本。
- 适用:无需精准预估交易量、仅按固定时间均匀拆单的交易场景。
47、Solidity 合约调用
bash
三种底层跨合约调用方式:call、delegatecall、staticcall
delegatecall:调用外部合约逻辑代码,执行时复用当前调用合约的存储空间,所有状态修改均作用于自身合约。
补充:calldata 是数据位置关键字,不属于合约调用方式。
48、EIP 1559 前交易费用计算
bash
定价机制:矿工拍卖优先级机制,GasPrice 越高越优先被打包。
计算公式:交易费用 = GasPrice × GasLimit
核心概念:GasPrice 为每单位 Gas 出价单价,决定打包优先级;GasLimit 为单笔交易允许消耗的最大 Gas 额度,用于约束执行复杂度。
49、ETH 转账原理及流程
bash
底层核心:转账本质是修改区块链账户余额状态数据。
核心流程:
连接节点网络
→加载私钥
→读取发送账户当前 Nonce(逐笔交易自增,防重放)
→ETH 换算为 Wei(1ETH=10^18Wei)
→填写接收地址、转账金额
→设置 GasLimit(普通转账固定 21000)
→构造未签名交易
→私钥签名
→广播上链等待矿工打包确认。
50、区块链随机数生成难点
bash
核心挑战:链上数据公开可追溯、区块状态可预测,难以生成不可被操控的安全随机数。
难点根源:节点 / 矿工可轻微操控区块信息,依赖链上原生数据易被攻击者预判、操纵结果,引发合约安全漏洞。
解决思路:采用链下 VRF 可验证随机函数、多节点聚合熵源、链上多区块数据混合校验。
51、Solidity 实现随机数生成
bash
实现方法:通过 keccak256 哈希,混合区块时间戳、区块哈希、发送方地址、账户 Nonce 等链上信息拼接熵源生成。
nonce 作用:账户逐笔交易递增,增加熵源多样性,避免重复哈希结果。
关键局限:熵源均为链上公开可预测数据,矿工可微调区块参数操纵结果,仅适用于低安全要求场景,不可用于彩票、空投等高敏感业务。
52、EIP 1559 是什么
bash
以太坊 Gas 费核心升级提案,2021 年 8 月 5 日随伦敦硬分叉正式上线,重构 Gas 定价与消耗逻辑。
费用构成:基础费 + 矿工小费;基础费随区块 Gas 利用率自动动态调整,区块利用率低于 50% 基础费下降,高于 50% 基础费上涨。
53、ERC20 转账区别
bash
transfer:从调用者账户直接转账至目标账户。
transferFrom:可指定转出账户与接收账户,需先由转出账户执行 approve 授权,入参包含 sender、recipient、amount。
54、向无 payable/receive/fallback 合约转 ETH
bash
自毁其他合约,强制将余额转入目标合约;
区块挖矿奖励手续费接收地址设置为目标合约;
信标链质押提款地址设置为目标合约;
Solidity 0.4 旧版无接收校验限制,可直接转入;
55、代理合约存储冲突
bash
问题:代理可升级模式中,代理合约与逻辑合约的状态变量存储槽偏移重叠,导致互相覆盖、数据错乱、合约异常。
解决:采用固定存储槽布局、隔离存储结构、钻石模式存储隔离,严格规避槽位偏移冲突。
56、Solidity 无原生浮点运算:原因 + 标准方案
bash
不支持浮点的原因:
1. EVM 底层无原生浮点指令,模拟浮点 Gas 消耗极高;
2. 浮点天然存在精度丢失、舍入误差,极易引发资金对账、计算类合约安全漏洞。
标准解决方案:
1. 通用业务:采用整数放大法,用大数整型替代小数(如代币统一 1e18 精度);
2. 专业定点计算:引入成熟定点数库,以整数运算模拟定点小数逻辑,规避精度损失。
57、ABI 两种编码对比
bash
abi.encode:参数按 32 字节规整对齐填充,格式规范可完整解码,缺点是编码字节体积偏大。
abi.encodePacked:参数直接紧凑拼接无对齐,体积更小;缺点是无固定边界,易产生哈希碰撞、无法安全精准解码。
58、PoW/PoS 区块时间戳
bash
共性:均为区块头内置 Unix 时间字段,记录区块出块时间。
PoW:由挖矿矿工打包区块时写入时间戳。
PoS:由出块验证者生成区块时写入时间戳,仅出块节点负责赋值。
59、函数选择器冲突(代理合约)
bash
定义:函数名 + 参数类型经 keccak256 哈希取前 4 字节为函数选择器,用于精准标识调用函数。
原因:代理合约自身函数与逻辑合约函数选择器哈希碰撞,导致调用路由寻址错乱。
解决:隔离管理员接口与业务接口、规避哈希碰撞,预留专属选择器槽位。
60、Payable 函数与 Gas
bash
特性:Solidity 专属修饰符,标记函数允许接收原生 ETH 转账;非 payable 函数转入 ETH 会直接 revert 回滚。
Gas:所有链上交易与合约调用均消耗 Gas,防止垃圾交易与无限循环消耗网络资源。
注意:需校验合约余额与 Gas 充足性,完善 ETH 入账与转账安全校验逻辑。
61、Memory 与 Calldata(函数参数)
bash
共性:均为临时数据位置,不占用合约永久存储,函数执行结束数据自动释放。
差异:Memory 为可读写内存空间,可自定义创建、修改临时数据;Calldata 只读不可修改,直接复用交易原始调用数据,更省 Gas,且仅能用于外部函数入参。
62、UUPS vs 透明可升级代理
bash
共性:代理合约负责转发调用,存储逻辑合约地址,均可不用重新部署代理合约,仅更新逻辑合约地址完成升级。
透明代理:需区分管理员与普通用户调用,每次交易都做管理员地址校验,固定消耗额外 Gas,长期调用成本高。
UUPS 代理:升级逻辑内置在逻辑合约中,无管理员地址强制校验,仅做调用转发;最大优势是节省大量常驻 Gas 开销,架构更轻量,需做好升级权限安全管控。
63、ERC 777 代币
bash
- 定位:ERC20 增强优化版,向下兼容 ERC20,功能性更强
- 优势:支持附带信息转账、操作员代付权限;依托 ERC1820 接口注册表做合约校验,提升交互兼容性
- 风险:内置转账回调钩子,易触发重入攻击;操作员权限泄露易造成盗币;合约审计门槛高
- 建议:非审计优质合约谨慎交互,警惕高危回调漏洞
64、ERC 721 Mint / SafeMint 区别
bash
- Mint(_mint):直接铸造分配NFT,无接收校验;若目标合约地址不兼容接收,代币永久锁定,安全性低
- Safe Mint(_safeMint):铸造前校验地址是否实现接收接口,不兼容则交易回滚,杜绝代币锁定,安全性高
- 总结:开发业务优先使用 SafeMint
65、ERC 165 标准
bash
- 核心:智能合约接口自省、识别标准
- 作用:标准化接口ID计算与查询;外部合约可检测目标合约实现了哪些ERC接口
- 场景:用于判断合约是否为NFT、777代币等,适配各类钱包/交易所识别
66、ERC 721A 标准
bash
- 定位:ERC721优化版,主打批量铸币降低Gas
- 原理:同一地址批量铸造时,仅一次链上写入,时间复杂度 O(1),大幅节约手续费
- 权衡风险:代币序号逻辑特殊,易出现序号溢出、批量逻辑漏洞;部分平台元数据兼容性差
67、Compound Finance 资金利用率
bash
- 定位:去中心化算法浮动利率借贷协议,依靠资金利用率自动调节存借利率
- 计算公式:资金利用率 = 已借款总额 ÷ 用户存款供应总额
- 市场解读:利用率越高,场内可借贷资金越紧缺,借款利率越高;增加存款供给可压低利用率,从而降低借款利率
- 易错点:分母不是抵押品价值;利用率与借款利率正相关
68、签名重放攻击
bash
1. 定义 属于网络 / 区块链常见攻击,攻击者拦截、复用已经校验通过的数字签名,重复发起请求,绕过授权执行非法操作。 数字签名基于公钥密码学,用于身份认证 + 数据完整性校验。
2. 危害 可重复执行转账、授权、业务操作,引发重复交易、资产被盗、权限滥用等风险。
3. 防御方法
4. 签名中加入时间戳 + 随机数 nonce,保证每个签名一次性有效;
5. 引入递增序列号,约束签名按顺序合法使用;
6. 传输层用 TLS/SSL 加密防中间人截获;区块链场景额外做链上签名有效期、已用签名黑名单校验。
69、Solidity 三种数据位置 Gas 消耗区别
bash
Solidity 数据位置只有三种:Memory、Storage、Calldata
1. Memory 内存
* 生命周期:函数执行临时分配,调用结束立即销毁
* 特性:只存在内存,不上链
* Gas:成本较低,仅和数据大小相关
2. Storage 存储
* 生命周期:永久上链存储,对应合约状态变量
* 特性:读写都写入区块链存储
* Gas:成本最高,不仅和数据大小有关,还受存储插槽、映射 / 数组嵌套结构影响
3. Calldata 调用数据
* 生命周期:外部函数入参专属,只读不可修改
* 特性:不拷贝、直接读取调用报文
* Gas:成本最低
Gas 消耗排序:Calldata < Memory << Storage。
70、可升级 / 代理合约 不建议用构造函数
bash
1. 普通合约:用构造函数部署时一次性初始化状态变量。
2. 代理可升级合约弊端: 代理模式下,逻辑合约的构造函数不会被代理触发执行;且构造函数仅部署时跑一次,后续合约升级无法重新初始化状态,状态数据难以平滑迁移。
3. 正确方案: 放弃构造函数初始化,改用自定义 initialize 初始化函数,加仅可调用一次锁;合约升级后可安全重新初始化,适配代理升级架构。
71、智能合约 delegatecall 与 普通 low-level call 异常对比
bash
核心前提:low-level call /delegatecall 调用失败都不会自动整笔交易回滚,仅返回 success=false
场景 一:调用空地址 / 已自毁销毁的合约
1. delegatecall 返回 success = false,不回滚、不改变任何合约状态,外层交易继续执行。
2. 普通 low-level call 同样返回 success = false,不整笔回滚,仅本次调用无效果,后续代码正常走。
场景 二:被调用函数内部执行 revert 触发回滚
1. delegatecall 返回 success = false,自身无状态变更,不影响外层交易。
2. 普通 low-level call 返回 success = false,被调用内部状态回滚,外层交易不整体回滚。
72、2 的倍数乘除:移位省 Gas 原理
核心原理:
与 2 n 2^n 2n做乘除运算时,可用位移位运算替代普通乘除,底层指令更轻、Gas 更低。
移位规则:
- 数值左移 n 位 = 乘以 2 n 2^n 2n
- 数值右移 n 位 = 除以 2 n 2^n 2n(无符号整型向下取整)
示例:
- 除以 8( 2 3 2^3 23):右移 3 位
>> 3 - 乘以 16( 2 4 2^4 24):左移 4 位
<< 4
编译器优化:
Solidity 编译器会自动把 2 的整数次幂乘除优化为移位指令,业务代码无需手动写移位,手写不会更省 Gas。
73、EVM Gas 退还规则
bash
EVM 只有一种场景会退还 Gas: 将存储槽从非零值改写为零值,可返还固定额度 Gas。
其余所有场景均无 Gas 退还。
74、DelegateCall 委托调用核心规则
bash
核心本质:
复用外部合约代码,操作自身合约存储。
* 执行逻辑:运行被调用合约的代码;
* 状态读写:全部作用于 ** 当前调用方(代理合约)** 的存储空间,不影响逻辑合约存储;
地址与上下文规则:
* address(this) 返回代理调用方合约地址,而非被调用合约
* 合约余额、msg.sender、msg.value 均归属代理调用方,和被调用逻辑合约无关