分享百科

solidity 编程

视频 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
19小时前
视频 AI 总结: 该视频主要讲解了 Solidity 中的接口和继承,以及它们在代码组织和复用中的作用。接口定义了一组函数签名,用于合约间的调用,无需了解对方的具体实现。继承允许合约复用父合约的代码,提高代码的可读性和可维护性。视频还介绍了抽象合约,它允许定义部分实现的函数,供子合约继承和重写。 关键信息: * 接口是函数签名的集合,用于合约间的调用,无需了解对方的具体实现。 * 继承允许合约复用父合约的代码,提高代码的可读性和可维护性。 * `interface` 关键字用于定义接口,接口中只能声明函数,不能实现。 * `is` 关键字用于实现继承,子合约会复制父合约的代码。 * 抽象合约可以定义部分实现的函数,供子合约继承和重写。 * `virtual` 关键字表示函数可以被重写,`override` 关键字表示函数重写了父合约的实现。 * 私有变量在父合约中定义,子合约虽然继承了该变量,但是无法直接访问。 * 合约调用最终会转化为链上的字节码,只需要知道函数选择器即可调用。
5
0
0
19小时前
视频 AI 总结: 该视频主要讲解了Solidity中的构造函数、字节码以及自定义修改器的使用。首先解释了构造函数在合约部署时的作用,以及编译、创建和链上字节码的区别。然后详细介绍了自定义修改器(modifier)的概念和用法,包括如何使用`modify`关键字定义修改器,以及修改器如何扩展函数的功能,并展示了带参数和嵌套修改器的用法。最后,强调了修改器实际上是语法糖,会在编译时扩展代码,增加合约的字节码大小,并提供了一种替代方案,即将修改器逻辑改为私有函数来实现类似效果。 关键信息: * 构造函数在合约部署时运行一次,用于初始化合约状态。 * 字节码有编译后的字节码、创建字节码(包含编译后的字节码和参数)和链上字节码(运行构造函数后的结果)三种形式。 * 自定义修改器(modifier)可以用来扩展函数的功能,例如添加条件检查。 * 修改器是语法糖,会在编译时将修改器的代码插入到函数中,增加合约的字节码大小。 * 可以使用私有函数来实现类似修改器的效果,以减少合约的字节码大小。
10
0
0
19小时前
视频 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
3天前
视频 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 是直接调用合约的地址。
25
0
0
3天前
视频 AI 总结: 该视频主要讲解了 Solidity 中的引用类型,包括数组、字符串、结构体和映射,以及它们在内存、存储和调用数据中的使用方式和注意事项。重点强调了引用类型与值类型的区别,引用类型通过指针指向数据,避免了大数据拷贝的开销。视频还讨论了 gas 消耗问题,以及如何在智能合约中高效地使用数组和映射,避免潜在的攻击风险。 关键信息: * 引用类型包括数组、字符串、结构体和映射,占用空间大,拷贝开销大,使用指针指向数据。 * 引用类型需要指定存储位置,包括 memory(函数内部,执行完消失)、storage(链上存储,持久存在)和 calldata(只读)。 * 数组分为定长数组和变长数组,变长数组可以使用 push 和 pop 操作。 * 在链上使用循环遍历数组时,需要注意 gas 消耗,避免线性增加,防止攻击。 * 删除数组元素时,可以使用将最后一个元素移动到要删除的位置,然后删除最后一个元素的方法,以减少 gas 消耗。 * 字符串是一种特殊的数组类型,不能用下标获取字符。 * 结构体是自定义的复合类型,可以包含任意类型成员,可以通过顺序或具名方式创建实例。 * 映射是一种键值对存储结构,类似于数据库中的表,key 不能是数组类型,没有长度概念,无法获取 key 或 value 的集合。 * 结构体和映射经常一起使用,结构体可以理解为表的其他字段,key 相当于表的索引。 * 在定义引用类型的变量时,需要额外加一个标识,标识这个变量存储在哪里。
28
0
0
3天前
视频 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实例中运行。
23
0
0
3天前
视频 AI 总结: 该视频深入浅出地讲解了 EVM 钱包的演变,重点介绍了 EIP-4337 账户抽象、EIP-7702 以及嵌入式钱包。视频旨在帮助开发者理解这些技术标准,并了解它们在构建去中心化应用中的作用。通过对比 EOA 和智能合约钱包的优缺点,视频阐述了 EIP-4337 如何实现账户抽象,以及 EIP-7702 如何将智能合约功能引入 EOA。此外,视频还探讨了嵌入式钱包的不同类型及其安全风险,并推荐开发者使用智能合约钱包以获得更高的安全性和灵活性。 关键信息: * EVM 钱包的两种类型:EOA(外部拥有账户)和智能合约。 * EIP-4337 实现了以太坊上的合约账户抽象,引入了用户操作、捆绑者、入口点、支付者和聚合器等概念。 * EIP-7702 旨在将智能合约功能引入 EOA,与 ERC-4337 兼容,并将在 Petra 升级中上线。 * 嵌入式钱包直接嵌入到应用程序中,提供更便捷的用户体验,有 EOA 钱包、智能合约钱包和智能 EOA 三种类型。 * 推荐开发者使用智能合约钱包,因为它提供了更高的安全性和灵活性。
74
0
0
5天前
视频 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,可以获得套利机会。
123
0
0
6天前
视频 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 实现)和共识层。
63
0
0
2025-07-05 12:08
视频 AI 总结: 该视频主要讲解了以太坊的核心概念,视频回顾了区块链的哈希结构和比特币的局限性,引出以太坊作为可执行程序的区块链平台的优势。重点介绍了以太坊的虚拟机(EVM)如何运行智能合约,以及从 POW 共识机制切换到 POS 质押机制的原因。最后,通过 Remix 在线 IDE 演示了智能合约的编写、编译、部署和执行过程。 关键信息: * 以太坊是一个可以执行程序的区块链网络,弥补了比特币的不足。 * 以太坊的核心是智能合约,它是在网络上运行的程序,可以实现去信任的应用。 * 以太坊使用 POS 共识机制,通过质押资金来保障网络安全,降低能源消耗。 * 以太坊虚拟机(EVM)是运行智能合约的环境,每个节点都内置一个 EVM。 * 智能合约的编写通常使用 Solidity 语言,需要编译成字节码才能在 EVM 上执行。 * Remix 是一个在线 IDE,可以用于编写、编译、部署和执行 Solidity 智能合约。
89
0
0
2025-07-05 12:06
视频 AI 总结: **核心内容概要:** 该视频主要讲解了以太坊 Solidity 智能合约中常见的两种安全漏洞:舍入误差(Rounding Issues)和签名可延展性(Signature Malleability)。视频深入分析了这两种漏洞的根本原因、常见表现形式,并通过实际案例展示了如何识别和防范这些问题。目的是帮助开发者在进行智能合约安全审计时,能够更好地发现和修复潜在的安全风险。 **关键信息:** * **舍入误差:** * 根本原因是 Solidity 不支持浮点数,除法运算会进行截断(Truncation),导致精度丢失。 * 常见场景包括计算平均价格、分配奖励等,如果未充分考虑精度问题,可能导致资金损失或协议被操纵。 * 解决方法包括使用足够的小数位数、采用向上取整或向下取整策略,并根据具体业务逻辑进行调整。 * **签名可延展性:** * 根本原因是 ECDSA 算法中,对于同一个消息,存在多个有效的签名。 * 攻击者可以利用这一特性,篡改签名中的 `s` 值,生成另一个有效的签名,从而重复执行某些操作。 * 解决方法是限制签名中 `s` 值的范围,只接受小于 `n/2` 的 `s` 值,从而避免签名可延展性攻击。 * **案例分析:** * 视频通过两个具体的漏洞案例,详细展示了舍入误差和签名可延展性在实际项目中的表现形式,以及相应的修复方案。 * **安全审计建议:** * 在进行智能合约安全审计时,需要特别关注除法运算和 ECDSA 签名验证,仔细分析是否存在舍入误差和签名可延展性问题。 * 需要充分考虑各种边界情况和异常输入,确保智能合约的安全性。
248
0
0
2025-07-02 22:32
该视频的核心内容是介绍如何使用 ScaffoldEth2 快速构建和部署以太坊应用,并鼓励开发者通过 Speedrun Ethereum 学习区块链开发。 **关键论据和信息:** * **ScaffoldEth2 简介:** ScaffoldEth2 是一个用于快速应用原型设计的工具,集成了后端(Foundry/Hardhat)和前端(Next.js),并针对 LLM 进行了优化,即使非程序员也能通过 AI 辅助构建链上应用。 * **快速上手:** 视频演示了如何使用 ScaffoldEth2 创建一个简单的应用,包括启动本地区块链、部署智能合约、以及使用 burner wallets 进行快速交易测试。 * **智能合约开发:** 强调了通过 Solidity by Example 学习 Solidity 的重要性,并展示了如何在 ScaffoldEth2 中快速迭代开发智能合约。 * **前端开发:** 介绍了如何使用 ScaffoldEth2 提供的 hooks(`useScaffoldContractRead` 和 `useScaffoldContractWrite`)与智能合约进行交互,以及如何使用内置组件快速构建用户界面。 * **部署到生产环境:** 演示了如何将智能合约部署到公共网络(如 Base),并使用 Vercel 或 IPFS 部署前端。 * **Speedrun Ethereum 课程:** 推荐了 Speedrun Ethereum 课程,该课程包含一系列挑战,旨在帮助开发者掌握区块链开发的核心概念,例如 staking、token vendor、随机数生成和 DEX 构建。 * **Vibe Coding:** 演示了使用 AI 工具(Cursor)结合 ScaffoldEth2 进行 "vibe coding",即通过自然语言描述需求,让 AI 自动生成代码,从而降低开发门槛。 * **Build Guild DAO:** 介绍了 Build Guild DAO,一个由开发者、教师和工具构建者组成的社区,致力于提供区块链开发教育和支持。 * **扩展和应用案例:** 提到了 ScaffoldEth2 的扩展功能,例如 On-Chain Kit,以及使用 ScaffoldEth2 构建的应用案例,例如 ABI Ninja。
127
0
0
2025-06-24 19:45
该视频的核心内容是关于如何利用 Optimism (OP) Stack 来构建一个零知识证明 Rollup (ZK Rollup),并分享了在这个过程中遇到的各种挑战。视频的主要观点是,OP Stack 是一个很好的起点,但要成功构建 ZK Rollup,需要进行大量的修改和研究。 视频中提出的关键论据和信息包括: * **OP Stack 的优势:** OP Stack 提供了一个优秀的框架,包括 sequencer, batcher, 智能合约, bridge 和 L2 geth,可以作为构建 Rollup 的起点。 * **OP Stack 的挑战:** * **Sequencer 的特权:** Sequencer 可以注入交易,这与 ZK Rollup 的零信任原则相悖,需要修改电路以验证交易的有效性。 * **服务集成:** Batcher 和数据可用性 (DA) 层与 ZK 电路没有直接联系,需要进行适配。 * **智能合约的模块化:** 智能合约(如 Bridge)的模块化程度不够,修改起来比较困难。例如,Optimistic Rollup 的提款需要等待七天,而 ZK Rollup 不需要,需要修改 Bridge 合约。 * **Geth 的修改:** 需要修改 Geth 以支持 ZK Rollup 的特性,但 OP Stack 中的 Geth 同时用于 L1 通信和 L2 状态管理,这使得升级变得复杂。 * **Deposit 交易:** Deposit 交易在 L1 上支付,但在 L2 上没有直接支付,需要修改电路以处理这种情况。 * **系统交易:** 系统交易频繁地将 L1 的信息写入 L2 的智能合约,增加了运营成本,需要考虑替代设计。 * **ZK 电路的挑战:** * **缺少预编译:** 现有的 ZK 电路可能缺少预编译,需要自行实现。 * **数据一致性:** 需要确保多个 ZK 电路使用相同输入,以保证数据一致性。 * **其他挑战:** * **基础设施:** 需要搭建基础设施来协调区块链、证明生成和状态提议。 * **测试:** ZK 电路的测试非常耗时,需要采用高级测试技术。 * **文档:** OP Stack 的文档可能存在过时或缺失的情况。 * **Web 2.0 组件:** 需要开发 Web 2.0 组件,如用户界面和区块浏览器。 * **运营:** 需要部署和维护各种服务,以确保链的稳定运行。 总而言之,该视频强调了利用 OP Stack 构建 ZK Rollup 的复杂性,并为希望尝试这种方法的开发者提供了宝贵的见解和指导。
208
0
0
2025-06-11 17:50
该视频的核心内容是关于以太坊 L1 交易并行化的技术,旨在提高以太坊执行客户端的效率,缩短区块执行时间,从而提升整个网络的性能。 **关键论据/信息:** * **背景:** 以太坊正在扩展,对区块 gas 的需求增加,新的密码学原语不断涌现,对执行客户端提出了更高的效率要求。 * **问题:** 区块执行占据了以太坊 slot 的很大一部分时间(4秒/12秒),优化执行时间可以释放资源给共识客户端。 * **目标:** 通过并行执行交易,减少区块执行时间。 * **历史:** 介绍了以太坊 Byzantium 版本前后交易执行方式的演变,EIP-98 和 658 放宽了对中间状态根的要求,为并行执行提供了可能。 * **并行执行策略:** * **不并行化:** 作为最坏情况的基准,用于设置 gas 目标。 * **悲观锁:** 不适用于以太坊 L1 协议。 * **乐观执行:** 执行所有交易,然后检测和处理冲突。 * **Naive 策略:** 假设所有交易都冲突,并行执行后重新串行执行,但可以缓存数据,加速串行执行(Nethermind 的 pre-warming 功能)。 * **冲突检测与处理:** 并行执行后,检测冲突并重新执行冲突交易(Besu 的实现方式)。 * **Besu 的实现:** * **Bonsai 存储格式:** 提供单一语义世界视图,并允许创建内存中的世界状态覆盖(overlay),可以克隆多个世界状态副本,供并行交易使用。 * **Accumulator 数据结构:** 跟踪每个世界状态的读取、写入和更新,用于冲突检测。 * **软件事务内存:** Besu 将 Bonsai 用作软件事务内存,允许多个交易并行执行,然后通过 Accumulator 检测冲突并合并结果。 * **冲突检测机制:** 按照成本由低到高的顺序进行检查,首先是账户级别检查,然后是合约存储检查,以快速失败。 * **并行化效果:** * 并行化程度取决于区块内容和硬件配置。 * 在普通硬件上,Besu 可以成功并行执行大约 60-65% 的交易。 * 平均吞吐量约为 160-170 megagas/秒。 * **建议:** * 并行化并非万能,需要考虑硬件、区块内容和用例。 * 冲突检测和额外的内存消耗是成本。 * 对于需要高性能执行的场景(如 L2),建议启用此功能。 * 推荐使用 8 核 CPU,或具有超线程的 4 核 CPU。 * 鼓励用户尝试 Besu 的并行化功能,并提供反馈。
307
0
0
2025-04-25 09:50
登链社区