区块链技术博客
www.b2bchain.cn

区块链技术技术分析闪电贷中智能合约执行原理

第17401篇区块链技术文章区块链技术技术分析闪电贷中智能合约执行原理

flash loan之所以能在一次交易中完成各种资产交易,实际上是通过使用分散交易和贷款合同。

原文标题:《闪电贷,秒速「实现」财务自由的原理分析》
撰文:知道创宇区块链安全实验室

原题:“闪电贷款,瞬间实现”金融自由的原理分析”
作者:了解到在闪电贷款的攻击下,创投区块链安全实验室,我们看了这个交易,发现一个交易中有那么多操作,这完全刷新了作者对区块链和智能合约的理解。我不禁想,为什么黑客一开始就可以向dydx借钱,把借来的虚拟货币抵押成复利,最后一系列操作结束后再偿还给dydx。在此期间,发生了161次代币转让。这需要一杯茶。然而,事实上,闪电贷款攻击是如此不合理。

技术分析闪电贷中智能合约执行原理

此事务的链接:
https://cn.etherscan.com/tx/0x6dc268706818d1e6503739950abc5ba2211fc6b451e54244da7b1e226b12e027

下一步,我们开始逐步分析智能合约交易是如何完成借贷平台和分散化交易所之间的所有操作的。以以太坊的go语言客户端为例。以太坊客户端收到创建智能合约的交易后,使用哈希算法生成智能合约的合约地址,并将智能合约的代码和合约中的数据存储在该合约地址下。智能合约将存储在与此地址对应的客户机数据库中,称为statedb。Statedb记录区块链上的所有地址(包括智能合约)余额、nonce、状态等信息。以太坊客户端可以通过合约地址将合约代码加载到内存中执行。最后,数据将被持久化到leveldb并存储在以太坊客户端的磁盘上。通过statedb实现的这些接口(如下图所示),客户端可以通过getcode方法获取智能合约地址下对应的代码。

智能合约究竟存储在哪里

技术分析闪电贷中智能合约执行原理

客户端完成数据块同步后,从以太坊Genesis数据块创建的所有帐户地址信息和智能合约地址信息都将同步到statedb。因此,一个合格的以太坊矿工客户机可以直接在本地加载所有合同代码,并且不需要通过网络和客户机进行调用。

智能合约代码通过以太坊客户端中名为EVM的虚拟机执行。以太坊的虚拟机定义了各种操作指令,每条指令对应一个处理函数,以及该指令的成本。

智能合约如何执行

技术分析闪电贷中智能合约执行原理

以太坊智能合约根据实际指令的消耗量计算气体(燃料)。具有不同复杂性的指令所消耗的气体也不同。智能合约指令越复杂,耗油量就越大。查看此交易,我们发现采矿费高达3.37117716 eth,消耗天然气8644044,占区块产能的74.3%。梦中可以依靠闪电借来空手套的白狼朋友,还是先算算矿工费很重要。

在智能合约中,我们调用另一个合约的代码,它将被编译成一个名为call的EVM虚拟机指令。其基本天然气成本为40天然气,实际采矿费根据另一份合同的指示收取。

智能合约中是如何调用另一个智能合约的

技术分析闪电贷中智能合约执行原理

检查opcall的实现,发现调用另一个智能合约和当前智能合约也是通过EVM虚拟机的call方法完成的。因此,我们可以发现,实际上,智能合约的执行和智能合约之间的调用都是在矿工的客户机上执行的,没有跨客户机和网络调用。事务失败也会在矿工的客户机上回滚。因此,闪电贷款攻击可以很快完成事务中的所有操作。

statedb提供两种方法:snapshot和reverttosnapshot。一个用于获取statedb的快照,另一个用于还原快照。在执行事务之前,statedb将调用snapshot方法来获取快照。如果在事务执行期间发现错误,它将调用reverttosnapshot进行回滚。因此,闪电贷款攻击是可以实现的。如果任何一步都出现了错误,就如同从未向贷款平台借款一样。在执行事务之前,所有状态都会回滚到。当然,当交易失败时消耗的采矿费仍然是可以获得的。

技术分析闪电贷中智能合约执行原理

flash loan之所以能在一次交易中完成各种虚拟资产交易,实际上是通过调用分散化交易所和各种分散化借贷平台的智能合约。这些调用只需要在挖掘客户端本地完成。事务将在接收事务广播的所有合格以太坊客户端中执行。谁先完成执行并将其打包到下一个区块,谁将赢得采矿费。你知道吗

智能合约某一步执行失败会怎么样

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

技术分析闪电贷中智能合约执行原理

总结

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

区块链技术技术分析闪电贷中智能合约执行原理 由www.b2bchain.cn 提供
文章整理自网络,只为个人学习与分享使用
链接地址https://www.b2bchain.cn/17401.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 区块链技术技术分析闪电贷中智能合约执行原理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们