文章目录

  • 基于DYDX闪电贷在Cofix和Uniswap之间套利
    • 相关项目
      • Cofix
      • Uniswap
      • NEST
    • 流程
    • 套利合约
      • 核心方法
        • 1.WETH兑换成ETH
        • 2.ETH 在Cofix中兑换成USDT
        • 3.USDT 在Uniswap中兑换成ETH
        • 4.ETH兑换成WETH
    • 注意事项

基于DYDX闪电贷在Cofix和Uniswap之间套利

由于在以太坊中的交易属性,在一笔交易中可以借出大量资金进行操作(不能超过gaslimit限制)。所以当各个交易平台有利差的时候可以进行套利(无风险套利),避免了准备大量资金。

相关项目

Cofix

github:https://github.com/Computable-Finance

coifx中调用了NEST预言机的价格,完成做市、交易的操作并且去中心化。

Uniswap

github:https://github.com/Uniswap/uniswap-v2-core

Uniswap根据交易拟合算法来完成交易,目前锁仓量最大的去中心化交易平台。

NEST

github:https://github.com/NEST-Protocol

使用双向报价机制,可以在以太坊上生成去中心化的价格。

这几个项目之后会单独细说,本篇只讲述如何组合各个合约进行套利

流程

#mermaid-svg-fJLG5aNw8WIag5Pp .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .label text{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .node rect,#mermaid-svg-fJLG5aNw8WIag5Pp .node circle,#mermaid-svg-fJLG5aNw8WIag5Pp .node ellipse,#mermaid-svg-fJLG5aNw8WIag5Pp .node polygon,#mermaid-svg-fJLG5aNw8WIag5Pp .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-fJLG5aNw8WIag5Pp .node .label{text-align:center;fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .node.clickable{cursor:pointer}#mermaid-svg-fJLG5aNw8WIag5Pp .arrowheadPath{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-fJLG5aNw8WIag5Pp .flowchart-link{stroke:#333;fill:none}#mermaid-svg-fJLG5aNw8WIag5Pp .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-fJLG5aNw8WIag5Pp .edgeLabel rect{opacity:0.9}#mermaid-svg-fJLG5aNw8WIag5Pp .edgeLabel span{color:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-fJLG5aNw8WIag5Pp .cluster text{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-fJLG5aNw8WIag5Pp .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-fJLG5aNw8WIag5Pp text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-fJLG5aNw8WIag5Pp .actor-line{stroke:grey}#mermaid-svg-fJLG5aNw8WIag5Pp .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-fJLG5aNw8WIag5Pp #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .sequenceNumber{fill:#fff}#mermaid-svg-fJLG5aNw8WIag5Pp #sequencenumber{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp #crosshead path{fill:#333;stroke:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .messageText{fill:#333;stroke:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-fJLG5aNw8WIag5Pp .labelText,#mermaid-svg-fJLG5aNw8WIag5Pp .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-fJLG5aNw8WIag5Pp .loopText,#mermaid-svg-fJLG5aNw8WIag5Pp .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-fJLG5aNw8WIag5Pp .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-fJLG5aNw8WIag5Pp .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-fJLG5aNw8WIag5Pp .noteText,#mermaid-svg-fJLG5aNw8WIag5Pp .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-fJLG5aNw8WIag5Pp .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-fJLG5aNw8WIag5Pp .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-fJLG5aNw8WIag5Pp .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-fJLG5aNw8WIag5Pp .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .section{stroke:none;opacity:0.2}#mermaid-svg-fJLG5aNw8WIag5Pp .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-fJLG5aNw8WIag5Pp .section2{fill:#fff400}#mermaid-svg-fJLG5aNw8WIag5Pp .section1,#mermaid-svg-fJLG5aNw8WIag5Pp .section3{fill:#fff;opacity:0.2}#mermaid-svg-fJLG5aNw8WIag5Pp .sectionTitle0{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .sectionTitle1{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .sectionTitle2{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .sectionTitle3{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-fJLG5aNw8WIag5Pp .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .grid path{stroke-width:0}#mermaid-svg-fJLG5aNw8WIag5Pp .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-fJLG5aNw8WIag5Pp .task{stroke-width:2}#mermaid-svg-fJLG5aNw8WIag5Pp .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .taskText:not([font-size]){font-size:11px}#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-fJLG5aNw8WIag5Pp .task.clickable{cursor:pointer}#mermaid-svg-fJLG5aNw8WIag5Pp .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-fJLG5aNw8WIag5Pp .taskText0,#mermaid-svg-fJLG5aNw8WIag5Pp .taskText1,#mermaid-svg-fJLG5aNw8WIag5Pp .taskText2,#mermaid-svg-fJLG5aNw8WIag5Pp .taskText3{fill:#fff}#mermaid-svg-fJLG5aNw8WIag5Pp .task0,#mermaid-svg-fJLG5aNw8WIag5Pp .task1,#mermaid-svg-fJLG5aNw8WIag5Pp .task2,#mermaid-svg-fJLG5aNw8WIag5Pp .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutside0,#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutside2{fill:#000}#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutside1,#mermaid-svg-fJLG5aNw8WIag5Pp .taskTextOutside3{fill:#000}#mermaid-svg-fJLG5aNw8WIag5Pp .active0,#mermaid-svg-fJLG5aNw8WIag5Pp .active1,#mermaid-svg-fJLG5aNw8WIag5Pp .active2,#mermaid-svg-fJLG5aNw8WIag5Pp .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-fJLG5aNw8WIag5Pp .activeText0,#mermaid-svg-fJLG5aNw8WIag5Pp .activeText1,#mermaid-svg-fJLG5aNw8WIag5Pp .activeText2,#mermaid-svg-fJLG5aNw8WIag5Pp .activeText3{fill:#000 !important}#mermaid-svg-fJLG5aNw8WIag5Pp .done0,#mermaid-svg-fJLG5aNw8WIag5Pp .done1,#mermaid-svg-fJLG5aNw8WIag5Pp .done2,#mermaid-svg-fJLG5aNw8WIag5Pp .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-fJLG5aNw8WIag5Pp .doneText0,#mermaid-svg-fJLG5aNw8WIag5Pp .doneText1,#mermaid-svg-fJLG5aNw8WIag5Pp .doneText2,#mermaid-svg-fJLG5aNw8WIag5Pp .doneText3{fill:#000 !important}#mermaid-svg-fJLG5aNw8WIag5Pp .crit0,#mermaid-svg-fJLG5aNw8WIag5Pp .crit1,#mermaid-svg-fJLG5aNw8WIag5Pp .crit2,#mermaid-svg-fJLG5aNw8WIag5Pp .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-fJLG5aNw8WIag5Pp .activeCrit0,#mermaid-svg-fJLG5aNw8WIag5Pp .activeCrit1,#mermaid-svg-fJLG5aNw8WIag5Pp .activeCrit2,#mermaid-svg-fJLG5aNw8WIag5Pp .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-fJLG5aNw8WIag5Pp .doneCrit0,#mermaid-svg-fJLG5aNw8WIag5Pp .doneCrit1,#mermaid-svg-fJLG5aNw8WIag5Pp .doneCrit2,#mermaid-svg-fJLG5aNw8WIag5Pp .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-fJLG5aNw8WIag5Pp .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-fJLG5aNw8WIag5Pp .milestoneText{font-style:italic}#mermaid-svg-fJLG5aNw8WIag5Pp .doneCritText0,#mermaid-svg-fJLG5aNw8WIag5Pp .doneCritText1,#mermaid-svg-fJLG5aNw8WIag5Pp .doneCritText2,#mermaid-svg-fJLG5aNw8WIag5Pp .doneCritText3{fill:#000 !important}#mermaid-svg-fJLG5aNw8WIag5Pp .activeCritText0,#mermaid-svg-fJLG5aNw8WIag5Pp .activeCritText1,#mermaid-svg-fJLG5aNw8WIag5Pp .activeCritText2,#mermaid-svg-fJLG5aNw8WIag5Pp .activeCritText3{fill:#000 !important}#mermaid-svg-fJLG5aNw8WIag5Pp .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-fJLG5aNw8WIag5Pp g.classGroup text .title{font-weight:bolder}#mermaid-svg-fJLG5aNw8WIag5Pp g.clickable{cursor:pointer}#mermaid-svg-fJLG5aNw8WIag5Pp g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-fJLG5aNw8WIag5Pp g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-fJLG5aNw8WIag5Pp .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-fJLG5aNw8WIag5Pp .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-fJLG5aNw8WIag5Pp .dashed-line{stroke-dasharray:3}#mermaid-svg-fJLG5aNw8WIag5Pp #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp .commit-id,#mermaid-svg-fJLG5aNw8WIag5Pp .commit-msg,#mermaid-svg-fJLG5aNw8WIag5Pp .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-fJLG5aNw8WIag5Pp g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-fJLG5aNw8WIag5Pp g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-fJLG5aNw8WIag5Pp g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-fJLG5aNw8WIag5Pp .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-fJLG5aNw8WIag5Pp .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-fJLG5aNw8WIag5Pp .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-fJLG5aNw8WIag5Pp .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-fJLG5aNw8WIag5Pp .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-fJLG5aNw8WIag5Pp .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-fJLG5aNw8WIag5Pp .edgeLabel text{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-fJLG5aNw8WIag5Pp .node circle.state-start{fill:black;stroke:black}#mermaid-svg-fJLG5aNw8WIag5Pp .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-fJLG5aNw8WIag5Pp #statediagram-barbEnd{fill:#9370db}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-state .divider{stroke:#9370db}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-fJLG5aNw8WIag5Pp .note-edge{stroke-dasharray:5}#mermaid-svg-fJLG5aNw8WIag5Pp .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-fJLG5aNw8WIag5Pp .error-icon{fill:#522}#mermaid-svg-fJLG5aNw8WIag5Pp .error-text{fill:#522;stroke:#522}#mermaid-svg-fJLG5aNw8WIag5Pp .edge-thickness-normal{stroke-width:2px}#mermaid-svg-fJLG5aNw8WIag5Pp .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-fJLG5aNw8WIag5Pp .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-fJLG5aNw8WIag5Pp .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-fJLG5aNw8WIag5Pp .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-fJLG5aNw8WIag5Pp .marker{fill:#333}#mermaid-svg-fJLG5aNw8WIag5Pp .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-fJLG5aNw8WIag5Pp {color: rgba(0, 0, 0, 0.75);font: ;}

1.闪电贷WETH
2.WETH换ETH
3.ETH换USDT
4.USDT换ETH
5.ETH换WETH
6.WETH还款
DYDX
套利合约
WETH
Cofix
Uniswap

还款后剩余资金为所的利润

套利合约

github:https://github.com/MLY0813/FlashSwapForCofixAndUni/blob/main/Contract/Flash_Swap.sol

核心方法

 //  实现操作function callFunction(address sender,Account.Info memory account,bytes memory data) public {MyCustomData memory mcd = abi.decode(data, (MyCustomData));uint256 tokenBalanceBefore = IERC20(mcd.token).balanceOf(address(this));// money// WETH->ETHWETH9(WETHAddress).withdraw(tokenBalanceBefore);// ETH->USDTuint256 loopTimes = address(this).balance.div(cofixETHSapn);for(uint256 i = 0; i < loopTimes; i++) {CoFiXRouter(cofixRouter).swapExactETHForTokens{value:cofixETHSapn}(USDTAddress,cofixETHSapn.sub(nestPrice),1,address(this), address(this), uint256(block.timestamp).add(100));}// USDT->ETHuint256 usdtBalance = IERC20(USDTAddress).balanceOf(address(this));address[] memory uniData = new address[](2);uniData[0] = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);uniData[1] = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);UniswapV2Router(uniRouter).swapExactTokensForETH(usdtBalance,1,uniData,address(this),uint256(block.timestamp).add(100));// ETH->WETHWETH9(WETHAddress).deposit{value:tokenBalanceBefore.add(2)};uint256 balOfLoanedToken = IERC20(mcd.token).balanceOf(address(this));require(balOfLoanedToken >= mcd.repayAmount,"Not enough funds to repay dydx loan!");}

callFunction方法会在调用DYDX闪电贷过程中被回调,在方法中实现收到贷款资金后需要的进行的操作。

1.WETH兑换成ETH

 WETH9(WETHAddress).withdraw(tokenBalanceBefore);

2.ETH 在Cofix中兑换成USDT

 uint256 loopTimes = address(this).balance.div(cofixETHSapn);for(uint256 i = 0; i < loopTimes; i++) {CoFiXRouter(cofixRouter).swapExactETHForTokens{value:cofixETHSapn}(USDTAddress,cofixETHSapn.sub(nestPrice),1,address(this), address(this), uint256(block.timestamp).add(100));}

这里使用了循环操作,因为cofix中有冲击成本的限制。单笔大额资金是亏钱的,所以要分成小部分资金进行兑换。

3.USDT 在Uniswap中兑换成ETH

 uint256 usdtBalance = IERC20(USDTAddress).balanceOf(address(this));address[] memory uniData = new address[](2);uniData[0] = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);uniData[1] = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);UniswapV2Router(uniRouter).swapExactTokensForETH(usdtBalance,1,uniData,address(this),uint256(block.timestamp).add(100));

4.ETH兑换成WETH

WETH9(WETHAddress).deposit{value:tokenBalanceBefore.add(2)};

注意dydx还款的时候需要加2wei的资金

整个操作完成后剩余的ETH就是自己的了


 function initiateFlashLoan(uint256 _amount)external{ISoloMargin solo = ISoloMargin(dydxAddress);uint256 marketId = _getMarketIdFromTokenAddress(dydxAddress, WETHAddress);uint256 repayAmount = _getRepaymentAmountInternal(_amount);IERC20(WETHAddress).approve(dydxAddress, repayAmount);Actions.ActionArgs[] memory operations = new Actions.ActionArgs[](3);operations[0] = _getWithdrawAction(marketId, _amount);operations[1] = _getCallAction(abi.encode(MyCustomData({token: WETHAddress, repayAmount: repayAmount})));operations[2] = _getDepositAction(marketId, repayAmount);Account.Info[] memory accountInfos = new Account.Info[](1);accountInfos[0] = _getAccountInfo();solo.operate(accountInfos, operations);}

使用dydx闪电贷的代码,传入参数就是想借多少WETH。大部分代码都是按照dydx固定的参数拼接数据。

注意事项

  1. 只有出现利差的时候闪电贷套利才有效,这种机会很少,但是也没什么成本。
  2. cofix交易会挖出cofi,合约中需要有取出cofi的接口,否则就锁里面拿不出来了。
  3. 最好有脚本程序配合,发现套利机会直接发起交易套利。

基于DYDX闪电贷在Cofix和Uniswap之间套利相关推荐

  1. 【DeFi学堂】空手套白狼的利器-闪电贷原理及应用案例

    DeFi利器 - 闪电贷原理及应用案例 概述 闪电贷顾名思义,就是在极短的时间内完成贷款与还款的操作. 在DeFi领域,闪电贷为金融业务提供了免抵押借款服务,是DeFi世界的一款利器. 闪电贷的概念最 ...

  2. 揭开闪电贷的神秘面纱

    闪电贷最初为开发者设计,所以闪电贷业务只能由智能合约实现,虽然现在有些如 Furucombo 等平台已经省去了写代码的复杂流程,但是想要清楚理解闪电贷原理我们需要从底层代码开始. 本文从技术角度带你了 ...

  3. 36 万美元套利!3 步骤揭秘黑客 DeFi 闪电贷全过程

    作者 | Gary Lai 译者 | CryptoShadow 责编 | Carol 出品 | 区块链大本营(ID:blockchain_camp) 近期发生了一起事件:一名"黑客" ...

  4. 36万美元套利!3 个步骤揭秘黑客DeFi闪电贷操盘全过程

    作者 | Gary Lai 翻译 | CryptoShadow,责编 | Carol 出品 | 区块链大本营(ID:blockchain_camp) 近期发生了一起事件:一名"黑客" ...

  5. 闪电贷攻击的深层原因:价格预言机操纵攻击

    作者:Samczsun 编译:Savage 进入11月以来,连着有两起闪电贷攻击被报道,Value DeFi 协议和BSC上的CHEESE项目方都遭遇了类似攻击,损失了数百万美元.随着时间的增加,可以 ...

  6. 闪电贷攻击又背锅? “幕后元凶”竟是它!

    来源 | 成都链安 责编 | 晋兆雨 头图 | 付费下载于视觉中国 近日,DeFi市场经历了一场严峻的考验,多起攻击事件接连发生,造成了巨大的资产损失.在多数安全事件中,闪电贷攻击的"冠名& ...

  7. Belt闪电贷攻击后续:总损失金额5000万美元,48小时内发布补偿计划

    注:5月,DeFi安全事故频发,据统计,约有15个项目遭到黑客攻击,包括Belt Finance.BurgerSwap.Julswap.Merlin.AutoShark Finance.Bogged ...

  8. 闪电贷攻击攻击屡试不爽,DeFi一周被盗超1600万美元

    黑客利用闪电贷,从DeFi项目Akropolis.Value DeFi Protocol和Origin Protocol中获取了1640万美元的ETH和Dai. Value DeFi的攻击者用通过闪电 ...

  9. 【风控策略】解析闪电贷贷前风控策略

    原文链接:https://mp.weixin.qq.com/s/-4uh31a0adXr2qwNppSwmQ 有招商银行APP的朋友,可以在招行APP页面中点击借钱,即可看到闪电贷. [博客地址]:h ...

最新文章

  1. 我的java开发规范
  2. 【Groovy】map 集合 ( map 集合操作符重载 | - 操作符重载 | 代码示例 )
  3. 更新Oracle的Date字段
  4. 如何查看AWS实例上使用的key value pair名称
  5. 1.6 编程基础之一维数组 05 年龄与疾病 python
  6. django模块导入/函数/中间件/MVC和MTV/CSRF
  7. 【Matlab学习笔记】【图像滤波去噪】高斯平滑滤波
  8. hadoop namenode启动失败
  9. 架构设计——ID生成器
  10. 《算法设计与分析 第2版 屈婉玲等》第五章习题答案
  11. python实现自动化打印
  12. Eclipse中SVN分支与合并
  13. iOS Xcode12安装P12证书问题
  14. 中国人在发表英文论文时汉字姓名究竟应该如何写?
  15. C++统计一个文件的行数,大写字母数,小写字母数,数字数
  16. 模糊数学——距离和贴近度
  17. wordpress友联_WordPress添加友情链接功能
  18. 85. 如何用 OPA5 编写测试用例来测试用户输入文本的功能
  19. 基于MATLAB/Simulink软件的单相光伏并网逆变器仿真,仿真中使用两级电路,前级BOOST升压后级光伏逆变并网
  20. XOP 网格计划是什么?XOP 的特性

热门文章

  1. mongo3.5 java cursor_pymongo for py2.7.py3.6版本-pymongo下载3.5.1 官方最新版-西西软件下载...
  2. iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署
  3. 【收藏版】Linux常用命令大全
  4. flex弹性盒子flex-grow 和flex的区别
  5. java s c r ipt_Java Scr ipt高级应用与实践_前端开发教程_源雷技术空间
  6. 尚硅谷-互联网大厂高频重点面试题 (第2季)JUC多线程及高并发
  7. mac下视频转换软件效率分析,最后只推荐三款格式转换软件
  8. pyqt5QQ音乐播放器毕设成品音频可视化
  9. mysql级联删除报1451 - Cannot delete or update a parent row: a foreign key constrain
  10. 成像系统(一):A Review of Indocyanine Green Fluorescent Imaging in Surgery