A simpler approach: the seller lists an asset at a set price, any buyer can come buy it at that price. No bidding, no advanced matching.
function createListing(uint96 quantity, uint256 price) external override returns (bytes32);
function executeTrade(bytes32 listingId, uint96 tradeQuantity) external payable override;
function cancelListing(bytes32 listingId) external override;