diff --git a/contracts/avalanche/common/interfaces.sol b/contracts/avalanche/common/interfaces.sol index e9a3b0c1..912e57b1 100644 --- a/contracts/avalanche/common/interfaces.sol +++ b/contracts/avalanche/common/interfaces.sol @@ -1,5 +1,6 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.7.0; +pragma abicoder v2; interface TokenInterface { function approve(address, uint256) external; @@ -23,5 +24,5 @@ interface AccountInterface { } interface InstaConnectors { - function connectors(string memory) external returns (address); + function isConnectors(string[] calldata) external returns (bool, address[] memory); } diff --git a/contracts/avalanche/connectors/swap/helpers.sol b/contracts/avalanche/connectors/swap/helpers.sol index dabc32d7..b9207a26 100644 --- a/contracts/avalanche/connectors/swap/helpers.sol +++ b/contracts/avalanche/connectors/swap/helpers.sol @@ -28,10 +28,13 @@ contract SwapHelpers { require(_length > 0, "zero-length-not-allowed"); require(_datas.length == _length, "calldata-length-invalid"); + (bool isOk, address[] memory connectors) = instaConnectors.isConnectors( + _connectors + ); + require(isOk, "connector-names-invalid"); + for (uint256 i = 0; i < _length; i++) { - (success, returnData) = instaConnectors - .connectors(_connectors[i]) - .delegatecall(_datas[i]); + (success, returnData) = connectors[i].delegatecall(_datas[i]); if (success) { connector = _connectors[i]; break; diff --git a/contracts/mainnet/common/interfaces.sol b/contracts/mainnet/common/interfaces.sol index e1ed2ca2..29f60e4b 100644 --- a/contracts/mainnet/common/interfaces.sol +++ b/contracts/mainnet/common/interfaces.sol @@ -1,5 +1,6 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.7.0; +pragma abicoder v2; interface TokenInterface { function approve(address, uint256) external; @@ -29,5 +30,5 @@ interface AccountInterface { } interface InstaConnectors { - function connectors(string memory) external returns (address); -} \ No newline at end of file + function isConnectors(string[] calldata) external returns (bool, address[] memory); +} diff --git a/contracts/mainnet/connectors/swap/helpers.sol b/contracts/mainnet/connectors/swap/helpers.sol index edf49e1f..1405be37 100644 --- a/contracts/mainnet/connectors/swap/helpers.sol +++ b/contracts/mainnet/connectors/swap/helpers.sol @@ -28,10 +28,13 @@ contract SwapHelpers { require(_length > 0, "zero-length-not-allowed"); require(_datas.length == _length, "calldata-length-invalid"); + (bool isOk, address[] memory connectors) = instaConnectors.isConnectors( + _connectors + ); + require(isOk, "connector-names-invalid"); + for (uint256 i = 0; i < _length; i++) { - (success, returnData) = instaConnectors - .connectors(_connectors[i]) - .delegatecall(_datas[i]); + (success, returnData) = connectors[i].delegatecall(_datas[i]); if (success) { connector = _connectors[i]; break; diff --git a/contracts/polygon/common/interfaces.sol b/contracts/polygon/common/interfaces.sol index e395b83c..94f054e1 100644 --- a/contracts/polygon/common/interfaces.sol +++ b/contracts/polygon/common/interfaces.sol @@ -1,5 +1,6 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.7.0; +pragma abicoder v2; interface TokenInterface { function approve(address, uint256) external; @@ -28,5 +29,6 @@ interface AccountInterface { } interface InstaConnectors { - function connectors(string memory) external returns (address); + function isConnectors(string[] calldata) external returns (bool, address[] memory); } + diff --git a/contracts/polygon/connectors/swap/helpers.sol b/contracts/polygon/connectors/swap/helpers.sol index acecb5b5..b1badc57 100644 --- a/contracts/polygon/connectors/swap/helpers.sol +++ b/contracts/polygon/connectors/swap/helpers.sol @@ -28,10 +28,13 @@ contract SwapHelpers { require(_length > 0, "zero-length-not-allowed"); require(_datas.length == _length, "calldata-length-invalid"); + (bool isOk, address[] memory connectors) = instaConnectors.isConnectors( + _connectors + ); + require(isOk, "connector-names-invalid"); + for (uint256 i = 0; i < _length; i++) { - (success, returnData) = instaConnectors - .connectors(_connectors[i]) - .delegatecall(_datas[i]); + (success, returnData) = connectors[i].delegatecall(_datas[i]); if (success) { connector = _connectors[i]; break;