MultiInvoker doesn't pay keepers refund for l1 calldata
MultiInvoker doesn't pay keepers refund for l1 calldata, as result keepers can be not incentivized to execute orders.\\nMultiInvoker contract allows users to create orders, which then can be executed by keepers. For his job, keeper receives fee from order's creator. This fee payment is handled by `_handleKeep` function.\\nThe function will call `keep` modifier and will craft `KeepConfig` which contains `keepBufferCalldata`, which is flat fee for l1 calldata of this call.\\n```\\n    modifier keep(\\n        KeepConfig memory config,\\n        bytes calldata applicableCalldata,\\n        uint256 applicableValue,\\n        bytes memory data\\n    ) {\\n        uint256 startGas = gasleft();\\n\\n\\n        _;\\n\\n\\n        uint256 applicableGas = startGas - gasleft();\\n        (UFixed18 baseFee, UFixed18 calldataFee) = (\\n            _baseFee(applicableGas, config.multiplierBase, config.bufferBase),\\n            _calldataFee(applicableCalldata, config.multiplierCalldata, config.bufferCalldata)\\n        );\\n\\n\\n        UFixed18 keeperFee = UFixed18.wrap(applicableValue).add(baseFee).add(calldataFee).mul(_etherPrice());\\n        _raiseKeeperFee(keeperFee, data);\\n        keeperToken().push(msg.sender, keeperFee);\\n\\n\\n        emit KeeperCall(msg.sender, applicableGas, applicableValue, baseFee, calldataFee, keeperFee);\\n    }\\n```\\n\\nThis modifier should calculate amount of tokens that should be refunded to user and then raise it. We are interested not in whole modifier, but in calldata handling. To do that we call `_calldataFee` function. This function does nothing in the `Kept` contract and is overrided in the `Kept_Arbitrum` and `Kept_Optimism`.\\nThe problem is that MultiInvoker is only one and it just extends `Keept`. As result his `_calldataFee` function will always return 0, which means that calldata fee will not be added to the refund of keeper.
You need to implement 2 versions of MultiInvoker: for optimism(Kept_Optimism) and arbitrum(Kept_Arbitrum).
Keeper will not be incentivized to execute orders.
```\\n    modifier keep(\\n        KeepConfig memory config,\\n        bytes calldata applicableCalldata,\\n        uint256 applicableValue,\\n        bytes memory data\\n    ) {\\n        uint256 startGas = gasleft();\\n\\n\\n        _;\\n\\n\\n        uint256 applicableGas = startGas - gasleft();\\n        (UFixed18 baseFee, UFixed18 calldataFee) = (\\n            _baseFee(applicableGas, config.multiplierBase, config.bufferBase),\\n            _calldataFee(applicableCalldata, config.multiplierCalldata, config.bufferCalldata)\\n        );\\n\\n\\n        UFixed18 keeperFee = UFixed18.wrap(applicableValue).add(baseFee).add(calldataFee).mul(_etherPrice());\\n        _raiseKeeperFee(keeperFee, data);\\n        keeperToken().push(msg.sender, keeperFee);\\n\\n\\n        emit KeeperCall(msg.sender, applicableGas, applicableValue, baseFee, calldataFee, keeperFee);\\n    }\\n```\\n