嗨!大家好,我最喜欢讲技术的文章了。
最近几个月都研究FlashLoan的技术,也略有心得,这篇来分享一下。
我主力目前是DEX之间的币对价差,MEV黑森林中的一小部分,看到有人想当伸手牌,我大
概分享几个关键字。DYOR
前端:web3.js、node.js。
后端:RPC架设(请参考我之前的文章)、solidity(我都用remix当IDE)
怎么做自己去google这几个关键字,我个人也是推荐自己慢慢刻,因为写这个要很小心,
诈骗又一堆,没自己重头开始写会遇到很多莫名其妙的BUG。
我比较想要讲的是,MEV有很多种类型,我个人非常讨厌三明治策略,跟抢跑。
先讲抢跑,主要是机器人会监控txpool也就是传说中的黑森林,看到有套利空间的交易时
,会发出一笔更高gasprice的tx来抢先成交,原本发现的人就吃屎了。
三明治策略是机器人发现有会"出现"套利空间的交易时tx1(x->y,需要算xy=k),
会发起抢跑tx0,抢先买走y垫高y的价格,然后tx1就要投入更多x拿到他要的y,然后机器
人再尾随一个y->x的交易tx2,通常会设定跟tx1一样的gas price,投入跟tx0一样的y拿
到比tx0更多x,也就是x2>x0。
流程就是:
tx0(gas price=2)->tx1(gas price=1)->tx2(gas price=1)
这个交易策略非常恶性,我有一阵子专门在狙击这个策略,我就会发起tx1'跟着尾随tx1,
因为是用自己的RPC,所以有机率可以刚好插在中间,也就是:
tx0(gas price=2)->tx1(gas price=1)->tx1'(gas price=1)->tx2(gas price=1)
这样三明治机器人就亏钱啦,嘻嘻。
以上这个经历,我把我前端的技术磨练的还不错,对炼上生态也贡献了份心力。尾随交易
其实是良性策略,没有我们这些机器人,各DEX的价格会平衡得很慢。
后面为了放大我的交易量跟上一篇的作者借镜FlashLoan的合约写法,也google一些文章,
这技术真的好用,原理其实就是DEX大部分的swap都是flashloan,x->y的交易,pool会先
给你y,然后你可以插入一些策略,例如去其他dex y->others,最后还回x就可以了,所有
的交易要在一个tx内完成,不然你rug pull了怎么办。
好了,之前发文有人说怎么没有作业,我这不就出作业了,我花了点时间写个合约给大家
用,flashloan的,现成的大家都可以用,很棒吧,不过我有留一个有趣的彩蛋在里面,希
望大家可以发现,发现的人没有奖品,谢谢。
彩蛋可以透过我的测试交易发现。
如果你可以完成作业,恭喜你,前端操作合约技能+1,尤其最近AC不玩了,这技能值得你
花心力点一下。
作业完成目标:参照我的测试tx,跟我部属的合约互动,发起一笔你自己的flashloan。
TIP:因为是flashloan,你不用做任何合约授权,你只需要付gas fee,这样大家放心了吧
,你可以另外生成一个帐号放点gas fee跟合约做安全的神魂交流。
TIP2:如果你发起的flashloan无法还款,那交易会失败并出现以下错误讯息
Not enough amount to return loan会记录在tx里时刻的羞辱你喔。
部属链:polygon
测试tx:0x8be86f4af8e44d57ebdca4eccff335925abeb1990f9727d9907273bc078af0a3
合约地址 0xcFb2168Bad58D505aC0D857017CD0cbF7408E81C
call ABI:[
{
"inputs": [
{
"internalType": "address",
"name": "flashLoanPool",
"type": "address"
},
{
"internalType": "uint256",
"name": "loanAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "loanToken",
"type": "address"
},
{
"internalType": "address",
"name": "metaToken",
"type": "address"
},
{
"internalType": "address",
"name": "router1",
"type": "address"
},
{
"internalType": "address",
"name": "router2",
"type": "address"
}
],
"name": "MACDFlashLoan",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]