mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
feat: optimism contracts
This commit is contained in:
parent
d679dc3381
commit
64a2bc2b40
|
@ -0,0 +1,6 @@
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.8.0;
|
||||||
|
|
||||||
|
contract Events {
|
||||||
|
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
|
||||||
|
}
|
|
@ -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_);
|
||||||
|
}
|
|
@ -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";
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.8.0;
|
||||||
|
|
||||||
|
contract Events {
|
||||||
|
event LogApproveTokensMultisig(address[] tokenAddresses, uint256[] amounts, uint32 index);
|
||||||
|
}
|
|
@ -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_);
|
||||||
|
}
|
|
@ -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";
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user