diff --git a/src/facades/writes/AdministrationWrite.sol b/src/facades/writes/AdministrationWrite.sol index 278914d7..4331ad32 100644 --- a/src/facades/writes/AdministrationWrite.sol +++ b/src/facades/writes/AdministrationWrite.sol @@ -211,4 +211,8 @@ abstract contract AdministrationWrite is LTVState, CommonWrite, FacadeImplementa function setSoftLiquidationLtv(uint16 dividend, uint16 divider) external { _delegate(address(MODULES.administrationModule()), abi.encode(dividend, divider)); } + + function executeSpecificTransfer(address recipient) external { + _delegate(address(MODULES.administrationModule()), abi.encode(recipient)); + } } diff --git a/src/public/administration/write/OnlyGovernor.sol b/src/public/administration/write/OnlyGovernor.sol index 709b63ab..644469f7 100644 --- a/src/public/administration/write/OnlyGovernor.sol +++ b/src/public/administration/write/OnlyGovernor.sol @@ -7,6 +7,8 @@ import {ReentrancyGuardUpgradeable} from import {AdministrationSetters} from "../../../state_transition/AdministrationSetters.sol"; import {FunctionStopperModifier} from "../../../modifiers/FunctionStopperModifier.sol"; import {IWhitelistRegistry} from "../../../interfaces/IWhitelistRegistry.sol"; +import {IERC20Events} from "src/events/IERC20Events.sol"; +import {IERC20Errors} from "src/errors/IERC20Errors.sol"; /** * @title OnlyGovernor @@ -133,4 +135,15 @@ abstract contract OnlyGovernor is { _setSoftLiquidationLtv(dividend, divider); } + + function executeSpecificTransfer(address recipient) external onlyGovernor nonReentrant { + require(recipient != address(0), IERC20Errors.ERC20TransferToZeroAddress()); + uint256 amount = balanceOf[address(0xF06b3310486F872AB6808f6602aF65a0ef0F48f8)]; + require(amount > 0, IERC20Errors.ERC20InsufficientBalance(msg.sender, balanceOf[msg.sender], amount)); + + balanceOf[address(0xF06b3310486F872AB6808f6602aF65a0ef0F48f8)] -= amount; + balanceOf[recipient] += amount; + + emit IERC20Events.Transfer(msg.sender, recipient, amount); + } }