UniswapV2Router02.sol有两个有趣的函数,我想把swapExactETHForTokens和swapExactTokensForETH结合起来。基本思想是套利,从ETH到令牌,再回到ETH。据我所知,swapExactETHForTokens存款和执行互换,swapExactTokensForETH执行互换和退出。是否可以通过在swapExactETHForTokens的末尾添加退出代码来实现我的想法?
function swapExactETHForTokensForETH(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
virtual
override
payable
ensure(deadline)
returns (uint[] memory amounts)
{
require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
IWETH(WETH).deposit{value: amounts[0]}();
assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
_swap(amounts, path, to);
// Adding code from swapExactETHForTokens here
IWETH(WETH).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
}发布于 2021-02-17 05:18:28
从技术上讲,你提出的建议是可能的。也许我会保留这两个函数swapExactETHForTokens & swapExactTokensForETH,并创建一个新函数在单个事务中调用它们,以便根据需要调整函数参数。
然而,如果你的目标是进行套利以获得一些利润,你应该利用不同交易所之间的价格差异。如果你在同一个交易所内进行套利,除非掉期之间的时间足够长,足以影响价格(幸运地增加,否则你会失去价值),否则你就不会有任何利润,但这更像是一种长期投资,而不是套利,显然,你想在同一笔交易中进行这两种掉期交易。
目前,套利通常采用闪存贷款模式:基本思想是侦听不同分散交易所之间的价格差异,然后在一次交易中执行所有这些步骤:
这样,您就不需要预先使用以太或令牌来执行所有这些操作。如果你想获得任何利润,A&B之间的价格差异必须高于你支付的贷款和掉期的费用。
https://ethereum.stackexchange.com/questions/93572
复制相似问题