如果我跟你说,有人不需要你任何抵押物,也不需要做任何信用检查就可以借给你几百万美金,你会怎么想?

如果我又说,这笔钱只能借给你一秒钟,你又会怎么想?

在区块链上的去中心化金融领域,我刚才说的这些并不是逗你玩,而是真实存在的服务。并且已经有人利用这类服务,用少到几乎可以忽略不计的成本赚取了巨额利润。

这种服务就是闪电贷Flash Loan。

闪电贷的原理

要理解闪电贷的原理,我们先要了解以太坊交易的原子性。

所谓原子性就是,以太坊的一笔交易是不可分割的最小单位,要么成功,要么失败,不可能成功一半失败一半。

举个例子,张三向李四转一个以太币。如果交易成功,那么张三账户上少一个以太币,李四账户上多一个以太币。如果失败,那张三账户不变,李四账户也不变。

不可能出现交易成功一半失败一半,也就是张三少一个以太币但李四账户不变,或者李四多一个以太币但张三账户不变。

我们知道,以太坊的交易除了以太币转账外,还可以调用智能合约。

调用智能合约也具有原子性。如果一个智能合约改变了多个数值,那这个调用如果成功,这些数值都会被改变,如果失败则这些数值都不会被改变。不会出现一次调用改变了部分数值而另一部分数值保持不变。

更重要的是,如果一笔交易调用了多个智能合约,那所有这些调用也具有原子性,要么这些调用都成功,要么都失败。不会出现部分成功,部分失败。

闪电贷就是利用了以太坊交易的原子性。

闪电贷规定,你可以从我这里借出任意多的代币,只要我有。随便你用它干什么,但是必须要保证在同一个交易里归还本金和利息。

由于这笔交易有原子性,要么成功、要么失败。如果成功你还本付息,放贷机构赚利息。如果失败,就等于这笔操作从来没有发生过,也就是你从来没有借过钱。

闪电贷原子性

由于这里我们用技术保证了,放贷机构稳赚不赔,所以就根本不需要抵押物和什么信用检查。

而且由于你只是瞬间占用了这些资金,所以利息是很低的。比如aave每笔闪电贷只收万分之九的手续费。

由于所有的借和还是在一个交易里瞬间完成,所以这种贷款方式就有了这个名字,闪电贷。

套利

刚才我们讲了闪电贷对于放贷机构的好处。那就是稳赚不赔。

那这种只能借一瞬间的贷款对于借款者有什么用呢?

显然,你用这些钱去买一套房子,或者进行其它区块链下的投资是不可能的。但是我们可以在一借一还之间,通过调用其它智能合约来赚钱。

一种比较简单的赚钱方法是套利交易(Arbitrage)。

假设有一种代币T,它在去中心化交易所DEX A的价格是50USDT,而在去中心化交易所DEX B的价格是55USDT。

那我们就可以构建这样一笔交易。

  1. 从闪电贷合约F中借出100,000USDT
  2. 在去中心化交易所DEX A以50USDT的价格买入2000个代币T
  3. 在去中心化交易所DEX B以55USDT的价格卖出2000个代币T,得到110,000 USDT,赚取差价
  4. 还给闪电贷合约F,100,000USDT本金,加利息,假设是100USDT。那剩下的9900USDT就是我们的利润。

通过以上这波操作,我们只需要付出十几美元最多几十美元的以太坊gas费就能空手套白狼,赚取近一万美元的利润。大家觉得是不是很妙呢?

闪电贷攻击

当然,上面那个例子都是假设一切都是理想情况。有经验的币圈老韭菜都知道,实际上这种套利机会是很少的。

正当的方法赚不到钱,有人就动歪脑筋,通过不正当的方法赚钱。

有一些黑客就利用某些智能合约的漏洞。他们通过闪电贷获取资金,然后利用这笔巨资攻击有漏洞的智能合约窃取利益。这就是臭名昭著的闪电贷攻击。

在2020年情人节晚上,黑客利用闪电贷和bZx协议的漏洞,用不到100美元的成本获利超过350,000美元。

攻击的过程是这样的。280

  1. 黑客从dYdX协议,0成本借出 10,000 ETH ,当时价值2,800,000美元
  2. 他把其中的5500ETH抵押到Compound协议借出112WBTC
  3. 他又把其中的1300ETH转入bZx,并用5倍杠杆卖出ETH买入WBTC。bZx为了完成这笔交易,他通过另一个协议kyber network在去中心化交易所uniswap里大量抛出ETH购买WBTC。由于uniswap相应池子深度不够,导致在uniswap上WBTC/ETH 的价格由正常的38.5被推高到109.8。
  4. 然后黑客利用这个被推高的价格,抛出第二步中借出的WBTC,以高于市场平均价两倍的平均价格:61.4获得6871ETH
  5. 利用这6871ETH加上手里没用的3200ETH,还掉从dYdX借出的1000ETH。

这样仅仅一个交易,黑客手里凭空多出了71ETH。

一个交易凭空多出了71ETH

这还没完,大家还记得黑客在compound这条线的操作吗?黑客之前质押5500ETH最后砸出了6871ETH,用来归还闪电贷。

但是,归还闪电贷之后,这5500ETH的仓位还在黑客手里。

由于其它市场上WBTC/ETH 只有38.5,黑客立马在其它交易市场用4300ETH换取了112WBTC,从compound里换出了5500ETH的押金,又赚了1200ETH,总共1271ETH。

按当时价格计算,黑客空手获利$355,880。而他付出的成本只是一些以太坊的gas费,估计不会超过100美元。这简直都不是空手套白狼,而是空手套大象了。

总获利1271ETH

老实说,看这起攻击的报告时,我真是忍不住拍案叫绝。虽然君子爱财取之有道。黑客偷钱肯定是不对的,但是他的手法的确是高,实在是高。

这次攻击,简单来说就是bZx协议里有个bug没有检测出风险,于是用五倍资金在uniswap上把钱对敲给了黑客。

由于发起这类攻击需要百万美金级别的资金。如果没有闪电贷,黑客不容易筹集到如此多资金来攻击,即使有那么多钱,黑客可能也不愿冒风险,万一一个手滑攻击不成,还赔了夫人又折兵。

有了闪电贷,黑客可以凭空借出大量资金,而且如果攻击失败,他可以放弃这笔交易回滚所有操作,就当什么事情也没发生过,除了一些以太坊gas费,也不会损失什么。黑客和闪电贷dYdX协议没有任何风险稳赚不赔,compound协议上也是一次正常的借贷和还款。

倒霉的就是bZx了,谁叫你有bug呢。

总结

从这我们也可以看出,闪电贷攻击一般并不是攻击闪电贷,而是利用闪电贷提供的资金攻击其它有漏洞的去中心化金融协议。

有些人一听闪电贷攻击,就以为闪电贷是什么洪水猛兽,把闪电贷批评一通。我说这纯粹是瞎比比。

我认为闪电贷用技术手段提供了无风险借贷,提高了资金利用率,这绝对是一种创新。

黑客用它来干坏事,坏的是黑客而不是闪电贷。就好像坏人借了银行钱去干坏事,你总不能骂银行吧。

听了我讲那么多,你是不是有点心潮澎湃,也想用闪电贷套个白狼啥的?

不过利用闪电贷需要编写智能合约代码,有一定的技术门槛。要想赚钱,先学写代码吧。