```\nfunction _createLock(\n    uint128 lockId,\n    address tokenAddress,\n    uint256 amount,\n    bytes32 recipient,\n    bytes4 destination\n) private returns (uint256, uint256, TokenInfo memory) {\n    require(amount > 0, "Bridge: amount is 0");\n    TokenInfo memory tokenInfo = tokenInfos[tokenAddress];\n    require(\n        tokenInfo.tokenSourceAddress != bytes32(0),\n        "Bridge: unsupported token"\n    );\n\n    uint256 fee = FeeOracle(feeOracle).fee(tokenAddress, msg.sender, amount, destination);\n\n    require(amount > fee, "Bridge: amount too small");\n\n    // Amount to lock is amount without fee\n    uint256 amountToLock = amount - fee;\n\n    // Create and add lock structure to the locks list\n    IValidator(validator).createLock(\n        lockId,\n        msg.sender,\n        recipient,\n        toSystemPrecision(amountToLock, tokenInfo.precision),\n        destination,\n        tokenInfo.tokenSource,\n        tokenInfo.tokenSourceAddress\n    );\n\n    emit Sent(\n        tokenInfo.tokenSource,\n        tokenInfo.tokenSourceAddress,\n        msg.sender,\n        recipient,\n        amountToLock,\n        lockId,\n        destination\n    );\n    return (amountToLock, fee, tokenInfo);\n}\n```\n