热门标签

lô đề hôm nay:联博接口(www.326681.com)_Move 若何阻止闪电贷重入攻击?

时间:3个月前   阅读:16

新2appwww.hg9988.vip)实时更新发布最新最快最有效的新2足球网址,新2app下载,包括新2手机网址,新2备用网址,皇冠最新网址,新2足球网址,新2网址大全。

撰文: 宋嘉吉、任鹤义

泉源:吉时通讯

摘要:上一篇讲述从底层语言特点,对比了 Move 和 Solidity(以太坊)的优势和特点。作为 Web3 的基础性研究,本篇从闪电贷这一最具特色的应用角度出发,剖析了以太坊和 Move 划分若何实现闪电贷,Move 怎样规避了闪电贷攻击?

以太坊合约之间的交互是通过互通新闻实现的状态一致,且允许重入、动态挪用,这一特点为实现闪电贷提供了基础。时代,合约之间的函数可以相互往返挪用——挪用历程中会发生控制权转移。若是 DeFi 项目平台合约有破绽,套利者能够行使其合约的恶意代码挪用响应函数举行资产偷取——行使合约之间的状态同步信息差,在一个流程未竣事时双花资产(以太坊资产只是赋值),或者重复执行函数(本该不被允许的逻辑)举行偷取。

重入攻击的条件是攻击者部署的合约存在恶意代码,但最焦点的因素是:

Move 提出了闪电贷的新一种运行流程——烫手山芋模式,基本上弃用可重入。「烫手山芋(hot-potato)」模式是一种没有 key、store、copy 和 drop 能力的结构,是 Move 程序在生意执行时代仅使用一次的结构。由于没有 drop、key 或 store 能力,因此烫手山芋只能通过挪用「销毁」函数来完结流程——这就如其名所示意的一样,这是一块烫手山芋,在流程中任那边置都是「烫手」的,只能交给销毁函数来完结。详细流程如下:

  1. 套利者向闪电贷合约贷款时,闪电贷合约发送贷款资金和一个烫手山芋收条(receipt);

  2. 套利者行使贷款资金举行套利操作;

  3. 套利者还款时,挪用还款函数(repay),将资金和收条(receipt)发给还款函数,收条被还款函数吸收后销毁。

闪电贷完成的条件的最后准确还款、流程竣事,在流程竣事之前恶意合约可以在以太坊系统实现重复挪用、修改响应的资产账户赋值实现偷取。Move 系统闪电贷流程竣事的条件除了准确送还资金之外,还需要将烫手山芋这个资源举行一次性接纳销毁处置,这确保了闪电贷的原子性。

风险提醒:区块链商业模式落地不及预期;羁系政策的不确定性。

1. 焦点看法

闪电贷作为以太坊 DeFi 生态最具特色的应用,其基础是以太坊使用的 Solidity 语言允许动态挪用和重入。虽然这种动态挪用是智能合约开放性、可组合性的主要体现,但其带来的控制权转移和对合约函数的重复挪用带来了不小的平安隐患,行业内行使闪电贷攻击有破绽的 DeFi 资金池事宜时有发生。由于 Move 语言不允许动态挪用和重入,它使用一种「烫手山芋」模式很简朴地实现了闪电贷,因此完全可以阻止以太坊那样的平安问题。

两种系统在生态应用的事情模式有着显著的区别,这种差其余基本在于 Move 底层语言的特点,我们在前一篇讲述《Web3 底层语言:Move 填补了 Solidity 哪些不足?》已有详述。本篇讲述从闪电贷应用角度来对照一下两者实现应用的差异玩法。

2.以太坊闪电贷的基础:动态挪用与可重入

闪电贷(Flash Loan)是一种原生的 DeFi 新产物,可以明白为极速贷款。用户只需要在统一笔生意(区块)中完成借贷、套利、送还并支付一笔手续费,由于是原子生意,那么乞贷人无需抵押任何资产即可实现借贷,提供了一种无本金套利方案。

我们在上一篇讲述《Web3 底层语言:Move 填补了 Solidity 哪些不足?》中提到的:

「对于模块化和合约组合性方面,Solidity(如以太坊)上面的 Contract 合约通过 library(相当于静态库)举行新闻的转达,从而实现 Contract 合约之间的挪用、交互。而 Move 语言使用了模块 (module) 和剧本 (script) 的设计,前者类似于 Contract 合约,Move 语言的合约组合性则是模块之间的组合,通过转达资源(即前文提到的 resources)。关于组合性方面,Solidity 和 Move 的区别异常显著。」

以太坊合约之间的交互是通过互通新闻实现的状态一致,且允许重入、动态挪用,就是说合约之间的函数可以相互往返挪用——挪用历程中会发生控制权转移。这一特点为实现闪电贷提供了基础。

详细来说,在一个以太坊生意中,可以举行转账操作以及其他一些列合约操作,通过挪用智能合约中的功效函数,执行多项庞大功效——也就是说,一笔基于以太坊的生意可以融合一系列庞大生意:将乞贷、套利、送还等一系列生意操作融合到一起成为可能。Flash Loan 中所有操作都在一个区块时间中完成,根据现在的以太坊的出块速率,Merge 后也就是 12 秒——焦点并非是 12 秒,而是这一系列的生意要能够最终盈利并送还,若是没有做到这一点,这笔生意就不会被打包写入区块,相当于乞贷人乞贷、套利(失败)这些操作并不是有用生意,只是暂且状态——即原子生意。因此,用户必须通过编程将需要执行的所有步骤形成一项智能合约生意并完成借贷、使用和送还的三个步骤。

上述庞大的生意操作由几个合约之间的动态挪用实现,且这种挪用是可重入的(也就是可以频频挪用)。

现在用户也可以通过如 FURUCOMBO 这一类第三方项目,对闪电贷完成更浅易的插件性编程,无需现实编写代码完成智能合约的设计,最终实现闪电贷需要的全套操作。详细的套利流程如下图所示(行使 FURUCOMBO 平台,详细兑价均为示例),现在 Kyberswap 平台上的价钱情形 1 sUSD =0.9927 DAI,而 Uniswap 上 1 DAI=1.2411 sUSD,用户发现这两个平台的 DAI-sUSD 生意对价钱存在较大的套利空间,即可通过 FURUCOMBO 的界面,设计套利历程。包罗:1、从 AAVE 借贷平台的闪电贷功效借出 100 DAI;2、通过 Uniswap 将 100 DAI 兑换成约 122 个 sUSD 代币;3、通过 Kyberswap 平台将 sUSD 代币兑换成约 122 DAI 代币;4、送还从 AAVE 借出的 100 DAI 代币以及手续费 0.09 DAI;5、整个行使闪电贷的套利流程在一个以太坊生意内完成,并赚钱约 22 DAI。

若是在这一笔以太坊生意内借贷的资金没有获得送还,那么整笔借贷生意不会被打包进入区块中,相当于借贷并没有现实发生,以是借贷方的资金不会受任何影响——中央的借贷和套利历程只是暂且状态,并未被矿工打包确认。基于闪电贷的特征和时效要求,现在其最普遍的应用是套利生意。套利者无需自身使用资产举行套利操作,只需要通过闪电贷获得所需的资金量完成套利生意,并实时送还借贷的资金。这极大的降低了套利者的准入门槛,由于理论上任何一小我私人都可以成为套利者,而且拥有没有上限的套利资金举行操作。

从上述流程可以看到,以太坊合约控制权在 FURUCOMBO 闪电合约 - 套利者账户合约 -Uniswap 合约 -Kyperswap 合约 - 闪电贷合约之间切换,且可以举行动态挪用响应的函数,若是 DeFi 项目平台合约有破绽,套利者能够行使其合约的恶意代码挪用响应函数举行资产偷取——行使合约之间的状态同步信息差,在一个流程未竣事时双花资产(以太坊资产只是赋值),或者重复执行函数(本该不被允许的逻辑)举行偷取。

对于 Move 生态,由于资产并非简朴的赋值,且阻止动态挪用和可重入,从基本上杜绝了风险,其详细实现我们在后面会论述。

3. Move 与 Solidity 闪电贷的详细实现有怎样的区别?

3.1.以太坊闪电贷双刃剑:动态挪用和可重入性

从实现方式上来看,以太坊 EVM(基于 Solidity)具有动态调剂,可以通过可重入实现闪电贷。如我们在上一篇讲述《Web3 底层语言:Move 填补了 Solidity 哪些不足?》中提到的:

「以太坊(Solidity)的资产是由响应的合约控制,若是把 Token A 合约比喻为保险箱,保险箱会给所有用户分配一个数值余额,来表达用户所有拥有的 Token A 资产数目,但资产自己照样放在 Token A 合约的保险箱内。而 Move 用户账户自己就是一个单独的大保险箱,由用户自己控制,所有的 Token 资产都放在这个保险箱内。且这些 Token 并不是以数字的形式存在,而是不能复制的、权限受用户控制的资源(类型)。」

,

以太坊数据网

,

tài xỉu bóng đá(www.vng.app):tài xỉu bóng đá(www.vng.app) cổng Chơi tài xỉu uy tín nhất việt nam。tài xỉu bóng đá(www.vng.app)game tài Xỉu đánh bạc online công bằng nhất,tài xỉu bóng đá(www.vng.app)cổng game không thể dự đoán can thiệp,mở thưởng bằng blockchain ,đảm bảo kết quả công bằng.

,

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

因此以太坊 EVM 实现闪电贷套利的流程是:

  1. 用户将挪用控制权交给闪电贷合约;

  2. 闪电贷合约挪用来自外部的套利合约程序中的执行函数,将请求的乞贷金额发送给套利合约,套利合约举行套利操作;

  3. 套利合约完成套利,将乞贷送还给闪电贷合约,执行函数完成事情,控制权还给闪电贷合约;

  4. 闪电贷合约检查还款金额是否准确,准确则套利生意乐成,否则失败。

在上面这个历程中,响应的函数是动态挪用的,闪电贷合约需要检查送还金额是否准确才会竣事,因此控制权的转移历程是随时可以发生的,也就是可重入的——同时需要注重的事,以太坊账户资产是以数值余额的形式存在,重入会带来双花的可能,这也是存在破绽的地方。挪用外部合约的主要危险之一是它们可以接受控制,而这些来自外部的合约程序一旦有破绽,攻击者可以通过频频挪用实现攻击,即可重入攻击。

可重入攻击作育了以太坊历史上最严重攻击之一,直接导致了以太坊分叉,即 2016 年 6 月 17 日的 The DAO 溃逃事宜。黑客部署了一个合约,作为「投资者」在 The DAO 中储存一些 ETH。然后黑客通过挪用 The DAO 合约中的 withdraw 函数,使得 The DAO 合约给黑客提款,由于黑客合约(fallback 函数)存在恶意破绽——其没有竣事的逻辑,于是 The DAO 始终未能完成提款(此时 The DAO 并不知道黑客收到了提款并将其账户余额变为 0)并拿回控制权,黑客通过不停挪用 withdraw 函数发送跨越其初始存款 ETH 数目。

在闪电贷攻击事宜中,攻击者往往通过恶意合约实现可重入攻击。如 2022 年 3 月 16 日,黑客通过闪电贷乞贷,行使借贷项目 Hundred Finance 的破绽实时重入攻击,最终赚钱约 2363 ETH。详细流程并不庞大,由于 Hundred Finance 是先转账后记账,黑客通过闪电贷乞贷,行使攻击合约存入 Hundred Finance 乞贷池实现抵押贷款,而攻击合约部署的 onTokenTransfer 函数在记账之前实现重复挪用乞贷函数(重入攻击),以一笔抵押资产不停从差异乞贷池提取乞贷,由于是先转账后记账,当记账时(流程竣事)黑客已经实现了攻击并赚钱。攻击的焦点是:流程未竣事之前,攻击者合约可以频频挪用相关函数实现资产偷取。

就好比说,攻击者合约将资产抵押给 A 银行(项目 A 乞贷池 ) 举行贷款,银行 A 在未完成记账结算之前就最先放款,而银行 A 完成记账结算流程意味着闪电贷生意要乐成(原子性),这时刻资产被 A 入库记账。但由于银行 A 和其他银行之间的信息差异步(合约函数之间的状态差异步),攻击者在 A 银行还未完成资产入库记账时(即被攻击合约贷款流程未竣事时,这时刻闪电贷事情流程还未竣事,合约函数挪用还可以举行),再次以该资产在 B、C 等其他银行举行抵押贷款(重入),待流程竣事,攻击者已经完成闪电贷攻击并赚钱。

重入攻击的条件攻击者部署的合约存在恶意代码,但最焦点的因素是:

  • 以太坊合约挪用时控制权存在转移,这为恶意合约提供了自动权;

  • 且流程在竣事之前可以重入(重复挪用),恶意合约可以行使破绽频频挪用函数实现资产偷取(如一笔取款流程未竣事时频频提取许多次);

  • 加上以太坊账户资产是以数值余额的形式存在,因此存在频频偷取资产(双花)的可能,或者在流程竣事之前恶意合约就可以修改相关账户资产余额数值实现偷取。

「可重入」是实现闪电贷的基础,然而一旦目的合约有破绽,攻击者便可以实行重入攻击。这在我们前一篇讲述中有详述。

3.2.MOVE 的「烫手山芋」:没有重入的闪电贷

Move 语言阻止动态挪用和可重入,这从基本上杜绝了重入攻击。但 Move 系统的资产作为资源类型,一旦借出就相当于发生了真实转移,该若何确保闪电贷顺遂还款呢?

Move 提出了闪电贷的新一种运行流程——烫手山芋模式,基本上弃用可重入。「烫手山芋(hot-potato)」模式是一种没有 key、store、copy 和 drop 能力的结构,是 Move 程序在生意执行时代仅使用一次的结构。由于没有 drop、key 或 store 能力,因此烫手山芋只能通过挪用「销毁」函数来完结流程——这就如其名所示意的一样,这是一块烫手山芋,在流程中任那边置都是「烫手」的,只能交给销毁函数来完结。详细流程如下:

  1. 闪电贷智能合约在事情时会确立了「烫手山芋」(hot-potato)的收条(receipt);

  2. 套利者向闪电贷合约贷款时,闪电贷合约发送贷款资金和一个烫手山芋收条(receipt);

  3. 套利者行使贷款资金举行套利操作;

  4. 套利者还款时,挪用还款函数(repay),将资金和收条(receipt)发给还款函数,收条被还款函数吸收后销毁。

我们在前一篇讲述中已经剖析过,账户资产和收条(receipt)都是一种资源类型,「不能复制、抛弃或重用,可以被平安地存储和转移」,因此收条(receipt)必须被处置(且只能使用一次),而非像以太坊那样的对账户举行数值赋予处置就行。因此烫手山芋模式可以确保被借出的资产(资源类型,一旦借出就真实发生转移了)必须被送还。收条(receipt)作为烫手山芋,就好比是准时一个引爆器(这里的准时,是闪电贷套利作为一个原子生意的「时间」,并非详细的时长),资金和引爆器一起绑定被借出,而任何一方都无法收容引爆器,它必须被还回原处得以拆除——否则生意都无法完成,因此闪电贷资金可以确保会被送还。

闪电贷完成的条件的最后准确还款、流程竣事,在流程竣事之前恶意合约可以在以太坊系统实现重复挪用、修改响应的资产账户赋值实现偷取。Move 系统闪电贷流程竣事的条件除了准确送还资金之外,还需要将烫手山芋这个资源举行一次性接纳销毁处置,这确保了闪电贷的原子性。

从应用角度看,Web3 的底层代表要在保证开放性、可重构的基础上提高代码平安性。在 Web3 中,代码不仅包罗信息,还直接涉及资产挪用,保证用户资产平安是重中之重,否则 Web3 将是漆黑森林。以太坊的生态让人人看到了智能合约的活力,下一个时代将在此基础上向平安性、合规性继续演进,这也是我们当下关注 Web3 底层语言进化的焦点逻辑,或者这孕育着下一轮的创新浪潮。

查看更多,

lô đề hôm nay(www.84vng.com):lô đề hôm nay(www.84vng.com) cổng Chơi tài xỉu uy tín nhất việt nam。lô đề hôm nay(www.84vng.com)game tài Xỉu lô đề hôm nay online công bằng nhất,lô đề hôm nay(www.84vng.com)cổng game không thể dự đoán can thiệp,mở thưởng bằng blockchain ,đảm bảo kết quả công bằng.

上一篇:chơi Đánh bạc bóng đá:Thúy Hà 'Về nhà đi con': Tôi day dứt vì không giữ được gia đình trọn vẹn

下一篇:Telegram中文群组索引:睇靓女赏珠宝

网友评论