mirror of
				https://github.com/Instadapp/dsa-connectors-2.0.git
				synced 2024-07-29 21:57:39 +00:00 
			
		
		
		
	feat: add polygon
This commit is contained in:
		
							parent
							
								
									6d6dc3b10a
								
							
						
					
					
						commit
						14a21d58e5
					
				
							
								
								
									
										68
									
								
								contracts/polygon/connectors/paraswap/helpers.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								contracts/polygon/connectors/paraswap/helpers.sol
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,68 @@ | |||
| //SPDX-License-Identifier: MIT | ||||
| pragma solidity 0.8.19; | ||||
| 
 | ||||
| import {DSMath} from "../../common/math.sol"; | ||||
| import {Basic} from "../../common/basic.sol"; | ||||
| import {TokenInterface} from "../../common/interfaces.sol"; | ||||
| 
 | ||||
| abstract contract Helpers is DSMath, Basic { | ||||
|     struct SwapData { | ||||
|         TokenInterface sellToken; | ||||
|         TokenInterface buyToken; | ||||
|         uint256 _sellAmt; | ||||
|         uint256 _buyAmt; | ||||
|         uint256 unitAmt; | ||||
|         bytes callData; | ||||
|     } | ||||
| 
 | ||||
|     address internal constant AUGUSTUS_V6 = | ||||
|         0x6A000F20005980200259B80c5102003040001068; | ||||
| 
 | ||||
|     function _swapHelper( | ||||
|         SwapData memory swapData, | ||||
|         uint256 wmaticAmt | ||||
|     ) internal returns (uint256 buyAmt) { | ||||
|         TokenInterface buyToken = swapData.buyToken; | ||||
|         (uint256 _buyDec, uint256 _sellDec) = getTokensDec( | ||||
|             buyToken, | ||||
|             swapData.sellToken | ||||
|         ); | ||||
|         uint256 _sellAmt18 = convertTo18(_sellDec, swapData._sellAmt); | ||||
|         uint256 _slippageAmt = convert18ToDec( | ||||
|             _buyDec, | ||||
|             wmul(swapData.unitAmt, _sellAmt18) | ||||
|         ); | ||||
| 
 | ||||
|         uint256 initalBal = getTokenBal(buyToken); | ||||
| 
 | ||||
|         (bool success, ) = AUGUSTUS_V6.call{value: wmaticAmt}(swapData.callData); | ||||
|         if (!success) revert("paraswap-failed"); | ||||
| 
 | ||||
|         uint256 finalBal = getTokenBal(buyToken); | ||||
| 
 | ||||
|         buyAmt = sub(finalBal, initalBal); | ||||
| 
 | ||||
|         require(_slippageAmt <= buyAmt, "Too much slippage"); | ||||
|     } | ||||
| 
 | ||||
|     function _swap( | ||||
|         SwapData memory swapData, | ||||
|         uint256 setId | ||||
|     ) internal returns (SwapData memory) { | ||||
|         TokenInterface _sellAddr = swapData.sellToken; | ||||
| 
 | ||||
|         uint256 maticAmt; | ||||
| 
 | ||||
|         if (address(_sellAddr) == maticAddr) { | ||||
|             maticAmt = swapData._sellAmt; | ||||
|         } else { | ||||
|             approve(TokenInterface(_sellAddr), AUGUSTUS_V6, swapData._sellAmt); | ||||
|         } | ||||
| 
 | ||||
|         swapData._buyAmt = _swapHelper(swapData, maticAmt); | ||||
| 
 | ||||
|         setUint(setId, swapData._buyAmt); | ||||
| 
 | ||||
|         return swapData; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										55
									
								
								contracts/polygon/connectors/paraswap/main.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								contracts/polygon/connectors/paraswap/main.sol
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,55 @@ | |||
| //SPDX-License-Identifier: MIT | ||||
| pragma solidity 0.8.19; | ||||
| 
 | ||||
| import {TokenInterface} from "../../common/interfaces.sol"; | ||||
| import {Stores} from "../../common/stores.sol"; | ||||
| import {Helpers} from "./helpers.sol"; | ||||
| 
 | ||||
| contract ParaswapResolver is Helpers { | ||||
|     /** | ||||
|      * @dev Sell ETH/ERC20_Token using ParaSwap. | ||||
|      * @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 paraswap API. | ||||
|      * @param setId ID stores the amount of token brought. | ||||
|      */ | ||||
|     function swap( | ||||
|         address buyAddr, | ||||
|         address sellAddr, | ||||
|         uint256 sellAmt, | ||||
|         uint256 unitAmt, | ||||
|         bytes calldata callData, | ||||
|         uint256 setId | ||||
|     ) | ||||
|         external | ||||
|         payable | ||||
|         returns (string memory _eventName, bytes memory _eventParam) | ||||
|     { | ||||
|         Helpers.SwapData memory swapData = Helpers.SwapData({ | ||||
|             buyToken: TokenInterface(buyAddr), | ||||
|             sellToken: TokenInterface(sellAddr), | ||||
|             unitAmt: unitAmt, | ||||
|             callData: callData, | ||||
|             _sellAmt: sellAmt, | ||||
|             _buyAmt: 0 | ||||
|         }); | ||||
| 
 | ||||
|         swapData = _swap(swapData, setId); | ||||
| 
 | ||||
|         _eventName = "LogSwap(address,address,uint256,uint256,uint256)"; | ||||
|         _eventParam = abi.encode( | ||||
|             address(swapData.buyToken), | ||||
|             address(swapData.sellToken), | ||||
|             swapData._buyAmt, | ||||
|             swapData._sellAmt, | ||||
|             setId | ||||
|         ); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| contract ConnectV2ParaswapV6Polygon is ParaswapResolver { | ||||
|     string public name = "Paraswap-v6.2"; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Samarendra Gouda
						Samarendra Gouda