The SushiSwap exchange allows users to swap any ERC20 token into any other ERC20 token through automated liquidity pools.
Example of the Swap page.
The liquidity provided to the exchange comes from Liquidity Providers ("LPs") who stake their tokens in "Pools". In return they get SLP (Sushiswap Liquidity Provider) tokens, which can also be staked in the "Farm".
When users make a trade on the exchange they pay a 0.3% trade fee.
0.25% of this trade fee goes to the Liquidity Providers who provide liquidity for that pool. It is added to the pool balance. If previously there were 100 SLP tokens representing 100 ETH and 100 SRM each token would be worth 1 ETH & 1 SRM. If one user trade 10 ETH for 10 SRM, and another traded 10 SRM for 10 ETH, then there would now be 100.025 ETH and 100.025 SRM. This means each LP token would be worth 1.00025 ETH and 1.00025 SRM now when it is withdrawn.
The remaining portion of the trade fee paid goes to a pool called SushiBar. The SushiBar contract collects the fees from all the pools, and when the reward distribution command is called, it then sells all the fees turning them into Sushi (via SushiSwap) That new Sushi is divided up among the users in the xSushi pool. When those users withdraw their xSushi it will be worth more Sushi than when they put in from the distribution.