1
0
forked from mico/idle_moloch
idle_moloch/lib/Baal/contracts/mock/TestAvatar.sol
2024-11-01 11:55:27 +01:00

66 lines
1.6 KiB
Solidity

// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity 0.8.7;
contract Enum {
enum Operation {
Call,
DelegateCall
}
}
contract TestAvatar {
address public module;
receive() external payable {}
function enableModule(address _module) external {
module = _module;
}
function disableModule(address, address) external {
module = address(0);
}
function isModuleEnabled(address _module) external view returns (bool) {
if (module == _module) {
return true;
} else {
return false;
}
}
function execTransactionFromModule(
address payable to,
uint256 value,
bytes calldata data,
uint8 operation
) external returns (bool success) {
require(msg.sender == module, "Not authorized");
if (operation == 1) (success, ) = to.delegatecall(data);
else (success, ) = to.call{value: value}(data);
}
function execTransactionFromModuleReturnData(
address payable to,
uint256 value,
bytes calldata data,
uint8 operation
) external returns (bool success, bytes memory returnData) {
require(msg.sender == module, "Not authorized");
if (operation == 1) (success, ) = to.delegatecall(data);
else (success, returnData) = to.call{value: value}(data);
}
function getModulesPaginated(address, uint256 pageSize)
external
view
returns (address[] memory array, address next)
{
// Init array with max page size
array = new address[](pageSize);
array[0] = module;
next = module;
}
}