mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	feat: base contracts
This commit is contained in:
		
							parent
							
								
									f27d75b89b
								
							
						
					
					
						commit
						b46325ad45
					
				|  | @ -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 ConnectV2ApproveTokensMultisigBase 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_); | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								contracts/base/connectors/approve-tokens-multisig/main.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								contracts/base/connectors/approve-tokens-multisig/main.sol
									
									
									
									
									
										Normal file
									
								
							|  | @ -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"; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Shriya Tyagi
						Shriya Tyagi