function doCreateEscrow(
        EscrowParams params
    ) internal returns (bool) {
        require(enableMake, "DESC2C is not enable");
        require(listTokens[params.tradeToken], "Token is not allowed");
        

        bytes32 _tradeHash = keccak256(
            abi.encodePacked(params.tradeId, params.tradeToken, params.buyer, params.seller, params.value, params.fee));
        bytes32 _invitationHash = keccak256(abi.encodePacked(_tradeHash, params.paymentWindowInSeconds, params.expiry));
        require(recoverAddress(_invitationHash, params.v, params.r, params.s) == signer, "Must be signer");
        require(block.timestamp < params.expiry, "Signature has expired");

        emit CreatedEscrow(params.buyer, params.seller, _tradeHash, params.tradeToken);
        return escrowData.createEscrow(params.tradeId, params.tradeToken, params.buyer, params.seller, params.value, 
        params.fee, params.paymentWindowInSeconds);
    }