SC programmer

@smartcontractprogrammer

https://www.smartcontract.engineer/

注册于 2025-01-20
结构体 | EVM 存储 4

本视频讲解了如何为存储单个结构体的状态变量分配存储槽。状态变量的存储遵循声明顺序,且小于32字节的数据会尽可能打包到一个槽中。例如,名为single的结构体包含一个uint128类型的字段x(占16字节),接下来的两个uint64类型字段y和z也会存储在同一个槽中。另一个名为multi-slots的结构体则从槽1开始存储,字段a、b和c分别占用槽1、2和3。视频还展示了如何使用汇编语言读取存储在不同槽中的数据,包括如何通过位运算提取各字段的值。通过调用相应的函数,可以验证存储的值是否正确。整体上,视频深入探讨了以太坊虚拟机(EVM)中状态变量的存储机制及其实现方式。

2604 0 0 2025-01-27
状态变量打包到一个槽中 | EVM 存储 3

在EBM存储中,数据小于32字节时可以打包到一个槽中。视频中介绍了如何读取和写入打包在单个槽中的状态变量,使用了位掩码技巧。首先,声明了一些状态变量以适应单个槽,例如uint128、uint64、uint32等。接着,展示了如何通过位掩码清除和更新这些状态变量的值。通过创建适当的位掩码,可以在不影响其他变量的情况下更新特定的状态变量。最后,介绍了如何使用状态变量的.slot和.offset属性来替代硬编码的槽和偏移量,从而简化代码。通过这些方法,可以有效地管理和操作存储在单个槽中的多个状态变量。

2452 0 0 2025-01-27
位掩码 | EVM 存储 2

本视频介绍了如何将小于32字节的状态变量打包到单个插槽中,并介绍了位掩码的基本技巧,以便手动读取和写入这些状态变量。首先,讲解了状态变量如何在单个插槽中存储,例如一个4字节的状态变量和一个2字节的状态变量可以一起存储在一个32字节的插槽中。接着,介绍了如何使用位掩码来更新或读取这些变量。通过示例,展示了如何创建一系列1和0的位掩码,并通过位移操作将其调整到所需位置。此外,还讲解了如何反转位掩码以满足不同的需求。最后,预告了下一期视频将使用这些位掩码技巧来读取和写入打包在单个插槽中的状态变量。

2534 0 0 2025-01-27
在单个槽中存储的状态变量 | EVM 存储 1

本视频系列将介绍EBM存储,重点学习状态变量在EBM存储中的存储位置及如何使用汇编语言读写这些变量。首先,我们将了解EO语言,它是Solidity中的内联汇编语言,主要用于读写状态变量。EO支持的唯一数据类型是bytes32。接着,我们将探讨如何在Solidity中使用EO进行变量赋值,并了解状态变量在EBM中的存储方式。状态变量以32字节为单位存储,每个合约最多有2的256次方个槽位,槽位按声明顺序分配。对于小于32字节的状态变量,它们会被打包存储。我们将通过sstore和sload函数进行示例,sstore用于将值存储到指定槽位,而sload用于从槽位读取值。通过这些示例,我们将掌握如何在EBM存储中读写状态变量。

3776 0 0 2025-01-27
Uniswap V3 套利

本文介绍了如何利用Uniswap V3的闪电兑换机制构建一个套利智能合约。通过在两个不同的Uniswap V3池(一个0.3%手续费,另一个0.05%手续费)之间进行交易,合约可以在不需要预先存入代币的情况下,先获取代币并进行交换,最后偿还原池并获得利润。具体步骤包括:从第一个池请求代币,执行第二个池的交换,最后将利润支付给调用者。测试结果显示,通过10 DAI的交易,套利利润约为24美分。

2674 0 0 2025-01-22
Uniswap V3 闪电贷

Uniswap V3 的闪电兑换功能允许用户在单个交易中借入代币,前提是他们偿还借入的金额加上费用。该过程包括定义 ERC20 代币和 Uniswap V3 池的接口,通过调用池的闪电功能来启动闪电交换,并实现回调函数以处理借入的代币和偿还。示例演示了从池中借入 100 万 DAI,用户支付的费用根据池的费用百分比计算。实现包括合约初始化、闪电交换启动,以及回调函数以确保正确偿还和执行自定义逻辑。

1920 0 0 2025-01-22
内部费用增长 Postion 库 | Uniswap V3 核心合约解析 - 第40部分

本文总结了完成clam合约和positions.sol合约的过程。首先,在fix.128.sol中定义了一个常量q128,用于在流动性计算中进行乘法和除法。接着,完成了positions.sol合约中的update函数,通过计算tokens.old的数量并更新相应的状态。随后,在clam合约中更新了fee growth的全局变量,并确保在流动性大于0时更新全局费用跟踪器。最后,成功编译了合约,标志着clam合约的代码和视频系列的完成。

1776 0 0 2025-01-22
内部费用增长 Tick 库 | Uniswap V3 核心合约解析 - 第 39 部分

本视频介绍了如何在clam合约中实现费用计算功能,重点是完成getFeeGrowthInside函数。该函数通过输入参数(包括当前tick和全局费用变量)计算FeeGrowthInside0x128和FeeGrowthInside1x128。视频中详细讲解了如何获取上下tick的信息,并根据当前tick与上下tick的关系计算FeeGrowthBelow和FeeGrowthAbove,最终得出FeeGrowthInside的值。此外,还提到在使用Solidity 0.8版本时,需要特别处理溢出和下溢问题。最后,视频展示了如何在更新函数中初始化tick并编译合约。

1954 0 0 2025-01-22
费用增长初始化第5部分 | Uniswap V3核心合约解析 - 第38部分

本文讨论了在不同情况下计算费率增长的方法,特别是在初始化的下限和上限区间内。首先,介绍了如何在当前刻度低于、介于或高于初始化的下限和上限时,分别计算费率增长。通过设定初始值并应用更新规则,得出在不同时间点的费率增长值。最终,所有情况下的费率增长均可通过相应时间点的费率差值来计算,确保了计算的一致性和准确性。接下来的视频将总结已计算的内容。

1767 0 0 2025-01-22
费用增长初始化 第4部分 | Uniswap V3核心合约解析 - 第37部分

在本视频中,我们计算了在特定条件下的费用增长,特别是当下限未初始化而上限已初始化时的情况。通过计算 Fk 减去 F0,我们得出在两个刻度之间的费用增长。我们分析了不同时间点的费用增长,并得出结论:费用增长的计算公式为 FG2 减去 FG1。接下来的视频将探讨下限和上限均已初始化的情况。

1658 0 0 2025-01-22