EVM puzzle
EVM PUZZLE运行游戏
puzzle 1 CALLVALUE题目:
pc opcode opcode name
01 38 CODESIZE
02 03 SUB
03 56 JUMP
04 FD REVERT
05 FD REVERT
06 5B JUMPDEST
07 00 STOP
08 FD REVERT
09 FD REVERT
输入恰当的value,使得题目的 opcode 正确执行,直到执行STOP
分析:CALLVALUE实际上就是msg.value,它会将msg.value存储到栈顶,而JUMP会读取栈顶值,并跳转到相应的字节地址,由JUMPDEST承接,所以我们只需要让msg.value==8即可
puzzles 2 CODESIZE题目:
pc opcode opcode name
00 34 CALLVALUE
0 ...
EVM入门
OpcodesOpcodes(操作码)是以太坊智能合约的基本单元。我们写的Solidity智能合约会被编译为字节码(bytecode),然后才能在EVM(以太坊虚拟机)上运行。而字节码就是由一系列Opcodes组成的。当用户在EVM中调用这个智能合约的函数时,EVM会解析并执行这些Opcodes,以实现合约逻辑。
常见的OpcodesPUSH1: 将一个字节的数据压入堆栈。例如,PUSH1 0x60 就是将 0x60 压入堆栈。DUP1 : 复制堆栈顶部的一个元素。SWAP1: 交换堆栈顶部的前两个元素。
例如:下面是一个简单的Solidity智能合约,它只有一个add()函数,计算1+1的结果并返回。
// SPDX-License-Identifier: MITpragma solidity ^0.8.20;contract Add { function add() public pure returns (uint256 result) { result = 1+1; }}
将合约编译后,我们可以得到合约对应的b ...
Compound
CompoundCompound是在Ethereum上运行的软件,旨在奖励分布式计算机网络运行传统货币市场。Compound允许用户将加密货币存入借贷池让借款人使用。而贷方从他们存入的资产赚取利息。
存款后,Compound会奖励贷方名为cToken(代表存款)的新加密货币。cToken的例子包括cETH、cBAT以及cDAI。
每个cToken都可无限转让或交易,但只能兑换最初锁定在协议中的加密货币。整个过程由Compound代码自动处理,代表贷方可以随时提币。
为了激励这个行为,Compound使用了另一种称为COMP的自家加密货币。每当用户和Compound市场互动时(借入、提取或偿还资产),作为奖励他们都会获得额外的COMP代币。
简言之,Compound 是一个允许用户借贷代币的智能合约,它与你的银行类似,Compound 把你的钱借给借款人,并随着时间的推移赚取利息。但与银行不同的是,你的利息是从你存入 Compound 的智能合约后开始复利计算的。因为这是一个智能合约,整个流程中没有中间人,因此利息会比传统银行要高。
运作机制Compound 协议让开发者可以基于以太坊 ...
GHO
GHO它是 Aave 协议中唯一一个去中心化、超额抵押的稳定币,作为以太坊主网上的去中心化稳定币,GHO 由用户铸造。与 Aave 协议上的所有借贷一样,用户必须提供抵押品(按特定抵押品比率)才能铸造 GHO。相应地,当用户偿还借贷头寸(或被清算)时,GHO 将返回 Aave 池并被销毁。GHO 铸造者累积的所有利息支付将直接进入Aave DAO 金库,这与用户借入其他资产时收集的标准准备金因子形成鲜明对比,本金将被销毁。
人们对真正去中心化、超额抵押和可配置的稳定币的需求很大。最近的事件证明了去中心化稳定币在市场波动期间维持稳定价值的用例。GHO 是一种由 Aave Governance 控制的稳定币,在社区支持下,它有潜力成为 DeFi 生态系统持续增长不可或缺的一部分。
与许多稳定币不同,GHO 的预言机价格是固定的。GHO 等去中心化稳定币是透明的,无法更改。利率由 Aave DAO 定义,偿还的利息将重定向到 DAO 而不是资产供应商。在安全模块中质押 AAVE 的借款人可享受折扣。
Aave学习知识
AaveAave是一种完全去中心化的、社区管理的协议,Aave 是芬兰语,意思是“幽灵”,最初于 2017 年 11 月推出时被称为 ETHLend。 ETHLend 是一个点对对点借贷系统。后来进行改进才是Aave,用户可以在其中借入和借出加密资产。协议的价值主张是创建一个可供任何拥有加密资产的人使用的替代去中心化资产货币市场。
作用Aave 是一个借贷池系统,使用户可以选择借入、借出和赚取 20 种不同数字资产的利息,而无需中间人。
想要赚取利息的用户将存入他们想要借出的资金,然后将其收集到流动性池中。当借款人贷款时,他们从这些资金池中提取资金。贷方可以以任何他们认为合适的方式交易或转让这些代币。
Aave 发行两种类型的代币来促进此活动,$AAVE(原生代币)和 aTokens。$AAVE 令牌有多种使用方式:1,如果支付费用,$AAVE 的所有者可以选择在向公众发布贷款之前查看贷款。
2, 使用 $AAVE 作为抵押品的用户可以比使用任何其他数字资产借入的金额略多。
3,代币持有者可以在平台上质押 $AAVE,以获得大约 6% 的 APY 分配。
aTokens 代币:
1,这 ...
闪电贷
闪电贷闪电贷(Flash loan):是一种无抵押、借贷金额无上限(可以借光池中所有的钱)的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内(同一个以太坊 transaction),在我看来就是非常迅速的借款还款
首先你要借钱的话,你要写个还钱合约,里面包括了如何赚钱,还本金加利息的数目,开始借款的话,就要实现一个flashloan()闪电贷合约,这个合约首先要先进行一系列的数据验证,再调用你的还钱合约,验证你是否还了本金加利息,如果没有还上,直接 revert 整个交易,让借款无效,从而保证借出方总是安全的。实现闪电贷通常有俩个合约。
闪电贷的优点:编写闪电贷合约总体并不复杂。使用闪电贷风险也比较小。如果赚钱逻辑失败,变成了亏钱逻辑,不能完成还款,那么也不用担心借来的巨款无力偿还。整个交易将会执行失败,就如同借款从来没有发生过一样。
实现你第一笔闪电贷合约闪电贷的极简入门下面是AI生成
## 闪电贷### 同一个区块中提款可导致闪电贷攻击攻击者利用闪电贷的特性,在同一个区块内执行多个交易,以迅速操控市场,并从中获利,闪电贷本身就是一笔交易完成的,如果允许在同一个区块上进行提款 ...
damn-vulnerable-defi题解
Damn-vulnerable-defiUnstoppable要求是,使拥有一百万DVI的钱包停止闪电贷的功能
分析:这个合约的代码在gittub上,要分开去看,这道题的解决就是靠一个基本的闪电贷的知识首先要看闪电贷的函数
function flashLoan(IERC3156FlashBorrower receiver, address _token, uint256 amount, bytes calldata data) external returns (bool) { if (amount == 0) revert InvalidAmount(0); // fail early if (address(asset) != _token) revert UnsupportedCurrency(); // enforce ERC3156 requirement uint256 balanceBefore = totalAssets(); if (convertToShares(totalSupp ...
hardhat
hardhathardhat就是以太坊开发环境,如同remix,现在介绍一下安装hardhat的步骤
打开终端,win+r,输入cmd
检查node js,安装没有,node -v (没有安装去官网下载)
建一个文件夹,在终端输入mkdir hardhat-tutorial,然后进入文件夹,cd hardhat-tutorial
进行初始化,npm init,接下来一直按enter,直到出现Is this OK? (yes),回答yes即可
安装hardhat npm install --save-dev hardhat,需要等待几秒
再安装一个插件 npm install –save-dev @nomicfoundation/hardhat-toolboxs
编写合同安装完成后,因为使用VScode,所以我们要安装一个VScode 安全帽,它可以帮组我们更好的使用solidity语言,然后在VScode创建一个新目录,写一个简单的.sol合约,在终端中运行该合约,npx hardhat compile,成功后就会看到Compiled 1 Solidity file su ...
Uniswap V2
Uniswap V2Uniswap是一种流行的去中心化交易所 (DEX)协议,允许用户将任何 ERC20 代币交换为另一种代币,提供流动性以赚取费用,并访问以太坊区块链上的价格预言机。 而Uniswap V2具有更强大的功能,如下:
它允许任何的ERC20代币与其他的ERC20代币配对,无需ETH作为中介,这使得流动性池更加多样化和高效,并为交易者提供更好的价格。 就是一种代币可与其他的代币转化,方便很多
Uniswap V2 实施了一种新颖的机制,可实现高度去中心化且抗操纵的链上价格供给。 这是通过在每个区块开始时测量两种资产的相对价格并随着时间的推移积累历史数据来实现的。 这允许外部智能合约查询任何时间间隔内任何货币对的时间加权平均价格(TWAP),同时将天然气成本和预言机风险降至最低。
Uniswap V2 支持一种称为闪电互换的新型交易,用户可以从池中接收任意数量的任何资产,并在链上的其他地方使用它,只要他们在交易结束时偿还该金额并支付费用即可。 交易。 这为套利、保证金交易、抵押品互换等开辟了新的可能性。
每个Uniswap智能合约或一对智能合约都管理由两个ERC-20代 ...
ERC20
ERC20ERC20是以太坊上的代币标准,它实现了代币转账的基本逻辑:
账户余额(balanceOf())
转账(transfer())
授权转账(transferFrom())
授权(approve())
代币总供给(totalSupply())
授权转账额度(allowance())
代币信息(可选):名称(name()),代号(symbol()),小数位数(decimals())
除了ERC20,还有它的接口合约IERC20,就是为了统一规范,以便好使用,接下来就介绍一下IERC20合约的功能
俩个事件
释放条件:当 value 单位的货币从账户 (from) 转账到另一账户 (to)时.event Transfer(address indexed from, address indexed to, uint256 value);
释放条件:当 value 单位的货币从账户 (owner) 授权给另一账户 (spender)时.event Approval(address indexed owner, address indexed spender, uint256 valu ...