智能合约安全

2024年07月08日更新 456 人订阅
专栏简介 DeFi安全之杠杆挖矿 SharkTeam系列课程—NFT&GameFi开发与安全 NFT和GameFi概念介绍 ERC20/ERC721/ERC1155概念与协议 闪电贷和重入攻击:Grim Finance被黑事件分析 重入攻击:Uniswap V3流动性协议Visor Finance被黑事件分析 领航Web3安全,让数字生活更安全更美好:SharkTeam线上AMA实录 闪电贷攻击:Sashimi Swap被黑事件分析 ERC20相关业务的合约开发与合约安全 权限问题:Crosswise 被黑事件分析 细节决定成败:QBridge被黑事件分析 损失3.26亿,跨链协议再暴雷:Wormhole被黑事件分析 参数校验不严谨:Superfluid被黑事件分析 ERC721/ERC1155合约开发与合约安全 闪电贷+提案攻击-Beanstalk Farms攻击原理及资金流向分析 监守自盗?Titano.Finance被黑事件分析 AscendEX黑客攻击事件资金流向分析 NFT交易平台安全风险频发--OpenSea & X2Y2安全事件分析 SharkTeam系列课程—NFT 应用场景分析 SharkTeam发布2022年Q1智能合约安全态势感知季报 ChainAegis链上分析:以太坊合并后的中心化风险 大意失荆州-Akutar合约漏洞导致34M美元资金永久被锁 SharkTeam:十大智能合约安全威胁之回退攻击 闪电贷&重入攻击:Hundred与Agave被黑事件分析 从APE空投漏洞谈起,NFT安全情况究竟如何? 千里之堤,溃于蚁穴—跨链协议Nomad被黑事件分析 SharkTeam服务全线升级,重磅推出ChainAegis链上风险分析平台,全面保障Web3生态安全 ChainAegis:从链上数据看,FTX会崩盘吗? NFT合约同样也有重入风险:Revest Finance被黑事件分析 操纵预言机+提案攻击—Fortress Loans被黑事件分析 去年519,今年510—从链上分析的角度看,LUNA会不会真的陷入死亡螺旋? 算法稳定币UST崩盘—是完美风暴还是金融围猎? 6.2亿,再破记录:Ronin Bridge攻击事件技术分析与资金流向分析 周天王的愚人节-NFT精准钓鱼事件技术分析与资金流向分析 【深度】从链上分析和金融安全角度,看stETH的囚徒困境和Celsius挤兑事件 NFT流动性协议的安全困局—NFT借贷协议XCarnival被黑事件分析 NFT流动性市场安全问题频发—NFT交易平台Quixotic被黑事件分析 【深度】OpenSea 新协议 Seaport源码解析 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析 SharkTeam发布2022年第二季度Web3安全态势感知报告 DeFi安全之DEX与AMMs SharkTeam完成Flow生态NFT市场MatrixMarket的安全审计 闪电贷技术详解-Part 1 闪电贷技术详解-Part 2 闪电贷技术详解-Part 3 SharkTeam系列课程:什么是DeFi借贷 DeFi安全之抵押借贷 从链上分析角度看Tornado Cash被制裁事件 Defi安全之借贷杠杆 链上数据角度,看DeFi隐私赛道的现状和未来 火眼金睛,教你如何识别Rug Pull项目 SharkTeam:十大智能合约安全威胁之重入攻击 SharkTeam:十大智能合约安全威胁之操纵预言机 SharkTeam:十大智能合约安全威胁之逻辑校验漏洞 SharkTeam:十大智能合约安全威胁之权限漏洞 SharkTeam:8月Web3安全报告 SharkTeam:十大智能合约安全威胁之合约升级漏洞 警惕以太坊合并后的重放攻击:Omni跨链桥被攻击事件分析 SharkTeam:十大智能合约安全威胁之函数恶意初始化 波卡“以太坊"Moonbeam的技术创新之路 左手以太坊、右手跨链-Moonbeam的创新与突破 批准+校验漏洞-TransitSwap安全事件分析 ChainAegis:BTC和ETH第三季度链上数据解读 默克尔树漏洞成因和链上资金追踪-BNBChain跨链桥攻击事件分析 SharkTeam:Move合约开发与合约安全 Moonbeam的多链架构 高保真还原BNBChain跨链攻击实现原理-攻击者选择高度为110217401的区块到底有什么讲究? SharkTeam:十大智能合约安全威胁之三明治攻击 香港要成为国际虚拟资产中心,链上安全是关键 SharkTeam:十大智能合约安全威胁之提案攻击 ChainAegis:FTX资金流向最新分析,风险大,请尽快提款 SharkTeam:十大智能合约安全威胁之重放攻击 Move语言安全性分析及合约审计要点 之权限漏洞、重入攻击 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 1 区块链安全 Move语言安全性分析及合约审计要点 之逻辑校验漏洞 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 2 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 3 Move语言安全性分析及合约审计要点 之函数恶意初始化 链上数据分析:CeFi频繁暴雷后,DEX会成为主流吗? Move语言安全性分析及合约审计要点之回退攻击 SharkTeam:11月Web3安全报告 SharkTeam与NFMS达成合作,提供Move合约审计服务 Move语言安全性分析及合约审计要点之提案攻击 ChainAegis分析报告:Dogecoin排名前10的市值从何而来? SharkTeam完成APTOS生态项目NFMS的合约审计 ArWiki调研报告 Move语言安全性分析及合约审计要点之合约升级漏洞 Verto调研报告 在深熊中艰难前行,DeFi & CeFi 2022年度分析报告 SharkTeam:2022年度Web3安全报告 ChainAegis:2022年度NFT&GameFi分析报告 Move语言安全性分析及合约审计要点之操纵预言机 加密货币反洗钱(AML)分析 SharkTeam:Move语言安全性分析及合约审计要点 之三明治攻击 ChainAegis:BUSD链上数据分析报告 闪电贷攻击+业务逻辑漏洞:Platypus Finance事件分析 SharkTeam:Move语言安全性分析及合约审计要点之重放攻击 加密货币钓鱼团伙Monkey Drainer链上行为分析 权限漏洞+价格操纵:SwapX被攻击事件分析 ChainAegis:Blur链上数据分析报告 ChainAegis:数读Silvergate & SVB崩盘事件 业务逻辑漏洞+闪电贷攻击:Euler Finance被攻击事件分析 ChainAegis:稳定币协议Liquity链上分析报告 ChainAegis:GMX链上分析报告 SharkTeam与GoPlus Security达成战略合作,共同守护Web3世界安全 香港之夜,Dao的盛会 SharkTeam:2023年第一季度Web3安全报告 Talk with us,公链、DeFi等Web3时代的创新发展机遇有哪些? 香港Web3嘉年华“Web3与安全”主题论坛议程揭秘 2023香港Web3嘉年华,SharkTeam展台指引 权限校验漏洞:SushiSwap被攻击事件分析 香港会议期间,SharkTeam发布“链上安全分析研究报告” 安全是发展Web3的必要条件-SharkTeam受邀香港Web3嘉年华 ChainAegis:LSD赛道链上分析报告 Sui 与 Aptos 技术实现对比 ChainAegis:去中心化保险赛道及风险分析 ChainAegis:Pancakeswap V2V3链上数据分析 ChainAegis:AAVE V2/V3链上数据分析 ChainAegis:Gains Network链上数据分析 逻辑漏洞:DEUS被攻击事件分析 ChainAegis:BRC-20链上数据分析 ChainAegis:Blend链上数据分析 SharkTeam:Tornado.Cash提案攻击原理分析 SharkTeam:Sui主网链上数据分析 SharkTeam:Jimbos protocol闪电贷攻击原理分析 SharkTeam:RWA赛道链上数据分析 SharkTeam:Zksync Era链上数据分析 SharkTeam:Atomic Wallet攻击原理和洗钱模式分析 链安全 Sui主网上线满月,链上持币者数据分析 SharkTeam:Atlantis提案攻击原理分析 SharkTeam:HashFlow攻击事件原理分析 SharkTeam:2023年第二季度Web3安全报告 SharkTeam与Move Accelerator达成合作,Let’s Move! SharkTeam:Themis protocol闪电贷价格操纵攻击分析 SharkTeam:4月28日攻击者就已实施攻击-PolyNetwork攻击原理和资产转移分析 SharkTeam:AzukiDAO攻击事件分析 SharkTeam:BNO攻击事件原理分析 SharkTeam:Vyper漏洞导致Curve和JPEG'd等项目被攻击原理分析 SharkTeam:UniswapV4 Hook最佳安全实践 SharkTeam:UniswapX 源码分析 SharkTeam:Worldcoin运营数据及业务安全分析 SharkTeam与TOKEN2049正式达成合作伙伴关系 SharkTeam:Exactly Protocol攻击事件原理分析 SharkTeam:Rugpull工厂黑色产业链分析 SharkTeam开启9月双城记 SharkTeam上海区块链全球峰会展台指引 SharkTeam:Web3安全实践与创新 KYT/AML:Web3合规展业的必要条件 SharkTeam:典型钓鱼攻击链上资产转移分析 SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式 SharkTeam:2023年第三季度Web3安全报告 SharkTeam:BH闪电贷攻击原理分析 SharkTeam:Platypus Finance攻击事件原理分析 SharkTeam:Onyx Protocol攻击事件原理分析 SharkTeam:Raft攻击事件原理分析 从链上分析角度看FTX破产清算过程,美国加密货币监管与风险处置能力究竟如何 SharkTeam:KyberSwap攻击事件原理分析 SharkTeam:ERC2771\&Multicall任意地址欺骗漏洞原理分析 SharkTeam:OKX DEX攻击事件分析及链上资产追踪 SharkTeam:从链上数据看稳定币的安全与监管 SharkTeam:2023年加密货币犯罪分析报告 SharkTeam:MIM_SPELL被攻击事件原理分析 SharkTeam:合约精度计算漏洞与安全建议 SharkTeam:Woo Finance被攻击事件分析 SharkTeam:Prisma Finance被攻击事件分析 SharkTeam:2024年第一季度Web3安全报告 SharkTeam:Hedgey Finance被攻击事件分析 SharkTeam:Sonne Finance攻击事件分析 SharkTeam:Web3常见钓鱼方式分析与安全防范建议 SharkTeam:UwU Lend攻击事件分析 SharkTeam:美国众议院FIT21法案解读 SharkTeam:2024年上半年度Web3安全报告

闪电贷技术详解-Part 3

  • SharkTeam
  • 发布于 2022-08-05 17:18
  • 阅读 6950

熊市就像一块试金石,Defi的各核心业态,哪些能够穿越周期,更好的发展?在周期中又暴露了哪些问题,值得后来者借鉴?SharkTeam合约安全系列课程之【DeFi安全】和您一起讨论和深入。第三课【闪电贷技术详解】。

熊市就像一块试金石,Defi的各核心业态,哪些能够穿越周期,更好的发展?在周期中又暴露了哪些问题,值得后来者借鉴?SharkTeam合约安全系列课程之【DeFi安全】和您一起讨论和深入。第三课【闪电贷技术详解】。 文章较长,分为3个部分,这是第3部分: 1.闪电贷原理和应用场景; 2.闪电贷合约实现和风险防范。 3.闪电贷相关项目协议分析。

image.png

1 闪电贷项目分析

这里主要分析3个典型的实现了闪电贷的项目: 1.Uniswap:典型的去中心化交易所(DEX)项目,支持闪电兑换业务 2.Aave:典型的借贷协议,支持闪电贷业务 3.dYdX:针对专业交易者的去中心化交易所,与Uniswap属于不同的类型,闪电贷是其隐藏的功能

1.1 Uniswap

Uniswap是 DeFi 中最受欢迎的去中心化交易所之一。Uniswap 包含 V2 和 V3 两个版本,V2 版带来了一个新的功能,叫做 Flashswap,即闪电兑。Flashswap 本质上是 Uniswap 对闪电贷的称呼。 在 Uniswap 上,当你想在他们的平台上购买 token: 首先,你要发送一些 token 用于支付 然后调用一个 swap()的函数,它将发送你刚刚购买的 token。 重要的是,你可以“忘记”发送给你的支付 token,先收到你购买的 token 再付款。 一旦你收到了这些 token,你就可以以任意使用它们。例如,你可以用它们在 Uniswap 或者其他 DeFi 协议上做一些套利。 而在你套利之后,你必须把支付 token 最后发给 Uniswap。如果你不这样做,整个交易就会失败。

UniswapV2 闪电贷优缺点

优点: token 的选择很多; 可以直接借 eth,而不是 weth; 你可以使用 Uniswap 闪电贷 在 Uniswap 上交易; 可供闪电贷的资产选择非常多,你可以从众多的 Uniswap 交易对中选择一个; 闪电贷还款时,可以还同种代币,也可以还交易对中的另一种代币。 缺点: 每次使用 Uniswap 的 闪电贷都要收取 0.3% 的费用。需要说明的是,这不是使用闪电贷的额外费用。这是你在 Uniswap 上进行每笔交易的常规费用。

UniswapV2 闪电贷原理与合约

UniswapV2 闪电贷原理如下:

image.png

image.png

UniswapV2 闪电贷合约如下:

image.png

image.png

1.2 Aave

Aave是一个借贷协议。你可以在他们的平台上借入和借出 token。在 2020 年初,他们想出了“闪电贷”的点子,最终他们以“闪电贷”闻名,尽管这并不是他们的主要产品。

Aave 闪电贷优缺点

优点: 很多类型的 token 可以选择; 可以直接借用 ETH,而不是 WETH; 代码很容易集成,因为他们有很好的文档,甚至还有一个Truffle box,你可以使用 Truffle 模板快速创建自己的 flash-loan 缺点: Aave 对每笔闪电贷收取 0.09%的费用,闪电贷代币数量越大,手续费越多 闪电贷还款时必须还同种代币。

AaveV1 闪电贷原理与实现

实现原理如下: 1.检查闪电贷的代币数量,必须大于0且不能超过矿池中的总储备量。 2.计算手续费和协议费,并检查手续费以及协议费必须大于0,注意协议费是手续费中的一部分 3.闪电贷乐观转账,将代币从矿池中转入接受合约地址 4.执行接受合约中的自定义业务函数 excuteOperation,并在该函数的最后进行还款(闪电贷+手续费) 5.检查还款(闪电贷+手续费),还款代币要与借款代币相同 6.更新状态并转移手续费和协议费 合约实现如下:

image.png

image.png

image.png IFlashLoanReceiver 代码如下:

image.png FlashLoanReceiverBase 代码如下: image.png

image.png AaveV2 闪电贷原理与实现 Aave V2 版本的闪电贷与V1版本的闪电贷有所不同,V2版本的闪电贷在V1版本基本业务基础上增加了不还款时开立债务的功能,此外还实现了批量资产的闪电贷。V2 版本实现原理如下: 1.参数检查,检查批量借贷传入的参数中资产数组与数量数组长度是否一致 2.循环执行闪电贷乐观转账并计算每一种代币的手续费 3.执行自定义业务函数 excuteOperation,并检查返回值。其中不包含还款业务,但需要代币授权 4.循环遍历每一种闪电贷代币,根据利率模式,闪电贷还款(闪电贷+手续费),还款(转账)失败则交易回退;或者不还款,检查抵押物后开立一个新的债务仓位,若抵押物不足,则回滚。 5.触发 FlashLoan 事件 AaveV2 闪电贷合约如下: image.png

AaveV3 闪电贷原理与实现

Aave V3版本的闪电贷兼容了前两个版本的特性,包含了2个闪电贷接口,即单一资产闪电贷接口 flashLoanSimple 以及批量资产闪电贷接口 flashLoan。

flashLoanSimple

实现原理类似于V1,如下: 1.检查储备池的配置 2.计算手续费 3.闪电贷乐观转账 4.执行自定义业务函数,不包括还款,但包括还款前的授权批准 5.闪电贷还款,还款失败则回退 6.触发 FlashLoan 事件 合约实现如下: image.png

其中,executeFlashLoanSimple 函数如下: image.png

image.png

image.png flashLoan image.png 其中,executeFlashLoan 函数如下: image.png

image.png

1.3 dYdX

dYdX 是一个去中心化衍生品协议,也是一个针对专业交易者的去中心化交易所。它有一些先进的功能,如保证金交易和合成资产,可以跟踪其他资产的表现,如比特币。dYdX 还提供闪电贷款,但这是一个有点隐藏的功能。 首先,我们需要了解 dYdX 是如何工作的。在大多数去中心化交易所的智能合约中,它们的 Solidity 代码中都有不同的切入点或功能,用于你的各种操作。 例如,有一些功能,如存款、提款、购买等。 这就带来了一个问题,交易者必须发送几笔交易才能进行一次交易,这就需要花费更多的手续费。 我们可以用所谓的元交易来解决这个问题。使用元交易,你可以在一个交易中执行多个交易。 dYdX 内置了元交易功能。通过 dYdX,只需要一个入口就可以与智能合约进行交互。所以无论你想做哪种操作,买入、卖出、存入 token,你总是调用同一个 Solidity 函数。在dYdX中,该函数即SoloMargin合约中的operate函数。当你调用这个函数时,你将定义一组你想要执行的行为(Action)。dYdX共支持9种行为,即存款 Deposit、提款 Withdraw、转账 Transfer、交易 Trade、购买 Buy、出售 Sell、清算 Liquidate、汽化 Vaporize、调用 Call。通过operate函数执行一组行为时,在执行前和执行后对状态做检查和校验,对于执行的多个行为的中间结果不会进行检查和校验。因此,通过operate函数,可以先进性提款,后进行存款,保证执行前后的状态可以通过校验。如果再加上调用行为,构成 “提款 - 调用 - 存款 ” 的执行行为,则可以实现闪电贷的业务功能。 因此,在dYdX上进行闪电贷需要3个步骤: 首先,通过提款 Withdraw 行为,你可以提现很多代币,可以超出你余额中的代币。 然后,通过调用 Call 行为,你可以在以太坊公链上进行套利,调用任何你想要的 DeFi 协议。 比如 Uniswap、Kyber 等等。 最后,通过存款 Deposit 行为,偿还你借的地阿比,闪电贷就完成了。 dYdX 闪电贷优缺点 优点: dYdX 闪电贷手续费跟闪电贷的代币数量无关,而且近乎于无(仅2 wei),相比与Aave 0.09% 以及 Uniswap 0.3% 的手续费,这是dYdX最大的优势,尤其是闪电贷的金额越大,该优势越大。 你可以用闪电贷的资金对 dYdX 本身进行套利,也可以对其他协议进行套利。 在一笔交易内可以闪电贷不只一种代币,最多可以在一笔交易内闪电贷dYdX支持的全部类型的代币 缺点: token 的种类不多(ETH/USDC/DAI)。 你不能直接借 ETH,只能借 WETH,操作起来不太方便。 代码可读性较低,集成起来比较复杂,他们也没有足够详细的文档,这点是为了隐藏他们的闪电贷。 闪电贷还款时需要还同种代币,不能还其他类型的代币。

dYdX闪电贷原理与实现

实现原理如下: 1.提款 Withdraw(借贷):从 dYdX 市场中提取指定数量的代币到自定义业务合约中 2.调用 Call(自定义业务):调用自定义业务合约中的函数,将提取的代币用于dYdX或其他协议实现套利 3.存款 Deposit(还贷):将自定义业务合约中的代币存入dYdX市场,即还贷。 合约实现如下: SoloMargin 合约中的 operate 函数如下: image.png OperationImpl 库中的 operate 函数如下: image.png _runActions 函数如下: image.png _withdraw 函数如下: image.png

image.png

_call 函数如下: image.png _deposit 函数如下: image.png

image.png

更多的请参考dydx源代码:https://github.com/dydxprotocol/solo 实现闪电贷需要调用operate函数,重要的是如何在自定义合约中构造operate的参数, 从而在执行operate函数时实现闪电贷业务。相关参数结构如下:

image.png

image.png

其它函数请参考dYdX代码库:https://github.com/dydxprotocol/solo 以下是一个构造 operate 函数参数的示例:

image.png

image.png

image.png

关于我们:SharkTeam的愿景是全面保护Web3世界的安全。团队成员分布在北京、南京、苏州、硅谷,由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Huobi Global、OKC、polygon、Polkadot、imToken、ChainIDE等建立长期合作关系。 Web:https://www.sharkteam.org Telegram:https://t.me/sharkteamorg Twitter:https://twitter.com/sharkteamorg Reddit:https://www.reddit.com/r/sharkteamorg 更多区块链安全咨询与分析,点击下方链接查看 D查查|链上风险核查 https://m.chainaegis.com

点赞 4
收藏 4
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论