Tiny熊

@tiny

登链社区发起人 通过区块链技术让世界变得更好而尽一份力。

注册于 2017-10-20
漏洞利用: 分析存储与重入攻击提取Vault资金

视频 AI 总结: 本视频讲解了一个以太坊智能合约安全漏洞的利用方法。目标是从一个名为 Vault 的合约中取出资金,该合约通过委托调用将调用转发到 VaultLogic 合约。攻击者需要先利用存储布局漏洞(密码实际是 VaultLogic 地址)成为 owner,然后开启取款功能,再通过重入攻击在单笔交易中完成存款和多次取款,最终取走合约中的全部资金。整个攻击过程通过一个合约实现原子操作,确保失败时全部回滚。 关键信息: - Vault 合约的资金只能通过 withdraw 函数取出,但该函数默认被 onlyWithdraw 修饰器锁定,需要 owner 调用 openWithdrawal 开启。 - owner 变更函数 changeOwner 要求输入密码,密码是第一个存储插槽的内容,实际运行时该插槽存储的是 VaultLogic 合约地址(因为 delegatecall 在 logic 合约的存储空间中操作)。 - 攻击步骤:先调用 changeOwner 传入 logic 地址作为密码,将 owner 设为攻击者;再调用 openWithdrawal 开启取款;随后攻击者合约存入一定金额;最后调用 withdraw,利用重入(在 fallback 中再次调用 withdraw)将 Vault 中的资金全部取出。 - 整个攻击可封装在同一个合约的一个函数中,实现原子执行,避免部分失败导致资金损失。

14 0 0 2026-06-09
智能合约安全

视频 AI 总结: 本视频聚焦区块链智能合约安全,强调合约不可修改且直接管理资金,每年因安全问题导致巨额损失。主讲人通过代码示例和演示,详细分析了重入攻击、拒绝服务、签名重用、精度损失等常见漏洞的原理与防御方案,并给出了开发者提升安全性的实用建议,包括使用重入锁、最小化代码、减少外部依赖、进行审计与测试等。 关键信息: - 合约不可修改,逻辑漏洞一旦部署难以修复,安全问题每年造成数十亿美元损失。 - 常见漏洞:重入攻击(通过递归调用掏空资金)、拒绝服务(线性增长gas消耗导致服务堵塞)、签名重用(签名可重复执行或抢跑)、精度损失(除法截断)、强制转账绕过receive等。 - 防御措施:采用Check-Effects-Interaction模式、使用重入锁(瞬态存储降低成本)、签名添加nonce和指定spender、避免EOA/合约区分判断、确保函数gas消耗O(1)等。 - 开发者应做好灾难恢复预案、避免中心化依赖、使用经过验证的代码、进行多人审计和bug bounty,并利用静态分析、形式化验证及AI工具加强安全。

70 0 0 2026-06-08
VibeCoding: 可升级合约改造与部署

视频 AI 总结:本课讲解了如何将 ERC721 合约改造为可升级版本,重点对比 OpenZeppelin 普通库与可升级库的区别,说明构造函数需替换为 `initialize` 函数,并强调存储布局对齐的重要性。演示了使用 UUPS 升级方案和 Foundry 插件进行部署与升级,并讨论了实际项目中所有者应使用多签管理以提升安全性。 关键信息: 1. 可升级合约需使用 `contracts-upgradeable` 库,避免存储布局冲突。 2. 构造函数需改为 `initialize` 函数,通过代理完成初始化。 3. UUPS 和透明代理是两种主流升级方案。 4. 升级必须保持存储布局对齐,否则会破坏数据。 5. 实际部署中,所有者权限应交给多签合约,防止单点风险。

24 0 0 2026-06-06
VibeCoing: permit 默克尔树 multicall 组合实现NFT优惠购买

视频 AI 总结: 该视频是一节区块链智能合约开发课程,主要讲解了如何修改合约实现白名单优惠购买NFT,涉及默克尔树、permit授权和multicall等技术。老师分析了作业要求,演示了代码实现,并指出了常见错误和优化思路,强调理解每个技术的作用和代码简洁性对审计的重要性。 视频中提出的关键信息: - TokenBank合约将前三名修改为前十名,并使用链表存储。 - NFTMarket合约需新增白名单功能,通过默克尔树存储白名单,用户需提供证明验证。 - 购买流程包括:用户先进行permit离线签名完成ERC20授权,再通过multicall将授权和购买合并为一次交易。 - 白名单用户可享受半价优惠,但需明确描述给AI以免误解。 - 使用OpenZeppelin库(如Multicall和MerkleProof)可减少手写代码,降低审计成本。

15 0 0 2026-06-05
深入理解智能合约升级

视频 AI 总结: 该视频深入讲解了智能合约升级的核心原理与实现方案。核心思想是利用代理合约与 `delegatecall` 实现逻辑与存储分离,从而在不改变用户地址的前提下升级代码。视频详细分析了升级中必须解决的存储布局冲突(通过 EIP-1967 将关键变量放在指定槽位避免覆盖)、函数选择器冲突(通过透明代理或 UUPS 模式解决)、初始化问题,并介绍了批量升级的信标代理、大型合约的钻石代理以及继承关系中的变量冲突(使用 gap 或命名空间存储)。最后通过 Remix 演示了从简单代理到完整可升级合约的操作流程。 视频中提出的关键信息: - 合约一旦部署不可更改,但可通过代理模式实现“伪升级”,即用户交互的代理地址不变,逻辑合约可替换。 - 升级的核心技术是 `delegatecall`:逻辑合约的代码在代理合约的存储上下文中执行。 - 存储布局冲突:代理合约中保存实现地址的变量不能放在普通变量位置,否则会被逻辑合约的变量覆盖。采用 EIP-1967 将实现地址存储在固定槽位(如 `0x360894a13ba1a321..`)解决。 - 函数选择器冲突:代理合约中的升级函数(如 `upgradeTo`)可能与逻辑合约中某函数有相同的 4 字节选择器,导致该逻辑函数无法被调用。解决方案: - 透明代理:将管理员单独区分,管理员调用走升级逻辑,普通用户全部走 `fallback` 委托。 - UUPS:将升级逻辑放在实现合约中(编译器自动禁止同一合约内函数选择器重复),代理只做简单委托。 - 初始化问题:原构造函数无法为代理合约初始化状态,额外定义 `initialize` 函数并用修饰器防止重复初始化。 - 变量继承冲突:父合约新增变量会覆盖子合约已有变量的槽位。解决方式是在父合约中预留 `gap` 空槽,或使用命名空间存储模式(OpenZeppelin 新版采用)。 - 批量升级(克隆工厂场景):使用信标代理(Beacon Proxy),代理从 Becon 合约读取当前实现地址,只需修改 Becon 的指针即可统一升级所有代理。 - 大型合约:使用钻石代理(Diamond Proxy),按功能拆分逻辑到多个实现合约,通过函数选择器映射到不同实现,并通过命名空间隔离存储。

31 0 0 2026-06-05
智能合约Gas优化设计模式

视频 AI 总结:本视频介绍了以太坊智能合约的Gas优化技巧,重点讲解了链下计算与链上验证、默克尔树存储、Multicall等设计模式。通过合理的数据结构(如可迭代链表)和链下预处理,减少链上遍历与存储操作,从而显著降低Gas消耗。同时提及了部署时优化(runs参数、via IR)、事件替代存储等实用技巧。 关键信息: 1. 链下计算链上验证:通过链表结构,在链下查找元素,链上仅验证,避免链上遍历。 2. 默克尔树:合约仅存储根哈希,用户提供路径证明验证白名单/空投,适合固定大量名单。 3. Multicall:批量封装多个函数调用(链上delegatecall)或批量读取数据(链下Multicall3),减少交易次数和RPC请求成本。 4. 部署优化:调整编译器runs参数、启用via IR可减小字节码或优化运行时Gas。 5. 存储优化:变量合并槽、用unchecked溢出检查、瞬态存储、常量/immutable替代变量、用事件存储非必要数据。

24 0 0 2026-06-04
VibeCoding: Gas 优化实践

视频 AI 总结:课程主要讲解NFT-Marketer合约的Gas优化,核心是通过存储布局合并,将seller(address)和price(uint96)打包到一个存储槽,减少存储操作次数。此外还介绍了使用汇编直接读写storage slot、理解动态数组的链上存储方式,以及通过AI工具快速分析和对比Gas消耗。强调基础理解比死记硬背更重要。 关键信息: - 存储布局合并:address(160位)+ uint96 → 一个slot,可容纳高达7.9×10^28的价格,满足ETH等代币标价。 - 优化效果:list/unlist从两次存储变为一次,显著节省Gas。 - 错误定义优化:用自定义error代替字符串(4字节 vs 动态字符串)可节省Gas。 - 使用forge test --gas-report对比优化前后的Gas消耗。 - 汇编sload/sstore可直接读写指定slot,但面试中较少考察,更注重对EVM存储机制的基本理解。 - 动态数组的起始位置为slot的keccak256哈希,后续元素连续存放,可用getStorageAt按偏移量读取。

9 0 0 2026-06-04
VibeCoding: 利用 EIP-7702批量打包 Approve与Deposit

视频 AI 总结: 视频主要讲解了如何在 Token Bank 项目中利用 EIP-7702 将 approve 和 deposit 两笔交易打包成一次批量交易,并纠正了 AI 认为“无法实现”的误导。主讲人指出 AI 对新标准(如 7702)的语料库滞后,需手动分析;通过实际代码部署和演示,说明前端与 demo 网站本质相同,均可实现。最终成功添加了 7702 批量存款功能,并介绍了 MetaMask 的 5792 标准及委托合约的执行流程。 视频中提出的关键信息: 1. AI 对较新的 EIP-7702 存在知识盲区,容易产生幻觉,不能完全依赖。 2. EIP-7702 允许将 EOA 账户临时加载合约代码,使其像合约一样执行批量交易。 3. 通过 MetaMask 的 `wallet_sendCalls`(ERC-5792)接口,可以将多个调用打包成数组一次性发送。 4. 本地测试可能因缺少 MetaMask 预设的委托合约地址而困难,建议在测试网上验证。 5. 实现时需检查钱包是否支持 batch 能力,并在前端条件渲染。

11 0 0 2026-06-03
EVM 执行机制与存储布局

视频 AI 总结: 本视频深入讲解了EVM(以太坊虚拟机)的存储布局机制及其对合约执行和gas优化的影响。核心内容包括EVM执行合约的流程、不同存储空间(存储、内存、栈、临时存储)的特点与成本,以及如何通过结构体合并、动态数据存储布局等技术降低gas消耗。此外,还介绍了使用内联汇编进行极简转账的底层实现,并强调了代码可读性与gas优化之间的权衡。 关键信息: 1. EVM执行合约时,数据存储在storage(永续)、memory(临时)、stack、transient storage(瞬时)等空间,其中storage成本最高。 2. 冷数据(从0变为非0)初始化gas昂贵,热数据读写相对便宜。 3. 使用结构体将常一起使用的变量合并到一个槽位可减少存储读写次数,但需注意函数单独读取时的额外开销。 4. 瞬时存储(transient storage)在交易周期内有效,成本低于永久存储,适用于重入锁等场景。 5. 动态数据(mapping、动态数组)通过哈希方式离散存储,无法直接遍历;数组长度存储在变量槽位,数据从哈希起始位置连续存放。 6. 手写内联汇编可实现极致gas优化,但会降低代码可读性和审计友好性,需权衡。

26 0 0 2026-06-03
VibeCoding: 工厂合约与最小代理模式

视频 AI 总结: 1. 课程讲解了工厂合约与多签合约的补充,重点围绕ERC20代币的最小代理模式。工厂合约通过“最小代理”方式创建多个独立代币合约,每个代理共享同一实现合约的逻辑,但拥有独立的数据存储(如名称、发行量)。由于链上代码没有构造函数,代理合约需通过自定义的initialize函数完成初始化,并用bool变量防止重复调用。最后强调了工厂合约能降低部署成本并支持代币的灵活创建。 2. 关键信息: - 工厂合约用于复用实现合约逻辑,通过最小代理(clone)部署多个代理合约,每个代理有独立状态。 - 代理合约没有构造函数,需要单独写initialize函数来做初始化。 - 初始化函数需用bool变量控制只能调用一次,防止被重复初始化篡改数据。 - 工厂合约的部署流程:先创建代理,然后立即调用initialize,初始化后其他人无法再调用。

11 0 0 2026-06-02