The first version of ILP had a focus on HTLAs and assumed that the settlement ledger between any two nodes was using these AND that the condition and fulfillment used in the ILP payment was the same one used in each transfer on each intermediary ledger.
As a result the format of the ILP packet was very different and we also experimented with pre-payment protocols to do quoting and liquidity checks.
There were some experiments done to change this and ILP v2 and ILP v3 pretty much died before they really lived.
ILP v4 (the version we are currently working from) was born of the idea that we should abstract away the ledger and assume that any two peers on the network have “some” way to settle but that ILP doesn’t require that settlement ledgers use HTLAs because sometimes two peers trust each other or have some other enforcement mechanism that ensures if they exchange packets and create settlement obligations between one another then these will be honoured.
This also makes ILP MUCH faster as the flow of packets happens over-the-top of the ledgers/settlement systems and doesn’t wait for them lock up funds etc.
Given that an ILP packet can therefor be routed from sender to receiver very fast the idea of focusing on very small amounts became more viable and instead of burdening the protocol with quoting and liquidity measurement logic we focused on “penny switching”.
So ILPv4 is designed to work well if:
- The amounts in each packet are very small (the risk associated with a single packet taking an expensive path is limited so no need for quoting up front, also see how STREAM deals with costing a route).
- The transfer of packets is very fast (implying that nodes use short expiries and also reduce their risk)
Some projects that use ILP like RippleNet and Mojaloop are using ILPv1 style HTLAs in the payment flow because they are operated in environments where this makes sense (controlled ecosystems where reliable quotes and large packet values are possible).
What is interesting is that it is possible for ILPv4 to be used to stream small payments through nodes that settle using ILPv1-style payments.
The reality is that those ILPv1 systems can move to using ILPv4 packet formats easily. They can even send large payments in each packet and route the packets via the ledgers (Mojaloop is already doing this). Nothing is technically preventing this, however, if those packets are routed over the “open Interledger” they will likely be rejected as they won’t find a path through connectors that are prepared to route large packets or route packets with long expiries.
So, while ILPv1 and ILPv4 do have some technical differences the real differences are in the expected properties of the network (fast responses and small per packet amounts) which will result in packets being rejected if they have:
- Long expiries, and/or
- Large amounts