Files
237-combo/contracts/examples/ProtocolinkExecutor.sol

53 lines
1.4 KiB
Solidity
Raw Normal View History

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "../interfaces/IERC20.sol";
interface IProtocolinkRouter {
function execute(
bytes calldata data
) external payable;
}
/**
* @title ProtocolinkExecutor
* @notice Example contract for executing Protocolink routes
* @dev This contract can execute Protocolink transaction plans
*/
contract ProtocolinkExecutor {
IProtocolinkRouter public immutable router;
constructor(address router_) {
router = IProtocolinkRouter(router_);
}
/**
* @notice Execute a Protocolink route
* @param data The encoded Protocolink route data
*/
function executeRoute(bytes calldata data) external payable {
router.execute{value: msg.value}(data);
}
/**
* @notice Execute a Protocolink route with token approvals
* @param tokens The tokens to approve
* @param amounts The amounts to approve
* @param data The encoded Protocolink route data
*/
function executeRouteWithApprovals(
address[] calldata tokens,
uint256[] calldata amounts,
bytes calldata data
) external payable {
// Approve tokens
for (uint256 i = 0; i < tokens.length; i++) {
IERC20(tokens[i]).approve(address(router), amounts[i]);
}
// Execute route
router.execute{value: msg.value}(data);
}
}