分享百科

solidity 编程

视频 AI 总结: 该视频介绍了 Arbitrum Stylus,它为 Arbitrum 链增加了对 WebAssembly (WASM) 虚拟机的支持,允许开发者使用任何编译为 WASM 的编程语言(如 Rust)编写智能合约。这些 WASM 合约与现有的 Solidity 合约完全兼容,可以相互调用。Stylus 旨在提供更快的执行速度、更低的 gas 费用和更高的安全性(默认禁用重入)。视频还演示了如何使用 Stylus SDK 和 Cargo Stylus 构建、测试和部署简单的计数器合约,并探讨了 Stylus 的高级特性,如合约组合和缓存机制。最后,视频展示了 Stylus 在性能方面的优势,例如 Poseidon 哈希函数的 Rust 实现比 Solidity 快 18 倍,并提出了 Stylus 在 DeFi、链上游戏等领域的潜在应用。 关键信息: * Arbitrum Stylus 增加了对 WASM 虚拟机的支持,允许使用 Rust 等语言编写智能合约。 * WASM 合约与 Solidity 合约完全互操作。 * Stylus 旨在提高执行速度、降低 gas 费用和增强安全性。 * Stylus SDK 和 Cargo Stylus 提供了构建、测试和部署合约的工具。 * 视频演示了如何使用 Motsu 库进行单元测试。 * Stylus 具有合约组合和缓存机制等高级特性。 * Rust 实现的 Poseidon 哈希函数比 Solidity 快 18 倍。 * Stylus 在 DeFi、链上游戏等领域具有广泛的应用前景。
20
0
0
8小时前
视频 AI 总结: 该视频主要介绍了 Web3 安全和智能合约审计领域,指出其需求巨大且报酬丰厚,但也强调了学习的艰辛和必要性。视频提供了一个详细的初学者路线图,帮助人们成为智能合约审计员、安全研究员和黑客。 关键信息: * 智能合约审计的重要性:由于智能合约一旦部署就不可更改,且涉及大量资金,因此审计至关重要,以避免黑客攻击和资金损失。 * 高薪原因:Web3 安全领域人才短缺,且风险极高,导致智能合约审计员和安全研究员的薪资非常高。 * 学习路线图: * 学习区块链和以太坊的基础知识(阅读比特币和以太坊白皮书)。 * 熟悉 Solidity 编程语言(通过 Solidity 文档、Crypto Zombies 等)。 * 掌握 Foundry 和 Hardhat 等框架。 * 学习常见的智能合约漏洞和攻击模式(通过课程、CTF 挑战等)。 * 参与 CTF 挑战(如 Ethernaut 和 Damn Vulnerable DeFi)。 * 分析真实的 DeFi 攻击案例(通过 DeFi Hack Labs 仓库)。 * 参与审计竞赛(如 Coderina、Sherlock 等)。 * 建立公共形象:通过 LinkedIn、X (Twitter)、Medium 和 GitHub 等平台分享学习进度和研究成果。
65
0
0
1天前
视频 AI 总结: Maxim 在本次演讲中介绍了其用于从 EVM 字节码重建控制流图(CFG)的新算法。他首先概述了 EVM 字节码和基本块的概念,然后指出现有 CFG 重建工具缺乏准确性评估的问题。为此,他提出了一种基准测试算法,通过比较算法生成的块与实际基本块来评估其性能,并使用假阳性和假阴性指标进行比较。实验结果表明,他的开源库 EVMOL 在重建基本块的数量和假阴性方面优于其他解决方案。该算法采用自下而上的分析方法,结合堆栈分析和循环检测,以递归方式探索父块,直到找到明确的跳转目标。EVMOL 库提供 Rust、JavaScript、TypeScript 和 Python 版本,并提供在线演示,可用于分析智能合约的功能选择器、参数、状态可变性、存储使用情况以及生成交互式控制流图。 关键信息: * **控制流图(CFG)重建算法:** 提出了一种新的从 EVM 字节码重建 CFG 的算法。 * **基准测试方法:** 设计了一种评估 CFG 重建算法准确性的基准测试方法,通过比较算法生成的块与实际基本块来评估其性能。 * **EVMOL 库:** 开发了一个名为 EVMOL 的开源库,实现了该算法,并提供多种语言版本(Rust、JavaScript、TypeScript、Python)。 * **自下而上的分析方法:** 该算法采用自下而上的分析方法,结合堆栈分析和循环检测,以递归方式探索父块,直到找到明确的跳转目标。 * **性能优势:** 实验结果表明,EVMOL 在重建基本块的数量和假阴性方面优于其他解决方案。 * **应用场景:** EVMOL 库可用于分析智能合约的功能选择器、参数、状态可变性、存储使用情况以及生成交互式控制流图。 * **循环检测和中间状态:** 算法通过跟踪访问过的节点及其堆栈状态来检测循环,并引入中间状态的概念来避免无限循环。 * **不确定性处理:** 如果算法无法确定跳转目标,则会明确地用 Option 类型表示,避免产生错误的结论。
85
0
0
2天前
视频 AI 总结: 该视频是 Curve-V2 Cryptoswap AMM 的课程介绍,面向有 Foundry 经验的高级 Solidity 开发者。课程核心内容是讲解 Curve-V2 的数学原理和算法,Curve-V2 是一种自动集中流动性的 AMM,它使用内部价格来跟踪代币的指数移动平均值,从而支持波动性代币。课程将通过 Vypr 代码的讲解和 Foundry 练习来学习,但不会涉及流动性和交换量计算的高级数学知识。 关键信息: * Curve-V2 AMM 自动集中流动性,支持波动性代币。 * 课程内容包括 Curve-V2 的数学原理、算法、Vypr 代码走查和 Foundry 练习。 * Curve-V2 使用指数移动平均值来集中流动性。 * Curve-V2 的手续费结构是动态的,基于合约中的代币数量。 * 课程将跳过流动性和交换量计算的高级数学知识。 * 课程提供 GitHub 仓库,包含代码示例、图表和练习。 * 完整的课程可在 Siphon Updraft 上获得。 * Curve-V2 通过价格比例和转换余额来实现集中流动性。
209
0
0
5天前
视频 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 索引,提高过滤效率。
47
0
0
2025-07-16 08:33
视频 AI 总结: 该视频主要讲解了 Solidity 中 ABI 底层调用的相关知识,并对 `call`、`delegatecall` 底层调用方式进行了详细对比。核心内容是解释了这些底层调用与高级函数调用之间的区别,以及它们在处理 gas 限制、上下文切换和错误处理方面的不同行为。理解这些底层调用对于进行更高级的合约交互和优化至关重要。 关键信息: * **ABI 编码**:任何合约调用都会转换为 ABI 编码,包含函数选择器和参数编码。 * **`call` 调用**:底层调用,需手动检查返回值,不受 gas 限制,可以向合约转账,会切换上下文。 * **`delegatecall` 调用**:保持上下文的底层调用,相当于借用目标合约的代码在当前合约上下文中执行。 * **`staticcall` 调用**:模拟调用,不会修改状态变量,用于只读操作,会切换上下文。 * **错误处理**:底层调用失败不会抛出异常,而是通过返回值表示。 * **转账建议**:推荐使用 OpenZeppelin 的 `sendValue` 方法进行转账,避免 gas 限制问题。
78
0
0
2025-07-16 07:59
视频 AI 总结: 该视频主要讲解了 Solidity 中的 Static Call 的概念和使用场景,以及 View 方法的调用方式。老师通过实际代码演示,解释了 Static Call 的模拟执行特性,并强调了实践在学习智能合约开发中的重要性。同时,老师还推荐了一些开源项目,鼓励学生通过实践来加深对智能合约的理解,并建议从较早的版本入手,逐步学习复杂的逻辑。 关键信息: * Static Call 用于模拟执行合约调用,不改变链上状态,主要用于获取返回值或进行预判。 * Static Call 在实际生产环境中用得很少,但在需要预先知道调用结果时可以使用。 * View 方法调用不需要签名,不消耗 GAS fee (GAS price 为 0),常用于获取链上数据。 * Static Call 只能调用 View 和 Pure 方法,不能调用修改状态的方法。 * 学习智能合约开发的关键在于实践,建议从开源项目的早期版本入手,并尝试实现一些简单的项目,如 Uniswap、Token 投票、多签合约等。
32
0
0
2025-07-16 07:59
视频 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。
355
0
0
2025-07-13 21:04
视频 AI 总结: 该视频主要讲解了Solidity/EVM 中错误处理机制,与其他语言不同,EVM 在遇到错误时会回滚所有之前的状态变更,除非错误被程序处理。Solidity 提供了几种错误处理方式,包括抛出错误让 EVM 回滚,以及使用 try-catch 捕获外部调用产生的错误。 关键信息: * EVM 的错误处理机制具有原子性,要么全部成功,要么全部失败,不会出现中间状态。 * Solidity 中可以使用 `require` 和 `assert` 进行条件检查,条件不满足时会抛出异常。 * `assert` 用于代码不应该到达的状态,而 `require` 用于检查外部条件。 * 抛出错误时可以指定字符串或自定义错误类型,自定义错误类型 Gas 消耗更低。 * `try-catch` 只能用于捕获外部调用产生的错误,不能捕获合约内部的错误。 * `try-catch` 无法捕获 out-of-gas 错误和调用不存在合约的错误。
44
0
0
2025-07-12 10:35
视频 AI 总结: 该视频主要讲解了 Solidity 中的接口和继承,以及它们在代码组织和复用中的作用。接口定义了一组函数签名,用于合约间的调用,无需了解对方的具体实现。继承允许合约复用父合约的代码,提高代码的可读性和可维护性。视频还介绍了抽象合约,它允许定义部分实现的函数,供子合约继承和重写。 关键信息: * 接口是函数签名的集合,用于合约间的调用,无需了解对方的具体实现。 * 继承允许合约复用父合约的代码,提高代码的可读性和可维护性。 * `interface` 关键字用于定义接口,接口中只能声明函数,不能实现。 * `is` 关键字用于实现继承,子合约会复制父合约的代码。 * 抽象合约可以定义部分实现的函数,供子合约继承和重写。 * `virtual` 关键字表示函数可以被重写,`override` 关键字表示函数重写了父合约的实现。 * 私有变量在父合约中定义,子合约虽然继承了该变量,但是无法直接访问。 * 合约调用最终会转化为链上的字节码,只需要知道函数选择器即可调用。
39
0
0
2025-07-12 10:28
视频 AI 总结: 该视频主要讲解了Solidity中的构造函数、字节码以及自定义修改器的使用。首先解释了构造函数在合约部署时的作用,以及编译、创建和链上字节码的区别。然后详细介绍了自定义修改器(modifier)的概念和用法,包括如何使用`modify`关键字定义修改器,以及修改器如何扩展函数的功能,并展示了带参数和嵌套修改器的用法。最后,强调了修改器实际上是语法糖,会在编译时扩展代码,增加合约的字节码大小,并提供了一种替代方案,即将修改器逻辑改为私有函数来实现类似效果。 关键信息: * 构造函数在合约部署时运行一次,用于初始化合约状态。 * 字节码有编译后的字节码、创建字节码(包含编译后的字节码和参数)和链上字节码(运行构造函数后的结果)三种形式。 * 自定义修改器(modifier)可以用来扩展函数的功能,例如添加条件检查。 * 修改器是语法糖,会在编译时将修改器的代码插入到函数中,增加合约的字节码大小。 * 可以使用私有函数来实现类似修改器的效果,以减少合约的字节码大小。
62
0
0
2025-07-12 10:27
视频 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。
117
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 是直接调用合约的地址。
51
0
0
2025-07-09 08:46
视频 AI 总结: 该视频主要讲解了 Solidity 中的引用类型,包括数组、字符串、结构体和映射,以及它们在内存、存储和调用数据中的使用方式和注意事项。重点强调了引用类型与值类型的区别,引用类型通过指针指向数据,避免了大数据拷贝的开销。视频还讨论了 gas 消耗问题,以及如何在智能合约中高效地使用数组和映射,避免潜在的攻击风险。 关键信息: * 引用类型包括数组、字符串、结构体和映射,占用空间大,拷贝开销大,使用指针指向数据。 * 引用类型需要指定存储位置,包括 memory(函数内部,执行完消失)、storage(链上存储,持久存在)和 calldata(只读)。 * 数组分为定长数组和变长数组,变长数组可以使用 push 和 pop 操作。 * 在链上使用循环遍历数组时,需要注意 gas 消耗,避免线性增加,防止攻击。 * 删除数组元素时,可以使用将最后一个元素移动到要删除的位置,然后删除最后一个元素的方法,以减少 gas 消耗。 * 字符串是一种特殊的数组类型,不能用下标获取字符。 * 结构体是自定义的复合类型,可以包含任意类型成员,可以通过顺序或具名方式创建实例。 * 映射是一种键值对存储结构,类似于数据库中的表,key 不能是数组类型,没有长度概念,无法获取 key 或 value 的集合。 * 结构体和映射经常一起使用,结构体可以理解为表的其他字段,key 相当于表的索引。 * 在定义引用类型的变量时,需要额外加一个标识,标识这个变量存储在哪里。
75
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实例中运行。
56
0
0
2025-07-09 08:46
登链社区