Imagine you have a smart contract that accepts all forms of ERC20s. You want users to call a function by which they will send you their ERC20s and in exchange receive a greeting.
Technically we can do that by implementing the famous:
function transferFrom(address from, address to, uint tokens) public returns (bool success);
The problem with transferFrom is that it requires the user to first call
function approve(address spender, uint tokens) public returns (bool success);
How can we avoid the approve part? I can see that someone proposes ERC223 but I'm not sure how that would help and it's unclear. I was thinking at wallets like MetaMask and how they handle token transfers but I think they just call transfer();