PUN:闪电贷,秒速“实现”财务自由的原理分析_以太坊

最近各种通过闪电贷攻击在区块链中套利的新闻将闪电贷送上了热门话题,2021年初,YearnFinance受到闪电贷款攻击,我们查看这个交易,发现一笔交易中,居然有如此多的骚操作,完全刷新了笔者对区块链和智能合约的认识。不禁开始思考,为什么黑客一开始可以从dYdX借款,又将借到的虚拟货币抵押到Compound,最后一系列操作完成后还款到dYdX,这期间发生了161次代币转移,这怎么的也要一杯茶的时间吧。然而事实上,闪电贷攻击快得就是这么不讲道理。这笔交易的链接:https://cn.etherscan.com/tx/0x6dc268706818d1e6503739950abc5ba2211fc6b451e54244da7b1e226b12e027接下来我们开始一步一步的分析,一笔智能合约交易是如何完成在借贷平台和中心化交易所之间的所有操作。智能合约究竟存储在哪里

Linea将在主网上向Voyage活动参与者提供NFT奖励:7月12日消息,Linea官方宣布,为期九周的Voyage活动结束,活动期间Linea测试网共吸引了520万个独立地址,处理了超3000万笔交易。Linea还提到,所有参与Voyage的用户都有资格根据其排名(预计7月18日直播公布)来铸造一个纪念性的“贡献证明”NFT。目前,Linea正在与那些有意接入其主网Alpha阶段的合作伙伴集成,一旦集成完成,Linea将先向排名靠前的顶级参与者投放NFT奖励,接下来会向所有剩余的参与者开启限量版的NFT铸造。

据此前报道,ConsenSys计划本周在以太坊主网上线其Layer2网络Linea,应用开发人员周五将能够将其项目部署至Linea Alpha网络。[2023/7/12 10:49:50]

这里用以太坊的go语言客户端为例,以太坊客户端在收到创建智能合约的交易以后,会使用Hash算法为智能合约生成一个合约地址,在这个合约地址下存储智能合约的代码与合约中的数据。智能合约会被存储在客户端的数据库中与这个地址对应,这个数据库叫做StateDB。StateDB记录了区块链上所有的地址余额、Nonce、状态等信息。以太坊客户端可以通过合约地址,将合约的代码加载到内存中进行执行。最终这些数据会被持久化到LevelDB中,存储在以太坊客户端的磁盘上。通过StateDB实现的这些接口,客户端通过GetCode这个方法,可以获取到智能合约地址下对应的代码。

动态 | 区块链公益组织在行动,72000套物资已在运输途中:1月24日,一群区块链行业从业者成立了“区块链公益组织”,发起向武汉及周边城市捐助医疗物资及食品等区块链公益活动。该组织的捐赠方式是usdt或物资形式;截至1月29日,该公益组织已收到将近百人捐赠的63628.845704usdt及价值16050元人民币的医疗物资

据悉该公益组织目前用捐赠款所采购的72000套医用物资、6500份食品和233套消液已经在运输途中,将陆续抵达武汉、黄冈、孝感、罗田、荆州、钟祥、襄阳等县市的23家医院和团队手里。

目前火币公益和币安慈善基金会均已参加该“区块链公益组织”进行的1:1配捐计划。

该公益组织有超过80位海内外志愿者自愿自发地辛勤工作,并已核实湖北省内有93家医院急需15类、33万套医疗物资,呼吁大家在这个寒冬一起守望相助![2020/1/30]

首个基于ZK-Rollups的NFT协议ZKBox上线:9月24日消息,由 L2 Labs支持的基于 ZK-Rollups 的第 2 层 NFT 协议ZKBox今天推出其白皮书 和官网,致力于提供实时的 NFT 铸币、交易, 存取款服务免费。[2021/9/24 17:03:13]

客户端完成区块同步后,从以太坊创世块开始创建的所有账户地址信息与智能合约地址信息都会同步到这个StateDB中,因此一个合格的以太坊矿工客户端可以直接在本地加载所有的合约代码,是不需要跨网络和客户端进行调用的。智能合约如何执行

智能合约代码是通过以太坊客户端内部的一个叫作EVM的虚拟机进行执行的,以太坊的虚拟机定义了各种的操作指令,每一个指令对应了一个处理函数,以及这个指令需要消耗的矿工费。

五个CryptoPunks NFT指数基金从Balancer迁移到SushiSwap:2月17日消息,NFT指数基金NFTX表示,CryptoPunks NFT指数基金从Balancer迁移到SushiSwap。NFTX是用于制作由NFT支持的ERC20代币的平台。这些代币被称为基金(funds),并且(像所有ERC20一样)是可替代的和可组合的。据悉,CryptoPunk是由Larva Labs团队创建的10,000个唯一生成的角色,根据基础NFT的特定特征将总共??5个CryptoPunks NFT基金的流动性转移到SushiSwap,分别为:PUNK(组合基金)、PUNK-BASIC、PUNK-FEMALE、PUNK-ATTR-4、PUNK-ATTR-5和PUNK-ZOMBIE。[2021/2/17 17:24:02]

以太坊智能合约是按照实际指令执行的消耗来计算gas的,不同复杂度的指令消耗的gas也有差别,越复杂的智能合约指令,消耗的gas越多。查看这笔交易,我们发现矿工费高达3**.**37117716ETH,消耗了8644044gas,占据一个区块容量的74.3%。梦想着可以靠闪电贷空手套白狼的朋友们,还是先算一算矿工费要紧。智能合约中是如何调用另一个智能合约的

在智能合约中,我们调用另一个合约的代码,最终会被编译成一个叫作CALL的EVM虚拟机指令,它的基础gas费用是40gas,实际产生的矿工费根据另一个合约执行的指令来计费。

查看opCall这个方法的实现,发现,调用另一个智能合约与当前智能合约同样都是通过EVM虚拟机的Call方法完成的。

因此,我们可以发现,其实智能合约的执行,以及智能合约之间的调用,都是在矿工的客户端执行的,并没有进行跨客户端与网络调用,交易失败也是在矿工的客户端进行回滚,因此闪电贷攻击才可以如此快的在一笔交易中完成所有的操作。智能合约某一步执行失败会怎么样

StateDB提供了两个方法,分别是Snapshot与RevertToSnapshot,一个用于对StateDB进行快照,另一个用于恢复快照。在执行交易前,StateDB会调用Snapshot方法进行快照,如果交易执行到某一步发现错误,则会调用RevertToSnapshot进行回滚。因此闪电贷攻击可以实现如果在任何一步出现错误,就当从来没有从借贷平台借过一样,所有状态回滚到交易执行之前,当然交易失败时消耗的矿工费还是得出。

总结

闪电贷之所以能够在一笔交易中完成各种虚拟资产的交易,实际上都是通过调用去中心化交易所和各种去中心化借贷平台的智能合约来完成的,这些调用只需要在矿工客户端本地即可完成。这笔交易会在收到交易广播的所有具备打包资格的以太坊客户端中执行,谁先执行完成,并打包到下一个区块中,谁就能赢得这笔矿工费。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-7:424ms