mTOFTReceiver MSG_XCHAIN_LEND_XCHAIN_LOCK unable to execute
In `mTOFTReceiver._toftCustomComposeReceiver(uint16 _msgType)` If `_msgType` is processed normally, the method must return `true`, if it returns `false`, it will trigger `revert InvalidMsgType()` But when `_msgType == MSG_XCHAIN_LEND_XCHAIN_LOCK` is executed normally, it does not correctly return `true` This causes this type of execution to always fail\\nThe main execution order of `_lzCompose()` is as follows:\\nIf msgType_ == MSG_REMOTE_TRANSFER, execute `_remoteTransferReceiver()`\\nOtherwise, execute `_extExec(msgType_, tapComposeMsg_)`\\nOtherwise, execute `tapiocaOmnichainReceiveExtender`\\nOtherwise, execute `_toeComposeReceiver()`\\nIf the 4th step `_toeComposeReceiver()` returns false, it is considered that the type cannot be found, and `revert InvalidMsgType(msgType_);` is triggered\\nthe code as follows：\\n```\\n    function _lzCompose(address srcChainSender_, bytes32 _guid, bytes memory oftComposeMsg_) internal {\\n        // Decode OFT compose message.\\n        (uint16 msgType_,,, bytes memory tapComposeMsg_, bytes memory nextMsg_) =\\n            TapiocaOmnichainEngineCodec.decodeToeComposeMsg(oftComposeMsg_);\\n\\n        // Call Permits/approvals if the msg type is a permit/approval.\\n        // If the msg type is not a permit/approval, it will call the other receivers.\\n        if (msgType_ == MSG_REMOTE_TRANSFER) {\\n            _remoteTransferReceiver(srcChainSender_, tapComposeMsg_);\\n        } else if (!_extExec(msgType_, tapComposeMsg_)) {\\n            // Check if the TOE extender is set and the msg type is valid. If so, call the TOE extender to handle msg.\\n            if (\\n                address(tapiocaOmnichainReceiveExtender) != address(0)\\n                    && tapiocaOmnichainReceiveExtender.isMsgTypeValid(msgType_)\\n            ) {\\n                bytes memory callData = abi.encodeWithSelector(\\n                    ITapiocaOmnichainReceiveExtender.toeComposeReceiver.selector,\\n                    msgType_,\\n                    srcChainSender_,\\n                    tapComposeMsg_\\n                );\\n                (bool success, bytes memory returnData) =\\n                    address(tapiocaOmnichainReceiveExtender).delegatecall(callData);\\n                if (!success) {\\n                    revert(_getTOEExtenderRevertMsg(returnData));\\n                }\\n            } else {\\n                // If no TOE extender is set or msg type doesn't match extender, try to call the internal receiver.\\n                if (!_toeComposeReceiver(msgType_, srcChainSender_, tapComposeMsg_)) {\\n                  revert InvalidMsgType(msgType_);\\n                }\\n            }\\n        }\\n```\\n\\nThe implementation of `mTOFTReceiver._toeComposeReceiver()` is as follows:\\n```\\ncontract mTOFTReceiver is BaseTOFTReceiver {\\n    constructor(TOFTInitStruct memory _data) BaseTOFTReceiver(_data) {}\\n\\n    function _toftCustomComposeReceiver(uint16 _msgType, address, bytes memory _toeComposeMsg)\\n        internal\\n        override\\n        returns (bool success)\\n    {\\n        if (_msgType == MSG_LEVERAGE_UP) { //@check\\n            _executeModule(\\n                uint8(ITOFT.Module.TOFTMarketReceiver),\\n                abi.encodeWithSelector(TOFTMarketReceiverModule.leverageUpReceiver.selector, _toeComposeMsg),\\n                false\\n            );\\n            return true;\\n        } else if (_msgType == MSG_XCHAIN_LEND_XCHAIN_LOCK) { //@check\\n            _executeModule(\\n                uint8(ITOFT.Module.TOFTOptionsReceiver),\\n                abi.encodeWithSelector(\\n                    TOFTOptionsReceiverModule.mintLendXChainSGLXChainLockAndParticipateReceiver.selector, _toeComposeMsg\\n                ),\\n                false\\n            );\\n      //@audit miss return true\\n        } else {\\n            return false;\\n        }\\n    }\\n}\\n```\\n\\nAs mentioned above, because `_msgType == MSG_XCHAIN_LEND_XCHAIN_LOCK` does not return `true`, it always triggers `revert InvalidMsgType(msgType_);`
```\\ncontract mTOFTReceiver is BaseTOFTReceiver {\\n    constructor(TOFTInitStruct memory _data) BaseTOFTReceiver(_data) {}\\n\\n    function _toftCustomComposeReceiver(uint16 _msgType, address, bytes memory _toeComposeMsg)\\n        internal\\n        override\\n        returns (bool success)\\n    {\\n        if (_msgType == MSG_LEVERAGE_UP) { //@check\\n            _executeModule(\\n                uint8(ITOFT.Module.TOFTMarketReceiver),\\n                abi.encodeWithSelector(TOFTMarketReceiverModule.leverageUpReceiver.selector, _toeComposeMsg),\\n                false\\n            );\\n            return true;\\n        } else if (_msgType == MSG_XCHAIN_LEND_XCHAIN_LOCK) { //@check\\n            _executeModule(\\n                uint8(ITOFT.Module.TOFTOptionsReceiver),\\n                abi.encodeWithSelector(\\n                    TOFTOptionsReceiverModule.mintLendXChainSGLXChainLockAndParticipateReceiver.selector, _toeComposeMsg\\n                ),\\n                false\\n            );\\n// Add the line below\\n           return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n}\\n```\\n
`_msgType == MSG_XCHAIN_LEND_XCHAIN_LOCK` `TOFTOptionsReceiver.mintLendXChainSGLXChainLockAndParticipateReceiver()` unable to execute successfully
```\\n    function _lzCompose(address srcChainSender_, bytes32 _guid, bytes memory oftComposeMsg_) internal {\\n        // Decode OFT compose message.\\n        (uint16 msgType_,,, bytes memory tapComposeMsg_, bytes memory nextMsg_) =\\n            TapiocaOmnichainEngineCodec.decodeToeComposeMsg(oftComposeMsg_);\\n\\n        // Call Permits/approvals if the msg type is a permit/approval.\\n        // If the msg type is not a permit/approval, it will call the other receivers.\\n        if (msgType_ == MSG_REMOTE_TRANSFER) {\\n            _remoteTransferReceiver(srcChainSender_, tapComposeMsg_);\\n        } else if (!_extExec(msgType_, tapComposeMsg_)) {\\n            // Check if the TOE extender is set and the msg type is valid. If so, call the TOE extender to handle msg.\\n            if (\\n                address(tapiocaOmnichainReceiveExtender) != address(0)\\n                    && tapiocaOmnichainReceiveExtender.isMsgTypeValid(msgType_)\\n            ) {\\n                bytes memory callData = abi.encodeWithSelector(\\n                    ITapiocaOmnichainReceiveExtender.toeComposeReceiver.selector,\\n                    msgType_,\\n                    srcChainSender_,\\n                    tapComposeMsg_\\n                );\\n                (bool success, bytes memory returnData) =\\n                    address(tapiocaOmnichainReceiveExtender).delegatecall(callData);\\n                if (!success) {\\n                    revert(_getTOEExtenderRevertMsg(returnData));\\n                }\\n            } else {\\n                // If no TOE extender is set or msg type doesn't match extender, try to call the internal receiver.\\n                if (!_toeComposeReceiver(msgType_, srcChainSender_, tapComposeMsg_)) {\\n                  revert InvalidMsgType(msgType_);\\n                }\\n            }\\n        }\\n```\\n