dsa-connectors/contracts/avalanche/connectors/swap/helpers.sol

35 lines
949 B
Solidity
Raw Normal View History

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 03:12:15 +00:00
returns (bool success, bytes memory returnData)
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 07:55:48 +00:00
if (success) break;
2022-06-04 19:04:58 +00:00
}
}
}