From 4c1f814917fa52d49e35840c3a9b9d030336dc95 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 16:59:14 +0400 Subject: [PATCH 1/7] feat: multisig avalanche --- .../events.sol | 6 +++ .../interface.sol | 6 +++ .../approve-tokens-multisig-staging/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig/events.sol | 6 +++ .../approve-tokens-multisig/interface.sol | 6 +++ .../approve-tokens-multisig/main.sol | 38 +++++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol create mode 100644 contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol create mode 100644 contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol create mode 100644 contracts/avalanche/connectors/approve-tokens-multisig/events.sol create mode 100644 contracts/avalanche/connectors/approve-tokens-multisig/interface.sol create mode 100644 contracts/avalanche/connectors/approve-tokens-multisig/main.sol diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol new file mode 100644 index 00000000..7dbec2e0 --- /dev/null +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensAvalanche is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/events.sol b/contracts/avalanche/connectors/approve-tokens-multisig/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/avalanche/connectors/approve-tokens-multisig/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol b/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/main.sol b/contracts/avalanche/connectors/approve-tokens-multisig/main.sol new file mode 100644 index 00000000..7dbec2e0 --- /dev/null +++ b/contracts/avalanche/connectors/approve-tokens-multisig/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensAvalanche is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file From f27d75b89b06ce7d61aeebbdd2411c8443c8960f Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 17:05:29 +0400 Subject: [PATCH 2/7] feat: arbitrum contracts --- .../events.sol | 6 +++ .../interface.sol | 6 +++ .../approve-tokens-multisig-staging/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig/events.sol | 6 +++ .../approve-tokens-multisig/interface.sol | 6 +++ .../approve-tokens-multisig/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig-staging/main.sol | 4 +- .../approve-tokens-multisig/main.sol | 2 +- 8 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol create mode 100644 contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol create mode 100644 contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol create mode 100644 contracts/arbitrum/connectors/approve-tokens-multisig/events.sol create mode 100644 contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol create mode 100644 contracts/arbitrum/connectors/approve-tokens-multisig/main.sol diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol new file mode 100644 index 00000000..c1dcae0f --- /dev/null +++ b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0x09389f927AE43F93958A4eBF2Bbb24B9fE88f6c5); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigArbitrum is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol b/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol b/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol b/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol new file mode 100644 index 00000000..6cf0cda2 --- /dev/null +++ b/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigArbitrum is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol index 7dbec2e0..de092e62 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol @@ -9,7 +9,7 @@ import "./interface.sol"; contract ApproveTokensResolver is Events { using SafeERC20 for IERC20; - IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0x09389f927AE43F93958A4eBF2Bbb24B9fE88f6c5); function approveTokens( address[] calldata tokens, @@ -33,6 +33,6 @@ contract ApproveTokensResolver is Events { } } -contract ConnectV2ApproveTokensAvalanche is ApproveTokensResolver { +contract ConnectV2ApproveTokensMultisigAvalanche is ApproveTokensResolver { string constant public name = "ApproveTokens-v1"; } \ No newline at end of file diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/main.sol b/contracts/avalanche/connectors/approve-tokens-multisig/main.sol index 7dbec2e0..2805b8cb 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig/main.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig/main.sol @@ -33,6 +33,6 @@ contract ApproveTokensResolver is Events { } } -contract ConnectV2ApproveTokensAvalanche is ApproveTokensResolver { +contract ConnectV2ApproveTokensMultisigAvalanche is ApproveTokensResolver { string constant public name = "ApproveTokens-v1"; } \ No newline at end of file From b46325ad45bc12585af96e6ad82609a11cd4f21e Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 17:08:18 +0400 Subject: [PATCH 3/7] feat: base contracts --- .../events.sol | 6 +++ .../interface.sol | 6 +++ .../approve-tokens-multisig-staging/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig/events.sol | 6 +++ .../approve-tokens-multisig/interface.sol | 6 +++ .../approve-tokens-multisig/main.sol | 38 +++++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 contracts/base/connectors/approve-tokens-multisig-staging/events.sol create mode 100644 contracts/base/connectors/approve-tokens-multisig-staging/interface.sol create mode 100644 contracts/base/connectors/approve-tokens-multisig-staging/main.sol create mode 100644 contracts/base/connectors/approve-tokens-multisig/events.sol create mode 100644 contracts/base/connectors/approve-tokens-multisig/interface.sol create mode 100644 contracts/base/connectors/approve-tokens-multisig/main.sol diff --git a/contracts/base/connectors/approve-tokens-multisig-staging/events.sol b/contracts/base/connectors/approve-tokens-multisig-staging/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/base/connectors/approve-tokens-multisig-staging/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/base/connectors/approve-tokens-multisig-staging/main.sol b/contracts/base/connectors/approve-tokens-multisig-staging/main.sol new file mode 100644 index 00000000..394d64c9 --- /dev/null +++ b/contracts/base/connectors/approve-tokens-multisig-staging/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0x09389f927AE43F93958A4eBF2Bbb24B9fE88f6c5); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigBase is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/base/connectors/approve-tokens-multisig/events.sol b/contracts/base/connectors/approve-tokens-multisig/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/base/connectors/approve-tokens-multisig/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/base/connectors/approve-tokens-multisig/interface.sol b/contracts/base/connectors/approve-tokens-multisig/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/base/connectors/approve-tokens-multisig/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/base/connectors/approve-tokens-multisig/main.sol b/contracts/base/connectors/approve-tokens-multisig/main.sol new file mode 100644 index 00000000..66c2c27d --- /dev/null +++ b/contracts/base/connectors/approve-tokens-multisig/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigBase is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file From d679dc33818c5a0595df31677474e16d65fcd430 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 17:13:31 +0400 Subject: [PATCH 4/7] feat: mainnet contracts --- .../events.sol | 6 +++ .../interface.sol | 6 +++ .../approve-tokens-multisig-staging/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig/events.sol | 6 +++ .../approve-tokens-multisig/interface.sol | 6 +++ .../approve-tokens-multisig/main.sol | 38 +++++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol create mode 100644 contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol create mode 100644 contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol create mode 100644 contracts/mainnet/connectors/approve-tokens-multisig/events.sol create mode 100644 contracts/mainnet/connectors/approve-tokens-multisig/interface.sol create mode 100644 contracts/mainnet/connectors/approve-tokens-multisig/main.sol diff --git a/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol b/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol b/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol new file mode 100644 index 00000000..fa9a1d3c --- /dev/null +++ b/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0x09389f927AE43F93958A4eBF2Bbb24B9fE88f6c5); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisig is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/approve-tokens-multisig/events.sol b/contracts/mainnet/connectors/approve-tokens-multisig/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/mainnet/connectors/approve-tokens-multisig/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol b/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/approve-tokens-multisig/main.sol b/contracts/mainnet/connectors/approve-tokens-multisig/main.sol new file mode 100644 index 00000000..3f93e900 --- /dev/null +++ b/contracts/mainnet/connectors/approve-tokens-multisig/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisig is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file From 64a2bc2b4071364787b2b5d7d3f60b6e3a46cc2c Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 17:15:49 +0400 Subject: [PATCH 5/7] feat: optimism contracts --- .../events.sol | 6 +++ .../interface.sol | 6 +++ .../approve-tokens-multisig-staging/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig/events.sol | 6 +++ .../approve-tokens-multisig/interface.sol | 6 +++ .../approve-tokens-multisig/main.sol | 38 +++++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol create mode 100644 contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol create mode 100644 contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol create mode 100644 contracts/optimism/connectors/approve-tokens-multisig/events.sol create mode 100644 contracts/optimism/connectors/approve-tokens-multisig/interface.sol create mode 100644 contracts/optimism/connectors/approve-tokens-multisig/main.sol diff --git a/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol b/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol b/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol new file mode 100644 index 00000000..d7acbb58 --- /dev/null +++ b/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0x09389f927AE43F93958A4eBF2Bbb24B9fE88f6c5); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigPolygon is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/optimism/connectors/approve-tokens-multisig/events.sol b/contracts/optimism/connectors/approve-tokens-multisig/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/optimism/connectors/approve-tokens-multisig/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/optimism/connectors/approve-tokens-multisig/interface.sol b/contracts/optimism/connectors/approve-tokens-multisig/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/optimism/connectors/approve-tokens-multisig/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/optimism/connectors/approve-tokens-multisig/main.sol b/contracts/optimism/connectors/approve-tokens-multisig/main.sol new file mode 100644 index 00000000..031f1b86 --- /dev/null +++ b/contracts/optimism/connectors/approve-tokens-multisig/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigPolygon is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file From 4514618484ae993ad5c379b71607d5c0929daec3 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 17:17:40 +0400 Subject: [PATCH 6/7] feat: polygon contracts --- .../events.sol | 6 +++ .../interface.sol | 6 +++ .../approve-tokens-multisig-staging/main.sol | 38 +++++++++++++++++++ .../approve-tokens-multisig/events.sol | 6 +++ .../approve-tokens-multisig/interface.sol | 6 +++ .../approve-tokens-multisig/main.sol | 38 +++++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol create mode 100644 contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol create mode 100644 contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol create mode 100644 contracts/polygon/connectors/approve-tokens-multisig/events.sol create mode 100644 contracts/polygon/connectors/approve-tokens-multisig/interface.sol create mode 100644 contracts/polygon/connectors/approve-tokens-multisig/main.sol diff --git a/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol b/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol b/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol new file mode 100644 index 00000000..d7acbb58 --- /dev/null +++ b/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0x09389f927AE43F93958A4eBF2Bbb24B9fE88f6c5); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigPolygon is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file diff --git a/contracts/polygon/connectors/approve-tokens-multisig/events.sol b/contracts/polygon/connectors/approve-tokens-multisig/events.sol new file mode 100644 index 00000000..3daaaa03 --- /dev/null +++ b/contracts/polygon/connectors/approve-tokens-multisig/events.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Events { + event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); +} \ No newline at end of file diff --git a/contracts/polygon/connectors/approve-tokens-multisig/interface.sol b/contracts/polygon/connectors/approve-tokens-multisig/interface.sol new file mode 100644 index 00000000..3ae3daf3 --- /dev/null +++ b/contracts/polygon/connectors/approve-tokens-multisig/interface.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IAvoFactoryMultisig { + function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); +} \ No newline at end of file diff --git a/contracts/polygon/connectors/approve-tokens-multisig/main.sol b/contracts/polygon/connectors/approve-tokens-multisig/main.sol new file mode 100644 index 00000000..031f1b86 --- /dev/null +++ b/contracts/polygon/connectors/approve-tokens-multisig/main.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "./events.sol"; +import "./interface.sol"; + +contract ApproveTokensResolver is Events { + using SafeERC20 for IERC20; + + IAvoFactoryMultisig public constant AVO_FACTORY = IAvoFactoryMultisig(0xe981E50c7c47F0Df8826B5ce3F533f5E4440e687); + + function approveTokens( + address[] calldata tokens, + uint256[] calldata amounts, + uint32 index + ) public returns (string memory _eventName, bytes memory _eventParam) { + require(tokens.length == amounts.length, "array-length-mismatch"); + + address avocadoAddress = AVO_FACTORY.computeAvocado(msg.sender, index); + + for (uint256 i = 0; i < tokens.length; i++) { + uint256 allowanceAmount = + amounts[i] == type(uint256).max + ? IERC20(tokens[i]).balanceOf(address(this)) + : amounts[i]; + IERC20(tokens[i]).safeApprove(avocadoAddress, allowanceAmount); + } + + _eventName = "LogApproveTokensMultisig(address[],uint256[],uint32)"; + _eventParam = abi.encode(tokens, amounts, index); + } +} + +contract ConnectV2ApproveTokensMultisigPolygon is ApproveTokensResolver { + string constant public name = "ApproveTokens-v1"; +} \ No newline at end of file From ccbef89028e1295eb686d35df90564d90cec5341 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Fri, 1 Sep 2023 18:28:19 +0400 Subject: [PATCH 7/7] feat: minor update --- .../connectors/approve-tokens-multisig-staging/events.sol | 2 +- .../connectors/approve-tokens-multisig-staging/interface.sol | 2 +- .../connectors/approve-tokens-multisig-staging/main.sol | 2 +- .../arbitrum/connectors/approve-tokens-multisig/events.sol | 2 +- .../arbitrum/connectors/approve-tokens-multisig/interface.sol | 2 +- .../arbitrum/connectors/approve-tokens-multisig/main.sol | 2 +- .../connectors/approve-tokens-multisig-staging/events.sol | 2 +- .../connectors/approve-tokens-multisig-staging/interface.sol | 2 +- .../connectors/approve-tokens-multisig-staging/main.sol | 2 +- .../avalanche/connectors/approve-tokens-multisig/events.sol | 2 +- .../connectors/approve-tokens-multisig/interface.sol | 2 +- .../avalanche/connectors/approve-tokens-multisig/main.sol | 2 +- .../connectors/approve-tokens-multisig-staging/events.sol | 2 +- .../connectors/approve-tokens-multisig-staging/interface.sol | 2 +- .../base/connectors/approve-tokens-multisig-staging/main.sol | 2 +- contracts/base/connectors/approve-tokens-multisig/events.sol | 2 +- .../base/connectors/approve-tokens-multisig/interface.sol | 2 +- contracts/base/connectors/approve-tokens-multisig/main.sol | 2 +- .../connectors/approve-tokens-multisig-staging/events.sol | 2 +- .../connectors/approve-tokens-multisig-staging/interface.sol | 2 +- .../connectors/approve-tokens-multisig-staging/main.sol | 2 +- .../mainnet/connectors/approve-tokens-multisig/events.sol | 2 +- .../mainnet/connectors/approve-tokens-multisig/interface.sol | 2 +- contracts/mainnet/connectors/approve-tokens-multisig/main.sol | 2 +- .../connectors/approve-tokens-multisig-staging/events.sol | 2 +- .../connectors/approve-tokens-multisig-staging/interface.sol | 2 +- .../connectors/approve-tokens-multisig-staging/main.sol | 4 ++-- .../optimism/connectors/approve-tokens-multisig/events.sol | 2 +- .../optimism/connectors/approve-tokens-multisig/interface.sol | 2 +- .../optimism/connectors/approve-tokens-multisig/main.sol | 4 ++-- .../connectors/approve-tokens-multisig-staging/events.sol | 2 +- .../connectors/approve-tokens-multisig-staging/interface.sol | 2 +- .../connectors/approve-tokens-multisig-staging/main.sol | 2 +- .../polygon/connectors/approve-tokens-multisig/events.sol | 2 +- .../polygon/connectors/approve-tokens-multisig/interface.sol | 2 +- contracts/polygon/connectors/approve-tokens-multisig/main.sol | 2 +- 36 files changed, 38 insertions(+), 38 deletions(-) diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol +++ b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol +++ b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol index c1dcae0f..26dbe9bb 100644 --- a/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/arbitrum/connectors/approve-tokens-multisig-staging/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol b/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol +++ b/contracts/arbitrum/connectors/approve-tokens-multisig/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol b/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol +++ b/contracts/arbitrum/connectors/approve-tokens-multisig/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol b/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol index 6cf0cda2..fb1e14c5 100644 --- a/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol +++ b/contracts/arbitrum/connectors/approve-tokens-multisig/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol b/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol index de092e62..2a6f29a3 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig-staging/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/events.sol b/contracts/avalanche/connectors/approve-tokens-multisig/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig/events.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol b/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/avalanche/connectors/approve-tokens-multisig/main.sol b/contracts/avalanche/connectors/approve-tokens-multisig/main.sol index 2805b8cb..d47a0fd9 100644 --- a/contracts/avalanche/connectors/approve-tokens-multisig/main.sol +++ b/contracts/avalanche/connectors/approve-tokens-multisig/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/base/connectors/approve-tokens-multisig-staging/events.sol b/contracts/base/connectors/approve-tokens-multisig-staging/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/base/connectors/approve-tokens-multisig-staging/events.sol +++ b/contracts/base/connectors/approve-tokens-multisig-staging/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol +++ b/contracts/base/connectors/approve-tokens-multisig-staging/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/base/connectors/approve-tokens-multisig-staging/main.sol b/contracts/base/connectors/approve-tokens-multisig-staging/main.sol index 394d64c9..fbf54893 100644 --- a/contracts/base/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/base/connectors/approve-tokens-multisig-staging/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/base/connectors/approve-tokens-multisig/events.sol b/contracts/base/connectors/approve-tokens-multisig/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/base/connectors/approve-tokens-multisig/events.sol +++ b/contracts/base/connectors/approve-tokens-multisig/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/base/connectors/approve-tokens-multisig/interface.sol b/contracts/base/connectors/approve-tokens-multisig/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/base/connectors/approve-tokens-multisig/interface.sol +++ b/contracts/base/connectors/approve-tokens-multisig/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/base/connectors/approve-tokens-multisig/main.sol b/contracts/base/connectors/approve-tokens-multisig/main.sol index 66c2c27d..e6d5cdcf 100644 --- a/contracts/base/connectors/approve-tokens-multisig/main.sol +++ b/contracts/base/connectors/approve-tokens-multisig/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol b/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol +++ b/contracts/mainnet/connectors/approve-tokens-multisig-staging/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol +++ b/contracts/mainnet/connectors/approve-tokens-multisig-staging/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol b/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol index fa9a1d3c..c285d781 100644 --- a/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/mainnet/connectors/approve-tokens-multisig-staging/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/mainnet/connectors/approve-tokens-multisig/events.sol b/contracts/mainnet/connectors/approve-tokens-multisig/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/mainnet/connectors/approve-tokens-multisig/events.sol +++ b/contracts/mainnet/connectors/approve-tokens-multisig/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol b/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol +++ b/contracts/mainnet/connectors/approve-tokens-multisig/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/mainnet/connectors/approve-tokens-multisig/main.sol b/contracts/mainnet/connectors/approve-tokens-multisig/main.sol index 3f93e900..7fdc1fe4 100644 --- a/contracts/mainnet/connectors/approve-tokens-multisig/main.sol +++ b/contracts/mainnet/connectors/approve-tokens-multisig/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol b/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol +++ b/contracts/optimism/connectors/approve-tokens-multisig-staging/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol +++ b/contracts/optimism/connectors/approve-tokens-multisig-staging/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol b/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol index d7acbb58..7ca14aa0 100644 --- a/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/optimism/connectors/approve-tokens-multisig-staging/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; @@ -33,6 +33,6 @@ contract ApproveTokensResolver is Events { } } -contract ConnectV2ApproveTokensMultisigPolygon is ApproveTokensResolver { +contract ConnectV2ApproveTokensMultisigOptimism is ApproveTokensResolver { string constant public name = "ApproveTokens-v1"; } \ No newline at end of file diff --git a/contracts/optimism/connectors/approve-tokens-multisig/events.sol b/contracts/optimism/connectors/approve-tokens-multisig/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/optimism/connectors/approve-tokens-multisig/events.sol +++ b/contracts/optimism/connectors/approve-tokens-multisig/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/optimism/connectors/approve-tokens-multisig/interface.sol b/contracts/optimism/connectors/approve-tokens-multisig/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/optimism/connectors/approve-tokens-multisig/interface.sol +++ b/contracts/optimism/connectors/approve-tokens-multisig/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/optimism/connectors/approve-tokens-multisig/main.sol b/contracts/optimism/connectors/approve-tokens-multisig/main.sol index 031f1b86..63bd4f7a 100644 --- a/contracts/optimism/connectors/approve-tokens-multisig/main.sol +++ b/contracts/optimism/connectors/approve-tokens-multisig/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; @@ -33,6 +33,6 @@ contract ApproveTokensResolver is Events { } } -contract ConnectV2ApproveTokensMultisigPolygon is ApproveTokensResolver { +contract ConnectV2ApproveTokensMultisigOptimism is ApproveTokensResolver { string constant public name = "ApproveTokens-v1"; } \ No newline at end of file diff --git a/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol b/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol +++ b/contracts/polygon/connectors/approve-tokens-multisig-staging/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol b/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol +++ b/contracts/polygon/connectors/approve-tokens-multisig-staging/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol b/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol index d7acbb58..9d9be117 100644 --- a/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol +++ b/contracts/polygon/connectors/approve-tokens-multisig-staging/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; diff --git a/contracts/polygon/connectors/approve-tokens-multisig/events.sol b/contracts/polygon/connectors/approve-tokens-multisig/events.sol index 3daaaa03..1b7d35e5 100644 --- a/contracts/polygon/connectors/approve-tokens-multisig/events.sol +++ b/contracts/polygon/connectors/approve-tokens-multisig/events.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; contract Events { event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index); diff --git a/contracts/polygon/connectors/approve-tokens-multisig/interface.sol b/contracts/polygon/connectors/approve-tokens-multisig/interface.sol index 3ae3daf3..626d1b15 100644 --- a/contracts/polygon/connectors/approve-tokens-multisig/interface.sol +++ b/contracts/polygon/connectors/approve-tokens-multisig/interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; interface IAvoFactoryMultisig { function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_); diff --git a/contracts/polygon/connectors/approve-tokens-multisig/main.sol b/contracts/polygon/connectors/approve-tokens-multisig/main.sol index 031f1b86..f0b608fa 100644 --- a/contracts/polygon/connectors/approve-tokens-multisig/main.sol +++ b/contracts/polygon/connectors/approve-tokens-multisig/main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";