Now that segwit is locked in, I'm thinking about designing some topology on top of the current lnd software.
I imagine a wallet software where the wallet software company is a hub that has an arbitrarily large amount of funds to dedicate to being locked up in payment channels. So the user downloads a wallet, and whenever the user requests one of his addresses to be displayed for deposit or payment, he's actually shown a payment channel multisig. He doesn't know or care about this, it's just how the wallet operates.
So the wallet is a spoke that connects to the hub run by the wallet software company, which also maintains very large (in value) payment channels to various other hubs run by exchanges and large merchants and such.
Now, our user wants to make a payment to some other user who is connected some hub somewhere else. For example, Alice and Bob have a channel, Bob and Charlie have a channel, and Charlie and Dave have a channel. So when Alice wants to pay Dave, Alice pays Bob who pays Charlie who pays Dave. Bob and Charlie are hubs in this example, and Alice and Dave are users -- although it really doesn't matter.
My question is -- is there a way for Alice to be sure that Bob will pay Charlie and Charlie will pay Dave? Alice only has a channel with Bob, so if she pays Bob, Bob can just keep the money. How can Alice be assured that Bob will pay Charlie (and Charlie will pay Dave), and be sure those transactions are committed to before Alice makes the payment to Bob?
(All of this is presumably off-chain since every player is involved in a current open payment channel with each of his neighbors.)
Are there current solutions to this that I'm just not aware of, or is this a problem I need to figure out how to solve?