The payment channel
A deposit by the payer, locked in the contract for one provider and one token. Money flows one way. The id is computable offline:
channelId = keccak256(abi.encode(payer, provider, token))
The payer can take back what wasn't spent — after a 24-hour window that lets the provider collect first.