Merge pull request #313 from Instadapp/approve-multisig-connector

Approve multisig connector
This commit is contained in:
Shriya Tyagi 2023-09-02 01:56:56 +04:00 committed by GitHub
commit 232d92c9c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 600 additions and 0 deletions

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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 ConnectV2ApproveTokensMultisigAvalanche is ApproveTokensResolver {
string constant public name = "ApproveTokens-v1";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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 ConnectV2ApproveTokensMultisigAvalanche is ApproveTokensResolver {
string constant public name = "ApproveTokens-v1";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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 ConnectV2ApproveTokensMultisigOptimism is ApproveTokensResolver {
string constant public name = "ApproveTokens-v1";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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 ConnectV2ApproveTokensMultisigOptimism is ApproveTokensResolver {
string constant public name = "ApproveTokens-v1";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract Events {
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
}

View File

@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
interface IAvoFactoryMultisig {
function computeAvocado(address owner_, uint32 index_) external view returns (address computedAddress_);
}

View File

@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.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";
}