function createListing(address tokenContractAddress, uint256 price, uint256 allowance, uint256 dateEnds, uint256 salt) external {
        require(price > 0, "price less than zero");
        require(allowance > 0, "allowance less than zero");
        require(dateEnds > 0, "dateEnds less than zero");
        require(getBalance(tokenContractAddress, msg.sender) >= allowance, "balance less than allowance");
        bytes32 listingId = getHashInternal(tokenContractAddress, price, allowance, dateEnds, salt);
        Listing memory listing = Listing(msg.sender, tokenContractAddress, price, allowance, now, dateEnds);
        listings[listingId] = listing;
        emit ListingCreated(listingId, tokenContractAddress, price, allowance, now, dateEnds, msg.sender);

    }