2022-06-04 19:04:58 +00:00
|
|
|
//SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.7.0;
|
|
|
|
pragma abicoder v2;
|
|
|
|
|
|
|
|
import { InstaConnectors } from "../../common/interfaces.sol";
|
|
|
|
|
2022-06-08 13:50:24 +00:00
|
|
|
contract SwapHelpers {
|
2022-06-04 19:04:58 +00:00
|
|
|
/**
|
|
|
|
* @dev Instadapp Connectors Registry
|
|
|
|
*/
|
|
|
|
InstaConnectors internal constant instaConnectors =
|
|
|
|
InstaConnectors(0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14);
|
|
|
|
|
|
|
|
/**
|
|
|
|
*@dev Swap using the dex aggregators.
|
|
|
|
*@param _connectors name of the connectors in preference order.
|
2022-06-14 07:42:10 +00:00
|
|
|
*@param _data data for the swap cast.
|
2022-06-04 19:04:58 +00:00
|
|
|
*/
|
2022-06-14 07:42:10 +00:00
|
|
|
function _swap(string[] memory _connectors, bytes[] memory _data)
|
2022-06-04 19:04:58 +00:00
|
|
|
internal
|
2022-06-14 22:08:28 +00:00
|
|
|
returns (
|
|
|
|
bool success,
|
|
|
|
bytes memory returnData,
|
|
|
|
string memory connector
|
|
|
|
)
|
2022-06-04 19:04:58 +00:00
|
|
|
{
|
2022-06-08 13:50:24 +00:00
|
|
|
uint256 _length = _connectors.length;
|
|
|
|
require(_length > 0, "zero-length-not-allowed");
|
2022-06-14 07:42:10 +00:00
|
|
|
require(_data.length == _length, "calldata-length-invalid");
|
2022-06-04 19:04:58 +00:00
|
|
|
|
2022-06-08 13:50:24 +00:00
|
|
|
for (uint256 i = 0; i < _length; i++) {
|
2022-06-04 19:04:58 +00:00
|
|
|
(success, returnData) = instaConnectors
|
|
|
|
.connectors(_connectors[i])
|
2022-06-14 07:42:10 +00:00
|
|
|
.delegatecall(_data[i]);
|
2022-06-14 22:08:28 +00:00
|
|
|
if (success) {
|
|
|
|
connector = _connectors[i];
|
|
|
|
break;
|
|
|
|
}
|
2022-06-04 19:04:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|