分享百科

Solidity合约

视频 AI 总结: 该视频主要讲解了Solidity中的库(Library)的概念、代码复用方式、import 语句以及事件(Event)的使用。库用于封装可复用的函数,类似于合约但更特殊,通过 `library` 关键字定义。代码复用可以通过继承(abstract 合约)或组合(library)实现。`import` 语句用于导入代码,包括第三方库如 OpenZeppelin,提高效率和安全性。事件用于合约与外部状态的沟通,通过 `emit` 关键字触发,外部程序可监听事件以了解链上状态变化。 关键信息: * **库(Library)**:用于代码复用,通过 `library` 关键字定义,可以封装函数。 * **代码复用方式**:继承(abstract 合约)和组合(library)。 * **Internal vs. External 库函数**:Internal 函数的代码会被嵌入到调用合约中,External 函数需要单独部署,并通过委托调用。 * **Import 语句**:用于导入代码,支持相对路径、URL 路径(IPFS)。 * **OpenZeppelin**:常用的第三方库,包含权限、代理、Token 等模块。 * **事件(Event)**:用于合约与外部状态的沟通,通过 `emit` 关键字触发,外部程序可监听事件以了解链上状态变化。 * **Index 索引**:事件的参数可以使用 Index 索引,提高过滤效率。
2
0
0
2小时前
视频 AI 总结: 该视频主要讲解了 Solidity 中 ABI 底层调用的相关知识,并对 `call`、`delegatecall` 底层调用方式进行了详细对比。核心内容是解释了这些底层调用与高级函数调用之间的区别,以及它们在处理 gas 限制、上下文切换和错误处理方面的不同行为。理解这些底层调用对于进行更高级的合约交互和优化至关重要。 关键信息: * **ABI 编码**:任何合约调用都会转换为 ABI 编码,包含函数选择器和参数编码。 * **`call` 调用**:底层调用,需手动检查返回值,不受 gas 限制,可以向合约转账,会切换上下文。 * **`delegatecall` 调用**:保持上下文的底层调用,相当于借用目标合约的代码在当前合约上下文中执行。 * **`staticcall` 调用**:模拟调用,不会修改状态变量,用于只读操作,会切换上下文。 * **错误处理**:底层调用失败不会抛出异常,而是通过返回值表示。 * **转账建议**:推荐使用 OpenZeppelin 的 `sendValue` 方法进行转账,避免 gas 限制问题。
5
0
0
3小时前
视频 AI 总结: 该视频主要讲解了 Solidity 中的 Static Call 的概念和使用场景,以及 View 方法的调用方式。老师通过实际代码演示,解释了 Static Call 的模拟执行特性,并强调了实践在学习智能合约开发中的重要性。同时,老师还推荐了一些开源项目,鼓励学生通过实践来加深对智能合约的理解,并建议从较早的版本入手,逐步学习复杂的逻辑。 关键信息: * Static Call 用于模拟执行合约调用,不改变链上状态,主要用于获取返回值或进行预判。 * Static Call 在实际生产环境中用得很少,但在需要预先知道调用结果时可以使用。 * View 方法调用不需要签名,不消耗 GAS fee (GAS price 为 0),常用于获取链上数据。 * Static Call 只能调用 View 和 Pure 方法,不能调用修改状态的方法。 * 学习智能合约开发的关键在于实践,建议从开源项目的早期版本入手,并尝试实现一些简单的项目,如 Uniswap、Token 投票、多签合约等。
2
0
0
3小时前
视频 AI 总结: 该视频主要介绍了从 ZK-EVM 到 ZK-VM 的转变,解释了 ZK-EVM 的架构,以及 PSE 团队为何停止 ZK-EVM 的开发,转而研究 ZK-VM 的原因。核心内容包括 ZK-EVM 的范围不仅限于 EVM 本身,还涉及交易处理、字节码、MPT 等多个方面。由于 ZK-EVM 在审计性、可升级性和性能方面面临挑战,PSE 团队转向了更通用的 ZK-VM 方案,并选择了 RISC-V 指令集,因为它具有通用性、可持续性和易于审计的优点。 关键信息: * ZK-EVM 不仅限于 EVM,还包括交易、字节码、MPT 等。 * 理解 Field(域)的概念是进行 ZK 开发的基础。 * ZK 程序需要同时提供输入和输出,用于验证计算的正确性。 * Constraint(约束)是 ZK 程序中的核心,用于限制变量的取值范围。 * ZK-EVM 面临审计、升级和性能方面的挑战。 * ZK-VM 是一种更通用的解决方案,基于 RISC-V 指令集。 * RISC-V 具有通用性、可持续性和易于审计的优点。 * PSE 团队正在探索基于 GKR 的新 Proving System。
52
0
0
2天前
视频 AI 总结: 该视频主要讲解了Solidity/EVM 中错误处理机制,与其他语言不同,EVM 在遇到错误时会回滚所有之前的状态变更,除非错误被程序处理。Solidity 提供了几种错误处理方式,包括抛出错误让 EVM 回滚,以及使用 try-catch 捕获外部调用产生的错误。 关键信息: * EVM 的错误处理机制具有原子性,要么全部成功,要么全部失败,不会出现中间状态。 * Solidity 中可以使用 `require` 和 `assert` 进行条件检查,条件不满足时会抛出异常。 * `assert` 用于代码不应该到达的状态,而 `require` 用于检查外部条件。 * 抛出错误时可以指定字符串或自定义错误类型,自定义错误类型 Gas 消耗更低。 * `try-catch` 只能用于捕获外部调用产生的错误,不能捕获合约内部的错误。 * `try-catch` 无法捕获 out-of-gas 错误和调用不存在合约的错误。
18
0
0
4天前
视频 AI 总结: 该视频主要讲解了 Solidity 中的接口和继承,以及它们在代码组织和复用中的作用。接口定义了一组函数签名,用于合约间的调用,无需了解对方的具体实现。继承允许合约复用父合约的代码,提高代码的可读性和可维护性。视频还介绍了抽象合约,它允许定义部分实现的函数,供子合约继承和重写。 关键信息: * 接口是函数签名的集合,用于合约间的调用,无需了解对方的具体实现。 * 继承允许合约复用父合约的代码,提高代码的可读性和可维护性。 * `interface` 关键字用于定义接口,接口中只能声明函数,不能实现。 * `is` 关键字用于实现继承,子合约会复制父合约的代码。 * 抽象合约可以定义部分实现的函数,供子合约继承和重写。 * `virtual` 关键字表示函数可以被重写,`override` 关键字表示函数重写了父合约的实现。 * 私有变量在父合约中定义,子合约虽然继承了该变量,但是无法直接访问。 * 合约调用最终会转化为链上的字节码,只需要知道函数选择器即可调用。
23
0
0
4天前
视频 AI 总结: 该视频主要讲解了Solidity中的构造函数、字节码以及自定义修改器的使用。首先解释了构造函数在合约部署时的作用,以及编译、创建和链上字节码的区别。然后详细介绍了自定义修改器(modifier)的概念和用法,包括如何使用`modify`关键字定义修改器,以及修改器如何扩展函数的功能,并展示了带参数和嵌套修改器的用法。最后,强调了修改器实际上是语法糖,会在编译时扩展代码,增加合约的字节码大小,并提供了一种替代方案,即将修改器逻辑改为私有函数来实现类似效果。 关键信息: * 构造函数在合约部署时运行一次,用于初始化合约状态。 * 字节码有编译后的字节码、创建字节码(包含编译后的字节码和参数)和链上字节码(运行构造函数后的结果)三种形式。 * 自定义修改器(modifier)可以用来扩展函数的功能,例如添加条件检查。 * 修改器是语法糖,会在编译时将修改器的代码插入到函数中,增加合约的字节码大小。 * 可以使用私有函数来实现类似修改器的效果,以减少合约的字节码大小。
25
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。
77
0
0
2025-07-09 08:47
视频 AI 总结: 该视频主要讲解了 Solidity 中特殊的函数,包括访问器函数、构造函数、receiver 函数和 fallback 函数。重点介绍了 receiver 和 fallback 函数的特性和使用场景,强调了它们是被动执行的回调函数,以及在合约接收以太币或找不到用户要调用的函数时被调用的机制。 关键信息: 1. **访问器函数**:public 状态变量会自动生成 get 函数。 2. **构造函数**:在合约初始化时运行一次,部署后不存在于链上。 3. **Receiver 函数**:在合约接收以太币时被调用,无法主动调用。 4. **Fallback 函数**:在 EVM 找不到用户要调用的函数时被调用,也可作为接收以太币的备选方案。 5. **转账与 Gas 限制**:使用 transfer 转账时,会限制 gas 消耗为 2300,可能导致 receiver 或 fallback 函数执行失败。 6. **合约调用流程**:根据是否有附加数据,EVM 会检查合约中是否存在对应的函数,否则调用 fallback 函数。 7. **tx.origin 与 msg.sender**:tx.origin 是整个交易的发起者,msg.sender 是直接调用合约的地址。
31
0
0
2025-07-09 08:46
视频 AI 总结: 该视频主要讲解了 Solidity 中的引用类型,包括数组、字符串、结构体和映射,以及它们在内存、存储和调用数据中的使用方式和注意事项。重点强调了引用类型与值类型的区别,引用类型通过指针指向数据,避免了大数据拷贝的开销。视频还讨论了 gas 消耗问题,以及如何在智能合约中高效地使用数组和映射,避免潜在的攻击风险。 关键信息: * 引用类型包括数组、字符串、结构体和映射,占用空间大,拷贝开销大,使用指针指向数据。 * 引用类型需要指定存储位置,包括 memory(函数内部,执行完消失)、storage(链上存储,持久存在)和 calldata(只读)。 * 数组分为定长数组和变长数组,变长数组可以使用 push 和 pop 操作。 * 在链上使用循环遍历数组时,需要注意 gas 消耗,避免线性增加,防止攻击。 * 删除数组元素时,可以使用将最后一个元素移动到要删除的位置,然后删除最后一个元素的方法,以减少 gas 消耗。 * 字符串是一种特殊的数组类型,不能用下标获取字符。 * 结构体是自定义的复合类型,可以包含任意类型成员,可以通过顺序或具名方式创建实例。 * 映射是一种键值对存储结构,类似于数据库中的表,key 不能是数组类型,没有长度概念,无法获取 key 或 value 的集合。 * 结构体和映射经常一起使用,结构体可以理解为表的其他字段,key 相当于表的索引。 * 在定义引用类型的变量时,需要额外加一个标识,标识这个变量存储在哪里。
48
0
0
2025-07-09 08:46
视频 AI 总结: 该视频主要讲解了Solidity中函数的定义、可见性、状态可变性以及函数调用方式。重点介绍了external可见性的特点,以及view、pure、payable等状态可变性修饰符的作用。同时,视频还对比了内部调用和外部调用的区别,以及外部调用时如何指定gas和value。 关键信息: * 函数定义使用`function`关键字,可以有参数列表。 * 可见性包括`external`(仅外部访问)、`public`、`private`、`internal`。 * 状态可变性修饰符包括`view`(不修改链状态)、`pure`(既不读取也不写入状态)、`payable`(允许接收ETH)。 * 外部调用可以使用`address(this).functionName{gas: , value: }()`,可以指定gas和value。 * 内部调用直接使用函数名,外部调用需要通过合约地址。 * 外部调用会启动新的EVM虚拟机环境,内部调用在同一EVM实例中运行。
32
0
0
2025-07-09 08:46
视频 AI 总结: 该视频深入浅出地讲解了 EVM 钱包的演变,重点介绍了 EIP-4337 账户抽象、EIP-7702 以及嵌入式钱包。视频旨在帮助开发者理解这些技术标准,并了解它们在构建去中心化应用中的作用。通过对比 EOA 和智能合约钱包的优缺点,视频阐述了 EIP-4337 如何实现账户抽象,以及 EIP-7702 如何将智能合约功能引入 EOA。此外,视频还探讨了嵌入式钱包的不同类型及其安全风险,并推荐开发者使用智能合约钱包以获得更高的安全性和灵活性。 关键信息: * EVM 钱包的两种类型:EOA(外部拥有账户)和智能合约。 * EIP-4337 实现了以太坊上的合约账户抽象,引入了用户操作、捆绑者、入口点、支付者和聚合器等概念。 * EIP-7702 旨在将智能合约功能引入 EOA,与 ERC-4337 兼容,并将在 Petra 升级中上线。 * 嵌入式钱包直接嵌入到应用程序中,提供更便捷的用户体验,有 EOA 钱包、智能合约钱包和智能 EOA 三种类型。 * 推荐开发者使用智能合约钱包,因为它提供了更高的安全性和灵活性。
125
0
0
2025-07-07 16:16
视频 AI 总结: 该视频是关于 RocketPool 的 rETH 集成的课程介绍,面向有 Foundry 经验的高级 Solidity 开发者。课程核心内容是 rETH 的架构、与 rETH 交互的合约、rETH 到 ETH 的汇率、以及如何使用闪电贷创建 rETH 的杠杆头寸。课程还包括 Foundry 练习,以及与 Aave V3、Balancer V2 和 Eigenlayer 等 DeFi 协议的集成示例。学习本课程可以帮助开发者将 rETH 集成到智能合约和 DeFi 协议中,并获得审计和漏洞赏金方面的经验。 视频中提出的关键信息: * **课程目标受众:** 具备 Foundry 经验的高级 Solidity 开发者,并对 DeFi 有基本了解。 * **课程内容:** rETH 架构、合约交互、汇率计算、闪电贷杠杆、Foundry 练习、与 Aave V3、Balancer V2 和 Eigenlayer 的集成。 * **学习益处:** 获得 rETH 集成思路、积累 DeFi 协议经验、为审计和漏洞赏金做准备。 * **环境设置:** 需要 git clone DeFi R-Eth GitHub 仓库,并配置 Foundry 和 mainnet fork RPC URL。 * **RocketPool 简介:** RocketPool 是一个去中心化的 ETH 质押协议,解决了 solo 质押 ETH 的资本和技术门槛问题。 * **rETH 简介:** rETH 是 RocketPool 发行的流动性质押代币,可以通过直接存入 ETH 或在去中心化交易所购买获得。rETH 是生息资产,价值通常随时间增长。 * **rETH 与 stETH 的区别:** rETH 是非 rebase 代币,代币余额仅在 mint 或 burn 时改变;stETH 是 rebase 代币,代币供应和余额会算法性地改变。 * **rETH 的用途:** 可以添加到去中心化交易所提供流动性、借贷给 Aave V3、或在 Eigenlayer 上进行 restake。 * **RocketPool 合约交互:** 涉及 RocketPoolStorage、RocketDepositPool 和 RocketTokenRETH 等合约。 * **ETH 质押运作方式:** 运行验证器需要 32 个 ETH,准备验证器密钥和提款密钥,以及一些技术技能来运行验证器。 * **Eigenlayer 简介:** Eigenlayer 允许重用质押的 ETH 来保护其他协议或服务,解决经济安全碎片化的问题。 * **杠杆:** 杠杆意味着用借来的钱购买东西。 * **Aave:** Aave 是一个去中心化协议,允许用户获得超额抵押贷款。 * **Balancer V2:** Balancer V2 是一个 AMM,允许你质押流动性并赚取奖励。 * **NAV Oracle:** NAV Oracle 是 rETH 的净资产价值。 * **套利机会:** 理论上,在 Uniswap V3 上以折扣价购买 rETH,然后立即使用 Rocket Pool 将 rETH 兑换回 ETH,可以获得套利机会。
171
0
0
2025-07-06 22:33
视频 AI 总结: 该视频主要讲解了以太坊虚拟机(EVM)的工作原理、gas 机制以及以太坊费用规则的演变。EVM 作为智能合约的执行环境,具有封闭性,只能访问链上数据。为了防止无限循环和图灵停机问题,EVM 引入了 gas 机制,用于衡量和限制程序的执行工作量。以太坊的费用规则经历了从 gas price 到 EIP-1559 的升级,后者将费用分为基础费和优先费,旨在改善用户体验和降低通胀。 关键信息: * EVM 是智能合约的执行环境,类似于 JVM,但具有封闭性,无法直接访问外部数据。 * EVM 通过 gas 机制来衡量和限制程序的执行工作量,防止无限循环和图灵停机问题。 * gas 本身是工作量的单位,程序越复杂,消耗的 gas 就越多。 * 以太坊的费用规则经历了从 gas price 到 EIP-1559 的升级。 * EIP-1559 将费用分为基础费和优先费,基础费会被销毁,优先费会给矿工。 * EIP-1559 改善了用户体验,避免了用户因设置过高的 gas price 而支付不必要的费用。 * 用户支付的手续费是 gas limit 乘以 gas used,再乘以基础费和优先费之和。 * 矿工拿到的是优先费部分,燃烧掉的是基础费部分。 * 节点是运行以太坊客户端程序的机器,客户端程序实现了共识规范。 * 以太坊客户端有两个主要组成部分:执行层(EVM 实现)和共识层。
70
0
0
2025-07-05 12:08
视频 AI 总结: 该视频主要讲解了以太坊的核心概念,视频回顾了区块链的哈希结构和比特币的局限性,引出以太坊作为可执行程序的区块链平台的优势。重点介绍了以太坊的虚拟机(EVM)如何运行智能合约,以及从 POW 共识机制切换到 POS 质押机制的原因。最后,通过 Remix 在线 IDE 演示了智能合约的编写、编译、部署和执行过程。 关键信息: * 以太坊是一个可以执行程序的区块链网络,弥补了比特币的不足。 * 以太坊的核心是智能合约,它是在网络上运行的程序,可以实现去信任的应用。 * 以太坊使用 POS 共识机制,通过质押资金来保障网络安全,降低能源消耗。 * 以太坊虚拟机(EVM)是运行智能合约的环境,每个节点都内置一个 EVM。 * 智能合约的编写通常使用 Solidity 语言,需要编译成字节码才能在 EVM 上执行。 * Remix 是一个在线 IDE,可以用于编写、编译、部署和执行 Solidity 智能合约。
108
0
0
2025-07-05 12:06
登链社区