Q1ngying

今朝梦醒与君别,遥盼春风寄相思

0%

calldata 编码规则

在上两篇文章中,我们分析了 Solidity EVM 中的存储结构,在本篇文章中,我们将详细分析 EVM 的 calldata 是如何进行编码的。

阅读全文 »

EVM 存储结构

在 EVM 中实际上有六个位置可以存储数据:stack,memory,calldata,storage,code(在一个特定的地址),log(触发事件)

实际上深入研究的是前四个:stack,memory,calldata,storage

阅读全文 »

原文:https://github.com/Cyfrin/sc-exploits-minimized/blob/main/src/invariant-break/README.md

Invariant(不变量)

不变量是程序或系统的属性,必须始终保持真实。

所有系统都至少具有一种不变性。甚至 ERC20/ERC721 代币也有不变性,Trail of Bits Properties repo中有一些不变性的例子。

考虑到这点,我们理解了系统的不变量,我们就可以编写测试来专门测试这些不变量

阅读全文 »

Fuzzing Test

Fuzzing Test 简介

Fuzzing Test(Fuzzing):向你的系统提供随机数据,并试图破坏它

为每一个可能的整数(或场景)编写一个用例来测试是基本做不到的(对于一些复杂逻辑的合约)。所以我们需要一种编程的方法在我们代码中找到一个特殊的场景

目前有两种常见的方法来寻找这些边缘情况:

阅读全文 »

永续合约简介

永续合约本质上是交易者在不实际购买代币的情况下,对某一特定指数代币的价格进行投注的一种方式,同时使交易者能够使用杠杆

之所以称之为永续合约,是因为交易者可以根据自己的意愿,无限期地保持他们的“永续”仓位开放。

永续合约中常见概念

阅读全文 »

anvil:创建用于部署和测试智能合约的本地测试网节点。它还可以分叉其他 EVM 兼容网络。

阅读全文 »

Flash Swaps

Uniswap flash swap 允许我们提取 Uniswap 上任何 ERC20 代币的全部储备,并无需预付费用即可执行任意逻辑,前提时在交易结束之前我们需要满足:

  • 使用相应的配对代币支付提取的ERC20代币
  • 返还提取的 ERC20 代币,并支付一部分的费用

Flash Swap 非常有用,因为它们消除了涉及 Uniswap 的多步骤交易的前期资本要求和不必要的操作顺序限制。

阅读全文 »