分享百科

Solidity合约

这个视频是一个关于以太坊(Ethereum)替代虚拟机(AltVM)扩展方案的专家小组讨论。核心内容是探讨不同虚拟机架构(SVM, MoveVM, Parallel EVM)在扩展以太坊性能方面的优势和劣势,以及它们各自的设计理念和技术实现。 **关键论据和信息:** * **EVM性能瓶颈:** 传统EVM的性能瓶颈主要在于存储层,而非虚拟机本身。低效的状态访问导致了以太坊对区块Gas限制等参数的限制。Monad等项目通过优化数据库和引入并行执行等技术来解决这个问题,从而大幅提升EVM的性能。 * **SVM(Solana虚拟机)的优势:** SVM在用户采用率、开发者生态和吞吐量方面具有优势。Solana拥有庞大的用户群和活跃的开发者社区。Soon项目旨在将Solana的性能带到以太坊和其他生态系统中。 * **MoveVM的安全性:** Move语言和虚拟机在设计上更注重安全性,可以有效防止重入攻击等漏洞。Movement Labs认为,与其修补EVM的漏洞,不如使用更安全的MoveVM从根本上解决问题。 * **开发者学习成本和生态系统:** 学习新的编程语言(如Move)存在一定的门槛。EVM拥有庞大的开发者社区和成熟的工具链,这是其重要的竞争优势。 * **性能需求与实际应用:** 讨论中提到,当前区块链的瓶颈不在于TPS,而在于缺乏用户真正可用的DApp。解决实际应用问题比单纯追求高性能更重要。 * **各项目的行动号召:** * **Monad:** 邀请观众体验其测试网,体验快速的EVM环境。 * **MegaEth:** 预告即将到来的测试网,展示高性能EVM的实时性。 * **Movement Labs:** 鼓励开发者了解Move语言,尝试使用MoveVM构建应用。 * **Soon:** 邀请观众体验其主网上已上线的应用,并鼓励开发者使用SoonStack构建自己的应用链。 总而言之,该视频深入探讨了不同虚拟机架构在扩展以太坊性能和解决安全问题方面的潜力,并强调了开发者生态系统、用户采用率和实际应用的重要性。
2
0
0
6小时前
该视频的核心内容是展示如何使用 Yul (YOR) 语言从智能合约向钱包发送以太币,并对比了使用 Solidity 和 Yul 实现相同功能的 gas 消耗。 **关键论据/信息:** * **功能对比:** 视频展示了 Solidity 和 Yul 两种语言实现从合约向指定地址转移以太币的功能。Solidity 版本使用了 `payable` 地址类型和 `call` 函数,而 Yul 版本则直接使用了 `call` 操作码。 * **Gas 消耗:** 视频重点强调了使用 Yul 语言编写的合约在执行时 gas 消耗更低。通过实际部署和调用合约,视频展示了 Yul 版本的 gas 消耗比 Solidity 版本低约 273 gas。 * **Yul 代码解释:** 视频详细解释了 Yul 代码中 `call` 操作码的各个参数,包括 gas 限制、目标地址、发送的 value (使用 `self-balance` 获取合约余额)、以及用于传递和接收数据的内存区域。`self-balance` 被指出是比 `balance address` 更经济的获取合约余额的方式。 * **代码逻辑:** 两种语言实现的合约都包含一个 `withdraw` 函数,该函数将合约的所有余额转移到预先设定的 owner 地址。合约构造函数被设置为 `payable`,以便在部署时接收以太币。合约会检查交易是否成功,如果交易失败则回滚。
33
0
0
6天前
该视频的核心内容是讲解Solidity如何管理内存中的空闲内存指针(free memory pointer),以及如何使用Yul语言访问和操作它。视频强调了在使用Yul直接操作内存时,需要手动更新空闲内存指针,否则可能导致意想不到的后果。 **关键论据/信息:** 1. **空闲内存指针的位置:** Solidity将空闲内存指针存储在内存地址`0x40`处。初始值通常为`0x80`。 2. **Solidity的自动管理:** 当使用Solidity代码(例如,将数据复制到内存)时,Solidity编译器会自动更新空闲内存指针。 3. **Yul的手动管理:** 当使用Yul语言直接访问和修改内存时(例如,使用`mload`和`mstore`),Solidity不会自动更新空闲内存指针。 4. **`msize`操作码:** `msize`操作码返回函数调用期间访问的最远内存位置。它与空闲内存指针不同,空闲内存指针是Solidity用于分配新内存的指针。 5. **潜在风险:** 如果使用Yul写入内存但不更新空闲内存指针,可能会覆盖Solidity管理的数据,导致程序出错。 6. **示例代码:** 视频通过示例代码演示了如何使用Yul读取和写入内存,以及如何使用`msize`操作码。示例还展示了如何使用Hardhat控制台日志输出空闲内存指针的值。
42
0
0
6天前
该视频主要讲解了如何使用 Yul (YOR) 在 Solidity 合约中处理和读取 mappings (映射) 的数据。 **核心内容/主要观点:** * Yul 可以用来读取 Solidity 合约中 mappings 的数据,包括简单映射、嵌套映射以及地址到动态数组的映射。 * 读取 mapping 数据的关键在于计算出数据存储的位置 (data location),这通常涉及到将 mapping 的 slot (存储位置) 与 key (键) 进行 Keccak-256 哈希运算。 **关键论据/关键信息:** * **简单映射:** 通过 `keccak256(key, slot)` 计算数据位置,然后使用 `sload` 读取数据。 * **嵌套映射:** 按照从左到右的顺序,依次将 key 与 slot 进行 Keccak-256 哈希运算。例如,对于 `mapping(uint256 => mapping(uint256 => uint256))`,先计算 `keccak256(key1, slot)`,再计算 `keccak256(key2, 上一步的结果)`,得到最终的数据位置。 * **地址到动态数组的映射:** * 首先,`keccak256(key, slot)` 得到的是动态数组的长度,而不是数组本身的数据位置。 * 要获取数组中的元素,需要再次进行 Keccak-256 哈希运算,计算 `keccak256(keccak256(key, slot))`,得到数组的起始数据位置。 * 然后,通过将索引 (index) 添加到起始数据位置,即可使用 `sload` 读取数组中特定索引的元素。
34
0
0
6天前
该视频主要介绍了Solidity中的汇编语言YUL,以及学习和使用YUL的好处和基本概念。 **核心内容/主要观点:** * YUL是Solidity代码和编译后的字节码之间的中间语言,理解YUL有助于更深入地理解Solidity的工作原理,并能更好地调试和解决Solidity代码中的问题。 * YUL可以提高代码的gas效率,并且Solidity的新特性通常会先在YUL中实现。 **关键论据/关键信息:** * **YUL的优势:** * 更深入地理解Solidity:帮助理解Solidity的底层行为和编译器错误的原因。 * 提前使用新特性:Solidity升级后,新特性通常先在YUL中可用。 * 提高Gas效率:用YUL编写的合约或函数通常更节省Gas。 * **YUL的局限性:** * 底层语言:缺乏Solidity中的许多语法糖和辅助功能。 * 数据类型单一:只有一种数据类型,即256位的字(uint256)。 * 缺乏高级特性:没有存储变量、内存管理、数组、函数参数传递等。 * **YUL的基本概念:** * 数据类型:所有数据都表示为256位的字。 * 变量赋值:使用`:=`进行赋值。 * 作用域:YUL代码块可以访问Solidity中定义的变量。 * 字符串处理:由于YUL处理的是指针,字符串需要使用`bytes32`类型,并且长度不能超过32字节。可以使用`ABI encode`将`bytes32`转换回`string`。 * 布尔值:布尔值在YUL中用32位字的最后一位表示,1为真,0为假。 * 逻辑运算:使用`iszero`进行零值判断,实现逻辑非。 * 控制流:支持`if`语句和`for`循环,但没有`else`语句。 * 函数调用:可以使用算术函数(ADD, DIV, MOD)、比较函数(LT, GT, EQ)等。 * **YUL中的真值和假值:** * 真值:任何非零值都被认为是真。 * 假值:只有零值被认为是假。 * **避免使用`not`进行逻辑非:** * `not`会翻转所有位,而不是简单地返回真或假。应该使用`iszero`来判断是否为零。
72
0
0
6天前
在本次演讲中,Aicha 介绍了 ZK Roll-up 和 ZKPM(零知识证明机制)的工作原理,特别是 Scroll 如何设计 ZKPM。演讲的核心内容包括以下几个方面: 1. **ZK Roll-up 的优势与挑战**: - ZK Roll-up 提供了去中心化和安全性,但在可扩展性方面存在问题。传统区块链(如以太坊和比特币)在可扩展性、去中心化和安全性之间存在“区块链三难困境”,难以同时满足这三者。 2. **解决可扩展性问题的方案**: - 以太坊社区提出了通过 Roll-up 链来扩展以太坊的计划,Roll-up 链可以在第二层处理更多交易,并在第一层进行有效的结算和最终确认。 3. **ZK Roll-up 的工作机制**: - ZK Roll-up 通过提交交易数据和零知识证明到第一层,快速实现交易的最终确认。与传统的 Optimistic Roll-up 相比,ZK Roll-up 可以实现更快的最终性。 4. **ZK EVM 的构建**: - Scroll 正在构建一个通用的 ZK EVM,使得任何基于以太坊虚拟机(EVM)编写的应用程序都可以在第二层运行。ZK EVM 旨在提高开发者的友好性和可组合性。 5. **ZK EVM 的挑战与解决方案**: - 构建 ZK EVM 面临许多挑战,包括如何将 EVM 的逻辑转化为零知识电路。Aicha 提到了一些技术进展,如多项式承诺和硬件加速,帮助解决这些问题。 6. **Scroll 的开发原则**: - Scroll 在构建 ZK EVM 时,强调用户和开发者体验、安全性和去中心化的重要性,并鼓励社区参与和代码审查。 最后,Aicha 邀请开发者在 Scroll 测试网上进行创新应用的开发,并提出了一些希望看到的应用类型,如隐私投票和社交应用等。演讲结束时,Aicha 表达了对未来开发的期待,并欢迎大家参与到 Scroll 的开发中。
37
0
0
2025-04-13 11:09
在本次以太坊工程小组的会议中,David和Peter讨论了以太坊虚拟机(EVM)及其与Solidity编程语言的关系,重点介绍了EVM的工作原理、代码执行、存储、堆栈和内存等方面。 **核心内容概括:** 1. **EVM与Solidity的关系**:Solidity是用于编写以太坊智能合约的主要语言,EVM则是执行这些合约的环境。Solidity代码经过编译后生成字节码和ABI(应用程序二进制接口),后者定义了合约的功能和参数。 2. **以太坊交易结构**:交易包含nonce、gas价格、gas限制、接收地址、转账金额和数据字段。合约部署时,接收地址为空,数据字段包含初始化代码。 **关键论据与信息:** 1. **EVM的存储结构**:EVM是基于堆栈的处理器,使用堆栈、内存、存储和代码等多种数据存储方式。堆栈用于临时存储,内存用于事务期间的临时数据存储,存储则是持久化的数据存储。 2. **合约部署与函数调用**:合约的初始化代码在部署时执行,设置合约的初始状态。函数调用通过ABI进行,EVM根据函数选择器和参数执行相应的操作。 3. **存储优化**:合理布局存储变量可以减少gas费用,尤其是在多个变量共享同一存储位置时。对于动态数组和映射,EVM使用KCAK256哈希来确定存储位置。 4. **错误处理与日志**:EVM支持多种错误处理机制,包括revert、assert和require等。日志是EVM的写入输出区域,用于记录事件。 会议还提到了一些未来的讨论主题,包括代码的梅克尔化、跨合约调用的效率、异常处理等。与会者被鼓励提出更多的讨论话题,以便在未来的会议中深入探讨。
515
0
0
2025-03-12 17:27
视频主要讨论了以太坊改进提案EIP-7702的实现细节,特别是在Revm(以太坊虚拟机的一个实现)中的代码变化。EIP-7702引入了一种新的交易类型,允许外部拥有账户(EOA)升级为智能账户,并包含授权列表。 **核心内容概括:** 1. 视频通过完整的交易生命周期,逐步分析了EIP-7702对Revm代码的影响。 2. 重点介绍了EIP-7702如何在交易验证和执行过程中处理新交易类型及其授权列表。 **关键论据和信息:** 1. **EIP-7702的交易类型**:引入了新的交易类型,包含授权列表,确保至少有一个授权。 2. **交易验证**:在交易执行前,进行了一系列验证,包括检查是否在Prague升级后、链ID和交易费用等。 3. **授权列表处理**:通过循环处理授权列表,验证每个授权的有效性,包括签名验证和状态检查。 4. **EOA升级**:当EOA被升级为智能账户时,状态更新是持久的,即使后续交易失败,状态也不会回滚。 5. **执行过程中的字节码加载**:在调用智能账户时,需加载实际的智能合约字节码,而不是EOA的代理字节码。 视频最后鼓励观众提供反馈和讨论,认为EIP-7702是一个令人兴奋的更新。
128
0
0
2025-03-06 14:19
在这段视频中,开发者倡导者Radek介绍了智能合约的基本概念、工作原理,以及如何在以太坊上编写、部署和与智能合约互动。 **核心内容概括:** 智能合约是一种自执行的合约,其条款以代码形式直接写入区块链。与传统合约不同,智能合约不需要信任对方,因为一旦满足约定条件,合约会自动执行。以太坊是智能合约的关键平台,因其图灵完备性和以太坊虚拟机(EVM)支持复杂合约的创建和执行。 **关键论据和信息:** 1. **智能合约的定义**:智能合约是自执行的,类似于自动售货机,消除了对中介的需求。 2. **信任问题**:智能合约通过代码自动执行,消除了对交易对方的信任需求。 3. **以太坊的重要性**:以太坊专为智能合约设计,支持复杂的合约逻辑。 4. **编写和部署**:智能合约通常使用Solidity语言编写,并通过Ethereum Remix IDE进行部署。 5. **测试网络**:视频中展示了如何在Sepolia测试网络上部署合约,并获取测试ETH以支付交易费用。 6. **合约交互**:展示了如何读取和写入合约数据,包括如何增量计数器并确认交易。 通过这个视频,观众能够理解智能合约的基本概念,并掌握在以太坊上创建和操作智能合约的基本步骤。
561
0
0
2025-03-03 16:01
视频的核心内容是关于ZK-EVM(零知识以太坊虚拟机)的介绍,主要由Polygon Hermes的技术负责人Giordi进行讲解。ZK-EVM的目的是通过零知识证明技术提高以太坊交易的验证效率,从而实现更好的可扩展性。 **主要观点:** 1. **ZK-EVM的定义**:ZK-EVM是以太坊虚拟机(EVM)的一种扩展,利用零知识证明技术来验证交易的有效性,而无需重新处理所有交易。这种方法可以显著提高交易的处理速度和网络的可扩展性。 2. **可扩展性的重要性**:通过使用零知识证明,ZK-EVM能够在共识层仅需验证一个证明,而不是逐一检查每个交易,从而加快整个网络的交易处理速度。 **关键论据和信息:** 1. **确定性电路**:ZK-EVM使用确定性电路来定义输入和输出之间的关系,确保在给定输入的情况下,能够得到唯一的输出。 2. **公私输入的区分**:在ZK-EVM中,公输入(如交易状态)和私输入(如中间计算值)被明确区分,以优化验证过程。 3. **电路构建的复杂性**:构建ZK-EVM所需的电路是复杂的,涉及多种数学关系和约束系统,尤其是在处理大量交易时。 4. **多层次的状态机**:ZK-EVM由多个状态机组成,包括主处理器、二进制状态机、算术状态机和存储状态机等,每个状态机负责特定的操作,以提高整体效率。 5. **PIL语言的使用**:PIL(多项式身份语言)用于简化电路的定义和构建,使得开发者能够更容易地编写和验证复杂的电路。 总的来说,ZK-EVM通过引入零知识证明和多层次的状态机设计,旨在提升以太坊的交易处理能力和网络可扩展性。
176
0
0
2025-02-23 12:19
在这期视频中,主持人John Charbonneau和Harsu讨论了加密货币领域的核心问题,特别是关于区块链的可扩展性和虚拟机(VM)的优化。以下是视频的主要内容和关键论据总结: 1. **核心内容概括**: - 视频探讨了当前区块链技术面临的主要挑战,尤其是以太坊(Ethereum)和Solana在可扩展性方面的不同策略。主持人强调,随着需求的增加,现有的基础设施在处理能力和状态管理上存在瓶颈,尤其是状态大小的增长。 2. **关键论据和信息**: - **状态大小是主要瓶颈**:随着区块链的使用,状态大小不断增加,这使得节点在执行交易时需要更多的资源,导致性能下降。 - **并行执行的必要性**:并行执行可以提高交易处理速度,但如果基础设施不够优化,单纯的并行化并不能解决根本问题。 - **不同的解决方案**: - **弱无状态性**:以太坊正在探索通过将状态管理的负担转移给构建者(builders)来优化状态存储,减少每个验证者需要存储的状态量。 - **状态过期和租金**:提出了状态过期和租金的概念,以便在一定时间后清除不活跃的状态,从而减轻网络负担。 - **不同虚拟机的比较**:Solana的虚拟机(SVM)设计允许并行执行,而以太坊的虚拟机(EVM)则依赖于顺序执行,这使得两者在处理效率上存在显著差异。 - **未来的趋势**:尽管不同的区块链可能在设计上存在差异,但在解决可扩展性和状态管理问题上,最终可能会朝着相似的方向发展。 总的来说,视频强调了在区块链技术不断演进的过程中,如何有效管理状态和优化执行效率是实现可扩展性的关键。
541
0
0
2025-02-14 23:17
在这段视频中,Ye Zhang介绍了zkEVM的设计、优化和应用,重点讨论了Scroll作为以太坊的扩展解决方案,如何利用零知识证明(zk)技术来提高交易的安全性和效率。 ### 核心内容概述 1. **zkEVM的定义与目标**:zkEVM是一个通用的zk-rollup解决方案,旨在提高以太坊的可扩展性,使其在安全性、成本和速度上都优于传统的以太坊网络。它能够支持以太坊虚拟机(EVM)及其相关工具,确保开发者在Scroll上的开发体验与在以太坊上相同。 2. **zk-rollup的工作原理**:zk-rollup通过将大量交易压缩成一个小的、可验证的zk证明,来解决以太坊的可扩展性问题。这样,Layer 1只需验证这个证明,而不是重新执行所有交易,从而显著提高了网络的吞吐量。 3. **zkEVM的构建过程**:构建zkEVM需要将程序逻辑转化为算术电路,并解决多个技术挑战,包括如何处理EVM的动态执行轨迹、如何实现高效的查找表等。 ### 关键论据与信息 1. **zkEVM的优势**:zkEVM通过使用Plonkish算术化和KZG多项式承诺方案,能够支持更灵活的电路设计,减少证明的大小和验证成本。 2. **开发者友好性**:Scroll旨在使开发者无需编写复杂的zk电路,提供与以太坊相同的开发体验,促进不同应用之间的可组合性。 3. **性能优化**:通过GPU加速和其他硬件优化,Scroll的zkEVM在处理证明时显著提高了效率,证明时间从几小时缩短到几分钟。 4. **应用场景**:除了作为Layer 2解决方案,zkEVM还可以用于Layer 1的区块链证明、漏洞证明和去中心化的Oracle服务等多种应用。 5. **未来展望**:Scroll正在积极探索zkEVM的更多应用,包括如何在Layer 1中实现更高效的状态证明,以及如何通过递归证明来进一步优化区块链的可扩展性。 总之,Ye Zhang的演讲深入探讨了zkEVM的设计理念、技术挑战及其在区块链生态系统中的潜在应用,展示了Scroll在推动以太坊扩展性方面的努力和成就。
131
0
0
2025-02-12 14:51
视频的核心内容主要围绕Parallel EVM(并行以太坊虚拟机)的介绍及其对区块链性能提升的贡献。演讲者Hai来自RISE,强调了提升链上性能(如每秒处理的交易数和每秒消耗的气体量)是他们的主要任务。 **关键论据和信息包括:** 1. **Parallel EVM的功能**:Parallel EVM作为一种执行引擎,能够通过并行处理交易来最大化吞吐量,目标是实现每秒1 GigaGas和100,000笔交易。 2. **传统EVM的局限性**:传统的EVM执行器是顺序执行交易,这导致资源浪费。通过并行处理,理论上可以实现10倍的速度提升,但实际操作中面临核心状态冲突的问题。 3. **解决方案**:演讲者介绍了Block STM算法的应用,尽管其在EVM中并不完全适用。提出了一种懒惰更新的方法,允许在交易执行时不立即计算状态,而是在区块结束时进行评估,从而提高了并行处理的效率。 4. **性能提升的结果**:通过Parallel EVM,当前的平均速度提升为2倍,最大速度提升可达4倍。在处理独立的Uniswap交易时,最高可实现23倍的速度提升。 5. **未来的改进方向**:演讲者提到了一些未来的计划,包括支持可选的DAG(有向无环图)以优化同步速度,改进调度器以减少同步开销,以及进行低级别的性能调优。 6. **社区合作与开源**:Parallel EVM的实现是开源的,演讲者鼓励社区合作,欢迎新的想法和特性请求。 总的来说,视频强调了Parallel EVM在提升以太坊性能方面的重要性,并展示了通过技术创新实现更高吞吐量的潜力。
90
0
0
2025-02-08 15:15
视频的核心内容是关于以太坊虚拟机(EVM)的全面指南,旨在帮助区块链开发者和安全审计员从初级或中级水平提升到高级工程师或研究员。视频由Owen主讲,他在以太坊领域有两年的开发经验,并创立了Guardian Audits,专注于发现和审计智能合约中的安全漏洞。 视频中提出的关键论据和信息包括: 1. **EVM的结构与功能**:EVM是区块链的核心,理解其工作原理是成为高级开发者的关键。视频详细介绍了EVM的数据存储区域,包括栈、内存、调用数据和存储。 2. **数据存储区域**: - **栈**:用于存储32字节的字,采用先进后出(LIFO)结构。 - **内存**:类似于栈,但允许随机访问和写入,主要用于存储结构体和临时数据。 - **调用数据**:只读区域,存储函数调用的参数,读取成本较低。 - **存储**:最昂贵的存储区域,持久化数据,类似于区块链数据库。 3. **操作码(Opcodes)**:EVM通过操作码执行指令,视频中介绍了如何通过操作码与栈、内存和存储进行交互,包括常用的操作码如`push`、`pop`、`mstore`和`sstore`。 4. **优化建议**:视频提供了一些关于如何优化Gas费用的建议,例如优先从调用数据中读取而不是复制到内存中。 5. **实际示例**:通过示例合约,展示了如何查看字节码和操作码的执行过程,帮助观众理解EVM的实际运作。 总之,视频为希望深入理解EVM的开发者提供了系统的知识框架和实用的技巧,强调了EVM在区块链开发中的重要性。
129
0
0
2025-02-08 12:30
视频的核心内容主要围绕Solidity中的四舍五入问题,强调这些问题在智能合约审计中是常见的根本原因之一。视频的讲解者Owen分享了他在Guardian Audits的审计经验,指出理解和识别代码中的四舍五入问题对于提高审计质量至关重要。 关键论据和信息包括: 1. **四舍五入问题的根源**:在Solidity中,由于没有浮点数的概念,所有的除法运算都是截断式的,这导致了许多四舍五入问题。例如,9除以10的结果是0,而不是0.9。 2. **ERC20代币的精度**:通过定义代币的小数位数(如USDC有6位小数),可以在一定程度上解决四舍五入问题,但如果代币没有定义小数位数,就无法表示小数。 3. **实际案例分析**:视频中分析了两个具体的审计发现,展示了如何在不同的上下文中出现四舍五入问题,以及这些问题如何影响系统的安全性和功能。 - 第一个案例涉及到平均价格的计算,指出由于截断,可能导致用户以低于市场价格的平均价格购买代币。 - 第二个案例则展示了在尝试控制四舍五入时,逻辑错误导致的错误结果,强调了在处理负数时的复杂性。 4. **审计建议**:在进行安全审计时,审计人员应特别关注除法运算,确保正确处理截断,并考虑各种边界情况,以避免潜在的安全漏洞。 总之,视频强调了在智能合约审计中识别和处理四舍五入问题的重要性,并提供了实用的建议和案例分析,以帮助审计人员提高他们的审计技能。
128
0
0
2025-02-08 12:08
登链社区