Great questions!
The general assumption is that both parties independently track their view of the (net) balance between them and use some kind of external accounting system to settle. See this thread for the discussion on the main settlement options: Should the main Interledger UX use payment channels, on-ledger settlement, or hosted accounts?
Routing loops are possible if their routing tables are configured to point back to one another for a particular destination. Each time a packet is forwarded, some time is subtracted from the expiry, which at least makes it so that the packet won’t travel in a loop forever. For more details on how to avoid loops, you might want to ask in this thread: How does routing work in Interledger?
The execution condition (also sometimes referred to as just the condition) is just the SHA 256 hash digest of the fulfillment. See the Interledger Protocol V4 spec for more details.
Connectors keep the previous hop in memory. Thus far, most implementations use a Promise or a Future (whatever async primitive the language uses) to map the incoming request to the outgoing request and response. A connector implementation could use a different design though.
If the receiver doesn’t trust the connector, they should use a payment channel for settlement and require payment channel updates for every packet. In this way, the payment would almost immediately be guaranteed by the underlying ledger/blockchain.
There is no single expiration date. Imagine that each time the packet is forwarded, it’s a completely separate packet with a different arrangement between the parties. If I send you a packet that expires in 20 seconds, what I’m saying is “I agree to pay you if and only if you give me a fulfillment that hashes to that condition within the next 20 seconds”. How you get that, including where you might send another packet or what that packet might look like, don’t matter at all to me. (A really important part of Interledger is how it localizes these relationships to the bilateral connections)
A payment channel is like a temporary escrow account on a blockchain. The payment channel is created by at least one of the parties submitting a transaction on the blockchain to deposit funds into the shared account. Then, the two parties can instantaneously “pay” one another by sending signed transactions or updates to each other (not to the blockchain) that assign a greater portion of the escrowed funds to the other party. This can be repeated any number of times without touching the blockchain. When one or both of the parties wants to close the payment channel and withdraw their funds, they will then submit a second transaction to the blockchain to do so.
Sounds correct to me.
Small correction: STREAM is now the recommended transport protocol to use, rather than PSK2. Implementations of SPSP SHOULD automatically use STREAM now.
That’s an implementation detail so not something that would necessarily be adopted across the board. Want to start a thread in the Implementations category about which database technologies to use?