分享百科

智能合约

视频 AI 总结: 该视频主要讲解了Solidity/EVM 中错误处理机制,与其他语言不同,EVM 在遇到错误时会回滚所有之前的状态变更,除非错误被程序处理。Solidity 提供了几种错误处理方式,包括抛出错误让 EVM 回滚,以及使用 try-catch 捕获外部调用产生的错误。 关键信息: * EVM 的错误处理机制具有原子性,要么全部成功,要么全部失败,不会出现中间状态。 * Solidity 中可以使用 `require` 和 `assert` 进行条件检查,条件不满足时会抛出异常。 * `assert` 用于代码不应该到达的状态,而 `require` 用于检查外部条件。 * 抛出错误时可以指定字符串或自定义错误类型,自定义错误类型 Gas 消耗更低。 * `try-catch` 只能用于捕获外部调用产生的错误,不能捕获合约内部的错误。 * `try-catch` 无法捕获 out-of-gas 错误和调用不存在合约的错误。
5
0
0
23小时前
视频 AI 总结: 该视频主要讲解了以太坊智能合约中参数匹配、数据传递、合约组织、错误处理以及接口与实现的关系等问题。首先解释了合约函数参数的传递方式,通过 input data 传递,并按照特定规则(前四个字节为函数签名,后每 32 字节为一个参数)进行解析。然后讨论了合约的组织方式,以及接口和实现的关系,强调了 ABI 编码在合约调用中的作用。最后,详细解释了错误处理机制,包括 revert、require、assert 和 panic 的使用场景和区别。 关键信息: * 合约参数通过 input data 传递,前四个字节为函数签名,后每 32 字节为一个参数。 * 合约可以 import 其他合约,实现代码复用。 * 编译后的字节码和发送的字节码相同,但链上存储的字节码是构造函数执行后的结果。 * 接口和实现之间并非强制继承关系,ABI 编码是合约调用的基础。 * 错误处理机制包括 revert、require、assert 和 panic,assert 用于断言程序本身的错误。
4
0
0
23小时前
视频 AI 总结: 该视频主要讲解了以太坊智能合约中 ABI 编码的概念和使用方法。ABI 编码是应用程序二进制接口,用于描述合约的函数和参数,使得外部应用能够与合约进行交互。视频详细解释了 ABI 编码的结构,包括函数选择器和参数编码,并通过实例演示了如何使用 ABI 编码调用合约函数。此外,视频还对比了使用 ABI 编码进行底层调用和直接调用合约函数的区别,强调了底层调用的灵活性和安全性。 关键信息: * ABI 编码是合约接口的描述,用于外部应用与合约交互。 * ABI 编码包含函数选择器(函数签名的哈希值前 4 字节)和参数编码。 * 可以通过函数签名计算函数选择器。 * Solidity 提供了 ABI 编码的全局函数,可以获取函数选择器。 * 可以使用 ABI 编码进行底层调用,实现更灵活的合约交互。 * 底层调用需要手动处理错误和类型检查,不如直接调用合约函数安全。 * 可以通过合约类型或接口类型调用合约函数,最终都会转化为 ABI 编码调用。
7
0
0
1天前
视频 AI 总结: 该视频解答了关于以太坊智能合约中 `transfer` 函数转账的问题。核心内容是解释了 `transfer` 函数的运作机制,以及它与区块链上数据状态的关系。`transfer` 函数实际上是在链上执行的,它会修改合约地址和目标地址在区块链上的余额(balance)数据。 关键信息: * `transfer` 函数的转账操作会上链,修改区块链上的账户余额数据。 * 合约地址的余额和变量由合约代码控制,`transfer` 函数通过代码逻辑修改合约地址和目标地址的余额。 * `transfer` 函数修改的是合约地址下的 balance 数据到目标地址下。 * 所有节点都需要验证转账操作的有效性,但验证过程是异步的。 * EOA 地址转账需要私钥签名。
21
0
0
4天前
视频 AI 总结: 1. **核心内容:** 本视频是 Solidity 编程语言的入门教程,重点讲解了 Solidity 中变量的声明和函数的使用,特别是与其它编程语言不同的特性,如地址类型、合约类型以及回调函数等。强调了在 Solidity 开发中,除了语言语法外,还需要掌握特定领域的知识。 2. **关键信息:** * Solidity 是一种静态编译型高级语言,专门为 EVM 设计。 * 变量分为值类型、引用类型和映射类型。 * 值类型包括布尔型(bool)、整型(int/uint)、地址类型(address)和枚举类型(enum)。 * 地址类型分为 address 和 address payable,payable 类型可以接收 ETH 转账。 * 合约本身也是一种类型,可以用来声明变量。 * 常量(constant)和不可变变量(immutable)在编译时确定值,不占用链上存储。 * 需要关注变量存储空间的大小,因为链上存储成本很高。 * 0.8 版本后的 Solidity 会对整型溢出进行处理,导致交易回滚。 * transfer 和 send 函数转账时,EVM 限制 gas 消耗为 2300。
53
0
0
4天前
视频 AI 总结: 本视频是一个关于如何使用 HTML 和 JavaScript 构建一个与区块链交互的简单网站的教程。核心内容是创建一个“Buy Me a Coffee”的网站,该网站可以连接到区块链上的智能合约,并允许用户通过 MetaMask 钱包进行交互,包括连接钱包、获取合约余额、购买咖啡(向合约充值)和提取资金。 关键信息: * 使用 HTML 和 JavaScript 构建 Web3 网站的基本框架。 * 通过 MetaMask 等钱包与区块链进行交互。 * 利用 VM 库简化与智能合约的交互,包括读取合约状态和发送交易。 * 使用 Anvil 创建本地区块链环境进行测试,避免在真实网络上花费资金。 * 模拟交易以确保交易成功,减少失败交易的风险。 * 使用 TypeScript 增强代码可读性和可维护性。 * 使用 Vite 打包工具简化 TypeScript 编译和部署流程。 * 强调理解代码的重要性,避免盲目复制 AI 生成的代码,以确保安全。 * 挑战:创建一个按钮,读取智能合约中每个地址的捐赠金额并输出到控制台。
190
0
0
2025-07-05 22:33
视频 AI 总结: 该视频主要讲解了以太坊中的一些基本概念,包括以太币的单位(ETH、Gwei、Fin、Sub)以及如何在区块链浏览器(如 Etherscan)上查看交易信息。此外,视频还介绍了不同的以太坊网络,包括主网和测试网,以及如何在测试网上领取测试币。最后,视频还对 L2 做了总体总结。 关键信息: * 以太币的单位:ETH(最大单位)、Gwei、Fin、Sub(最小单位)。Gas price 以 Gwei 为单位设置。 * 区块链浏览器:用于查看交易信息,如 input data、from 地址、to 地址、gas 信息等。 * 以太坊网络:主网(有价值的网络)和测试网(如 Sepolia)。测试网可领取测试币。 * 智能合约:在链上运行的程序,编译成字节码后部署到网络上。在 EVM 上执行时根据指令扣费。 * EVM:通过植入虚拟机,扩展了网络的能力。 * Solidity:用于编写合约。
44
0
0
2025-07-05 12:09
视频 AI 总结: 该视频主要讲解了以太坊的核心概念,视频回顾了区块链的哈希结构和比特币的局限性,引出以太坊作为可执行程序的区块链平台的优势。重点介绍了以太坊的虚拟机(EVM)如何运行智能合约,以及从 POW 共识机制切换到 POS 质押机制的原因。最后,通过 Remix 在线 IDE 演示了智能合约的编写、编译、部署和执行过程。 关键信息: * 以太坊是一个可以执行程序的区块链网络,弥补了比特币的不足。 * 以太坊的核心是智能合约,它是在网络上运行的程序,可以实现去信任的应用。 * 以太坊使用 POS 共识机制,通过质押资金来保障网络安全,降低能源消耗。 * 以太坊虚拟机(EVM)是运行智能合约的环境,每个节点都内置一个 EVM。 * 智能合约的编写通常使用 Solidity 语言,需要编译成字节码才能在 EVM 上执行。 * Remix 是一个在线 IDE,可以用于编写、编译、部署和执行 Solidity 智能合约。
89
0
0
2025-07-05 12:06
视频 AI 总结: 该视频主要讲解了智能合约的形式化验证,强调其作为最高级别的测试手段,能够彻底证明合约在任何情况下的行为符合预期。与单元测试或模糊测试不同,形式化验证通过布尔公式将智能合约代码转换为 SMT 求解器可解释的形式,从而验证特定不变性。视频还介绍了如何使用 Solidity 内置的 SMT 检查器进行形式化验证,并通过实例演示了如何通过添加 require 语句来限制输入范围,从而使断言通过验证。 关键信息: * 形式化验证基于布尔公式,通过 SMT 求解器检查公式的满足性。 * SMT 检查器通过检查布尔公式的否定的不可满足性来验证断言。 * 可以通过 require 语句限制输入范围,使断言通过形式化验证。 * SMT 检查器不仅可以用于断言验证,还可以用于检查溢出、下溢、除零等潜在问题。 * SMT 检查器有其局限性,对于过于复杂的代码可能无法证明。 * 视频还介绍了如何通过提供价值和建立联系来获取审计机会,以及如何通过参加竞赛来展示自己的能力。
181
0
0
2025-07-03 15:24
视频 AI 总结: 该视频是关于智能合约审计培训的 mob auditing 会议,重点在于使用 mob auditing 的方法来查找智能合约中的漏洞。视频中,讲师带领学员们对一个 Perpetual Protocol 的智能合约实现进行审计,并逐步讲解了 mob auditing 的流程和技巧,最终学员们成功发现了一些关键漏洞。 关键信息: 1. **Mob Auditing 介绍:** 类似于 pair programming,但规模更大,有多人参与,角色包括驱动者(driver)和指导者(dictator),其他人作为 mob 提供想法。 2. **Mob Auditing 流程:** 驱动者分享屏幕并逐行解释代码,指导者提出问题和 edge cases,mob 成员随时提出潜在的 bug 或漏洞,角色定期轮换。 3. **审计目标:** 理解如何开仓、追踪盈亏、平仓实现利润、实现损失、存入和执行流动性。 4. **发现的漏洞:** * `increasePosition` 函数中缺少对最大杠杆的验证,可能导致用户开设过高杠杆的仓位。 * USDC 黑名单问题,可能导致用户无法提取资金。 * 清算费用计算中的舍入误差,可能导致小额仓位无法收取清算费用。 5. **Fuzzing 和 Invariant Testing:** 介绍了 fuzzing 和 invariant testing 的概念,以及如何在 Foundry 中使用它们来发现智能合约中的漏洞。 6. **Echidna 介绍:** 介绍了 Echidna 这一更高级的模糊测试工具,它能够进行更复杂的 invariant testing,并提供代码覆盖率报告和可重现的测试用例。
204
0
0
2025-07-03 15:01
视频 AI 总结: 该视频主要讲解了 ERC-4626 的通货膨胀攻击,OpenZeppelin 如何解决这个问题,以及 AMM 的相关知识,包括 AMM 的数学原理、Uniswap V3 的深度解析,以及与链上 AMM 相关的预言机操纵。视频详细解释了通货膨胀攻击的原理,以及 OpenZeppelin 的实现如何降低攻击的可行性,并提供了调整参数以几乎完全避免该问题的方案。此外,还深入探讨了 AMM 的运作机制,包括常数积公式、流动性提供等,并分析了 Uniswap V3 中范围流动性的概念和实现方式。最后,视频还讨论了预言机操纵攻击,包括攻击方式、防范措施以及 Chainlink 的应用。 关键信息: 1. ERC-4626 通货膨胀攻击的原理和 OpenZeppelin 的解决方案。 2. OpenZeppelin 通过使用虚拟资产和份额来降低通货膨胀攻击的盈利性。 3. AMM 的基本原理,包括常数积公式(x * y = k)和流动性提供。 4. Uniswap V3 的范围流动性概念,以及如何通过调整价格范围来提高资金利用率。 5. 预言机操纵攻击的原理和防范措施,包括时间加权平均价格(TWAP)的应用。 6. Chainlink 作为一种更安全的预言机解决方案。 7. Uniswap V3 中,每个 tick 都遵循一个公式,该公式本质上指出,每个 tick 都对应于必须提高 1.0001 的幂才能获得价格 P 的价格。
162
0
0
2025-07-03 12:16
视频 AI 总结: 该视频主要讲解了智能合约的可升级性,并深入探讨了五种常见的升级模式:永恒存储、透明代理、通用可升级代理(UUPS)、信标代理和钻石标准。视频详细分析了每种模式的原理、优缺点以及潜在的安全风险,例如存储冲突和函数选择器冲突。此外,视频还通过实际代码示例,展示了这些升级模式在智能合约中的应用,并讨论了在选择升级模式时需要考虑的关键因素。 视频中提出的关键信息: 1. **五种升级模式:** 永恒存储、透明代理、UUPS、信标代理和钻石标准。 2. **永恒存储:** 将数据存储与逻辑分离,通过逻辑合约操作数据合约。 3. **透明代理:** 使用代理合约将调用委托给实现合约,实现逻辑升级。 4. **UUPS:** 将升级逻辑放在实现合约中,简化代理合约。 5. **信标代理:** 多个代理合约共享一个信标合约,信标合约指向实现合约。 6. **钻石标准:** 将合约功能分解为多个 facet,通过钻石合约路由调用。 7. **存储冲突:** 升级后,新的实现合约可能覆盖旧的存储变量。 8. **函数选择器冲突:** 代理合约和实现合约可能存在相同函数选择器,导致调用错误。 9. **安全风险:** 访问控制不当、升级逻辑错误等可能导致安全漏洞。 10. **gas 效率:** 不同的升级模式在 gas 消耗方面存在差异。
145
0
0
2025-07-02 22:42
视频 AI 总结: **核心内容概要:** 该视频主要讲解了以太坊 Solidity 智能合约中常见的两种安全漏洞:舍入误差(Rounding Issues)和签名可延展性(Signature Malleability)。视频深入分析了这两种漏洞的根本原因、常见表现形式,并通过实际案例展示了如何识别和防范这些问题。目的是帮助开发者在进行智能合约安全审计时,能够更好地发现和修复潜在的安全风险。 **关键信息:** * **舍入误差:** * 根本原因是 Solidity 不支持浮点数,除法运算会进行截断(Truncation),导致精度丢失。 * 常见场景包括计算平均价格、分配奖励等,如果未充分考虑精度问题,可能导致资金损失或协议被操纵。 * 解决方法包括使用足够的小数位数、采用向上取整或向下取整策略,并根据具体业务逻辑进行调整。 * **签名可延展性:** * 根本原因是 ECDSA 算法中,对于同一个消息,存在多个有效的签名。 * 攻击者可以利用这一特性,篡改签名中的 `s` 值,生成另一个有效的签名,从而重复执行某些操作。 * 解决方法是限制签名中 `s` 值的范围,只接受小于 `n/2` 的 `s` 值,从而避免签名可延展性攻击。 * **案例分析:** * 视频通过两个具体的漏洞案例,详细展示了舍入误差和签名可延展性在实际项目中的表现形式,以及相应的修复方案。 * **安全审计建议:** * 在进行智能合约安全审计时,需要特别关注除法运算和 ECDSA 签名验证,仔细分析是否存在舍入误差和签名可延展性问题。 * 需要充分考虑各种边界情况和异常输入,确保智能合约的安全性。
252
0
0
2025-07-02 22:32
视频 AI 总结: **核心内容概要:** 该视频是关于Web3高级安全主题课程的第二部分,主要讲解Perpetuals、AMM、Oracle操纵、舍入误差等高级安全审计技能。课程旨在帮助智能合约安全研究员和区块链工程师提升技能,快速成为高级安全审计员。视频还介绍了课程资源、任务和社群互动方式,并分享了Guardian Audits在智能合约审计中发现的漏洞案例,旨在帮助学习者建立安全审计的工具箱。 **关键信息:** * **课程内容:** * 深入研究Perpetuals,并将其转化为实际的审计技能。 * 涵盖AMMs、Oracle操纵、舍入误差等主题。 * 讲解升级模式(Upgradability Patterns)及相关漏洞。 * 学生代码走查(Student Code Walks),分析他人代码中的漏洞。 * 高级攻击手段,如ERC 4626通货膨胀攻击。 * 模糊测试(Fuzzing)和形式化验证(Formal Verification)等验证方法。 * 市场策略(Approaching the Marketplace)建议。 * **课程资源:** * 课程中心(Course Hub)提供必要的资源和任务。 * Solidity Lab Discord社群用于交流和提问。 * **审计任务(Mission 3):** * 审计其他团队的代码库,或审计讲师提供的代码库。 * 编写审计报告,包括漏洞发现、修复建议和核心协议不变性。 * 提交模糊测试套件(Fuzzing Suite)和代码覆盖率报告。 * 总结漏洞发现的启发式方法(Heuristics)。 * **漏洞案例:** * Ethernote:不正确的费用结构导致会计不一致。 * Key Finance:奖励复利可被抢先交易(Sandwichable)。 * DOS攻击:无限制的循环导致拒绝服务。 * IDX:交换保证金可用于从AMM中提取资金。 * GMX:无限制的交换路径长度导致气体操纵。 * GMX:列入黑名单的地址可用于阻止清算。
176
0
0
2025-07-02 22:24
视频内容 AI 总结: **核心内容概要:** 该视频主要讲解了Perpetuals协议Mission 2的目标和具体内容,包括增加交易者减少仓位、抵押品,以及引入清算功能、借款费用和仓位费用等。视频详细解释了这些功能的实现逻辑,以及可能出现的边界情况和注意事项,旨在为开发者提供清晰的开发指南,并为社区推出Perpetuals协议做准备。同时,视频还深入探讨了EVM(以太坊虚拟机)的存储结构,包括堆栈、内存、调用数据和存储,以及它们在交易执行中的作用,并详细分析了GMX和Safe Transfer Lib中的代码示例,以帮助开发者更好地理解和应用EVM知识。 **关键信息:** * **Mission 2目标:** 增加交易者减少仓位、抵押品的功能,引入清算功能,收取借款费用和仓位费用。 * **清算机制:** 任何人都可以调用清算函数,清算人将获得清算费用,以激励清算。 * **费用:** 引入借款费用(给流动性提供者)和仓位费用(可选)。 * **EVM存储:** 堆栈(临时数据)、内存(临时数据,用于存储结构体)、调用数据(只读数据,用于函数调用)、存储(永久数据,区块链数据库)。 * **Opcodes:** EVM指令,用于操作存储区域的数据。 * **GMX示例:** 分析了GMX代理合约中的汇编代码,展示了如何优化合约以节省gas。 * **Safe Transfer Lib示例:** 分析了Safe Transfer Lib中的汇编代码,展示了如何安全地处理地址和避免脏数据。 * **Calldata:** 深入分析了Calldata的结构,包括静态数据和动态数据的编码方式,以及如何解析复杂的Calldata结构。 * **内存安全:** 讨论了内存安全的重要性,以及如何避免覆盖已分配的内存和保持零槽的零值。
182
0
0
2025-07-02 19:26
登链社区