-
Notifications
You must be signed in to change notification settings - Fork 100
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Setup 1Inch v6 #331
Closed
Closed
Setup 1Inch v6 #331
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
contract Events { | ||
event LogSell( | ||
address indexed buyToken, | ||
address indexed sellToken, | ||
uint256 buyAmt, | ||
uint256 sellAmt, | ||
uint256 getId, | ||
uint256 setId | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
import { TokenInterface } from "../../../common/interfaces.sol"; | ||
import { DSMath } from "../../../common/math.sol"; | ||
import { Basic } from "../../../common/basic.sol"; | ||
|
||
|
||
abstract contract Helpers is DSMath, Basic { | ||
/** | ||
* @dev 1Inch Router v6 Address | ||
*/ | ||
address internal constant oneInchAddr = 0x111111125421cA6dc452d289314280a0f8842A65; | ||
} |
31 changes: 31 additions & 0 deletions
31
contracts/arbitrum/connectors/1inch/1inch-v6/interface.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
import { TokenInterface } from "../../../common/interfaces.sol"; | ||
|
||
interface OneInchInterace { | ||
function swap( | ||
TokenInterface fromToken, | ||
TokenInterface toToken, | ||
uint256 fromTokenAmount, | ||
uint256 minReturnAmount, | ||
uint256 guaranteedAmount, | ||
address payable referrer, | ||
address[] calldata callAddresses, | ||
bytes calldata callDataConcat, | ||
uint256[] calldata starts, | ||
uint256[] calldata gasLimitsAndValues | ||
) | ||
external | ||
payable | ||
returns (uint256 returnAmount); | ||
} | ||
|
||
struct OneInchData { | ||
TokenInterface sellToken; | ||
TokenInterface buyToken; | ||
uint _sellAmt; | ||
uint _buyAmt; | ||
uint unitAmt; | ||
bytes callData; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
pragma experimental ABIEncoderV2; | ||
|
||
/** | ||
* @title 1InchV6. | ||
* @dev On-chain DEX Aggregator. | ||
*/ | ||
|
||
// import files from common directory | ||
import { TokenInterface , MemoryInterface } from "../../../common/interfaces.sol"; | ||
import { Stores } from "../../../common/stores.sol"; | ||
import { OneInchInterace, OneInchData } from "./interface.sol"; | ||
import { Helpers } from "./helpers.sol"; | ||
import { Events } from "./events.sol"; | ||
|
||
abstract contract OneInchResolver is Helpers, Events { | ||
|
||
|
||
/** | ||
* @dev 1inch API swap handler | ||
* @param oneInchData - contains data returned from 1inch API. Struct defined in interfaces.sol | ||
* @param ethAmt - Eth to swap for .value() | ||
*/ | ||
function oneInchSwap( | ||
OneInchData memory oneInchData, | ||
uint ethAmt | ||
) internal returns (uint buyAmt) { | ||
TokenInterface buyToken = oneInchData.buyToken; | ||
(uint _buyDec, uint _sellDec) = getTokensDec(buyToken, oneInchData.sellToken); | ||
uint _sellAmt18 = convertTo18(_sellDec, oneInchData._sellAmt); | ||
uint _slippageAmt = convert18ToDec(_buyDec, wmul(oneInchData.unitAmt, _sellAmt18)); | ||
|
||
uint initalBal = getTokenBal(buyToken); | ||
|
||
// solium-disable-next-line security/no-call-value | ||
(bool success, ) = oneInchAddr.call{value: ethAmt}(oneInchData.callData); | ||
if (!success) revert("1Inch-swap-failed"); | ||
|
||
uint finalBal = getTokenBal(buyToken); | ||
|
||
buyAmt = sub(finalBal, initalBal); | ||
|
||
require(_slippageAmt <= buyAmt, "Too much slippage"); | ||
} | ||
|
||
} | ||
|
||
abstract contract OneInchResolverHelpers is OneInchResolver { | ||
|
||
/** | ||
* @dev Gets the swapping data from 1inch's API. | ||
* @param oneInchData Struct with multiple swap data defined in interfaces.sol | ||
* @param setId Set token amount at this ID in `InstaMemory` Contract. | ||
*/ | ||
function _sell( | ||
OneInchData memory oneInchData, | ||
uint setId | ||
) internal returns (OneInchData memory) { | ||
TokenInterface _sellAddr = oneInchData.sellToken; | ||
|
||
uint ethAmt; | ||
if (address(_sellAddr) == ethAddr) { | ||
ethAmt = oneInchData._sellAmt; | ||
} else { | ||
approve(TokenInterface(_sellAddr), oneInchAddr, oneInchData._sellAmt); | ||
} | ||
|
||
oneInchData._buyAmt = oneInchSwap(oneInchData, ethAmt); | ||
setUint(setId, oneInchData._buyAmt); | ||
|
||
return oneInchData; | ||
} | ||
} | ||
|
||
abstract contract OneInch is OneInchResolverHelpers { | ||
/** | ||
* @dev Sell ETH/ERC20_Token using 1Inch. | ||
* @notice Swap tokens from exchanges like kyber, 0x etc, with calculation done off-chain. | ||
* @param buyAddr The address of the token to buy.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) | ||
* @param sellAddr The address of the token to sell.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) | ||
* @param sellAmt The amount of the token to sell. | ||
* @param unitAmt The amount of buyAmt/sellAmt with slippage. | ||
* @param callData Data from 1inch API. | ||
* @param setId ID stores the amount of token brought. | ||
*/ | ||
function sell( | ||
address buyAddr, | ||
address sellAddr, | ||
uint sellAmt, | ||
uint unitAmt, | ||
bytes calldata callData, | ||
uint setId | ||
) external payable returns (string memory _eventName, bytes memory _eventParam) { | ||
OneInchData memory oneInchData = OneInchData({ | ||
buyToken: TokenInterface(buyAddr), | ||
sellToken: TokenInterface(sellAddr), | ||
unitAmt: unitAmt, | ||
callData: callData, | ||
_sellAmt: sellAmt, | ||
_buyAmt: 0 | ||
}); | ||
|
||
oneInchData = _sell(oneInchData, setId); | ||
|
||
_eventName = "LogSell(address,address,uint256,uint256,uint256,uint256)"; | ||
_eventParam = abi.encode(buyAddr, sellAddr, oneInchData._buyAmt, oneInchData._sellAmt, 0, setId); | ||
} | ||
} | ||
|
||
contract ConnectV2OneInchV6Arbitrum is OneInch { | ||
string public name = "1Inch-v6"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
contract Events { | ||
event LogSell( | ||
address indexed buyToken, | ||
address indexed sellToken, | ||
uint256 buyAmt, | ||
uint256 sellAmt, | ||
uint256 getId, | ||
uint256 setId | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
import { TokenInterface } from "../../common/interfaces.sol"; | ||
import { DSMath } from "../../common/math.sol"; | ||
import { Basic } from "../../common/basic.sol"; | ||
|
||
|
||
abstract contract Helpers is DSMath, Basic { | ||
/** | ||
* @dev 1Inch Router v6 Address | ||
*/ | ||
address internal constant oneInchAddr = 0x111111125421cA6dc452d289314280a0f8842A65; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
import { TokenInterface } from "../../common/interfaces.sol"; | ||
|
||
interface OneInchInterace { | ||
function swap( | ||
TokenInterface fromToken, | ||
TokenInterface toToken, | ||
uint256 fromTokenAmount, | ||
uint256 minReturnAmount, | ||
uint256 guaranteedAmount, | ||
address payable referrer, | ||
address[] calldata callAddresses, | ||
bytes calldata callDataConcat, | ||
uint256[] calldata starts, | ||
uint256[] calldata gasLimitsAndValues | ||
) | ||
external | ||
payable | ||
returns (uint256 returnAmount); | ||
} | ||
|
||
struct OneInchData { | ||
TokenInterface sellToken; | ||
TokenInterface buyToken; | ||
uint _sellAmt; | ||
uint _buyAmt; | ||
uint unitAmt; | ||
bytes callData; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
pragma experimental ABIEncoderV2; | ||
|
||
/** | ||
* @title 1InchV6. | ||
* @dev On-chain DEX Aggregator. | ||
*/ | ||
|
||
// import files from common directory | ||
import { TokenInterface , MemoryInterface } from "../../common/interfaces.sol"; | ||
import { Stores } from "../../common/stores.sol"; | ||
import { OneInchInterace, OneInchData } from "./interface.sol"; | ||
import { Helpers } from "./helpers.sol"; | ||
import { Events } from "./events.sol"; | ||
|
||
abstract contract OneInchResolver is Helpers, Events { | ||
/** | ||
* @dev 1inch API swap handler | ||
* @param oneInchData - contains data returned from 1inch API. Struct defined in interfaces.sol | ||
* @param avaxAmt - Avax to swap for .value() | ||
*/ | ||
function oneInchSwap( | ||
OneInchData memory oneInchData, | ||
uint avaxAmt | ||
) internal returns (uint buyAmt) { | ||
TokenInterface buyToken = oneInchData.buyToken; | ||
(uint _buyDec, uint _sellDec) = getTokensDec(buyToken, oneInchData.sellToken); | ||
uint _sellAmt18 = convertTo18(_sellDec, oneInchData._sellAmt); | ||
uint _slippageAmt = convert18ToDec(_buyDec, wmul(oneInchData.unitAmt, _sellAmt18)); | ||
|
||
uint initalBal = getTokenBal(buyToken); | ||
|
||
// solium-disable-next-line security/no-call-value | ||
(bool success, ) = oneInchAddr.call{value: avaxAmt}(oneInchData.callData); | ||
if (!success) revert("1Inch-swap-failed"); | ||
|
||
uint finalBal = getTokenBal(buyToken); | ||
|
||
buyAmt = sub(finalBal, initalBal); | ||
|
||
require(_slippageAmt <= buyAmt, "Too much slippage"); | ||
} | ||
|
||
} | ||
|
||
abstract contract OneInchResolverHelpers is OneInchResolver { | ||
|
||
/** | ||
* @dev Gets the swapping data from 1inch's API. | ||
* @param oneInchData Struct with multiple swap data defined in interfaces.sol | ||
* @param setId Set token amount at this ID in `InstaMemory` Contract. | ||
*/ | ||
function _sell( | ||
OneInchData memory oneInchData, | ||
uint setId | ||
) internal returns (OneInchData memory) { | ||
TokenInterface _sellAddr = oneInchData.sellToken; | ||
|
||
uint avaxAmt; | ||
if (address(_sellAddr) == avaxAddr) { | ||
avaxAmt = oneInchData._sellAmt; | ||
} else { | ||
approve(TokenInterface(_sellAddr), oneInchAddr, oneInchData._sellAmt); | ||
} | ||
|
||
oneInchData._buyAmt = oneInchSwap(oneInchData, avaxAmt); | ||
setUint(setId, oneInchData._buyAmt); | ||
|
||
return oneInchData; | ||
|
||
} | ||
} | ||
|
||
abstract contract OneInch is OneInchResolverHelpers { | ||
/** | ||
* @dev Sell Avax/ERC20_Token using 1Inch. | ||
* @notice Swap tokens from exchanges like kyber, 0x etc, with calculation done off-chain. | ||
* @param buyAddr The address of the token to buy.(For Avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) | ||
* @param sellAddr The address of the token to sell.(For Avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) | ||
* @param sellAmt The amount of the token to sell. | ||
* @param unitAmt The amount of buyAmt/sellAmt with slippage. | ||
* @param callData Data from 1inch API. | ||
* @param setId ID stores the amount of token brought. | ||
*/ | ||
function sell( | ||
address buyAddr, | ||
address sellAddr, | ||
uint sellAmt, | ||
uint unitAmt, | ||
bytes calldata callData, | ||
uint setId | ||
) external payable returns (string memory _eventName, bytes memory _eventParam) { | ||
OneInchData memory oneInchData = OneInchData({ | ||
buyToken: TokenInterface(buyAddr), | ||
sellToken: TokenInterface(sellAddr), | ||
unitAmt: unitAmt, | ||
callData: callData, | ||
_sellAmt: sellAmt, | ||
_buyAmt: 0 | ||
}); | ||
|
||
oneInchData = _sell(oneInchData, setId); | ||
|
||
_eventName = "LogSell(address,address,uint256,uint256,uint256,uint256)"; | ||
_eventParam = abi.encode(buyAddr, sellAddr, oneInchData._buyAmt, oneInchData._sellAmt, 0, setId); | ||
} | ||
} | ||
|
||
contract ConnectV2OneInchV6Avalanche is OneInch { | ||
string public name = "1Inch-v6"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
contract Events { | ||
event LogSell( | ||
address indexed buyToken, | ||
address indexed sellToken, | ||
uint256 buyAmt, | ||
uint256 sellAmt, | ||
uint256 getId, | ||
uint256 setId | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
//SPDX-License-Identifier: MIT | ||
pragma solidity ^0.7.0; | ||
|
||
import { TokenInterface } from "../../common/interfaces.sol"; | ||
import { DSMath } from "../../common/math.sol"; | ||
import { Basic } from "../../common/basic.sol"; | ||
|
||
abstract contract Helpers is DSMath, Basic { | ||
/** | ||
* @dev 1Inch Router v6 Address | ||
*/ | ||
address internal constant oneInchAddr = | ||
0x111111125421cA6dc452d289314280a0f8842A65; | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
better to add the description of return value according to Nat Specs