Re: failures during the preparation phase (universal mode)

If I'm understanding it correctly, ILP is constraining the type of routing
that can be used by conforming implementations. I'm not making any
judgements as to which routing methods are best, but simply pointing out
that ILP allows only one choice. Right now, since the sender MUST know the
entire route to conform with ILP, *source routing* is the only choice.
Source routing is a term for protocols which have the sender specify the
entire route in advance. Source routing is a fine way to route, and will
probably work great for the basic use case you're looking at, with a
smaller number of financial institutions and connectors that have a lot of
liquidity.

The point I'm trying to make is that if you were to remove the proposal
phase from the specification completely, it would allow systems
implementing ILP to use other routing methods while still conforming to
ILP. Five Bells, and other systems, can definitely still continue to use
source routing and the proposal phase, I just think it should be specified
outside of ILP.

Evan, as for the two points you make, I'll speculate about how other
routing protocols would address them in a separate email. However, I'm not
trying to say that source routing isn't the best solution for Ripple, just
pointing out that ILP could be more general, and might not need to force
every implementation to use source routing.

On Tue, Mar 15, 2016 at 9:51 AM, Evan Schwartz <evan@ripple.com> wrote:

> As you point out, routing could be handled by each successive node, though
> I would see two potential issues with that approach.
>
> First, when the sender constructs the full path, they know whether they
> want a fixed source or destination amount and can quote it accordingly. If
> they are instead going to pass off the request to the next intermediary,
> and let's say they wanted a fixed destination amount, how would they
> determine the source amount? It might work if each node could also provide
> a quote of how much it would cost to route the payment, but I'm not sure
> how much better this would be than the current setup. Definitely worth
> discussing more though.
>
> The second, somewhat related, issue that will come up with payment routing
> but not IP packet routing is that of fees. If each node takes some kind of
> fee there's a strong incentive to get payments to flow through you. If the
> sender is picking the path, they obviously have an incentive to find the
> best path possible. The other nodes will have an interest in having the
> sender (or receiver) pay as much as possible. Anybody have ideas about how
> to do the node-by-node routing such that it still gives the sender the best
> deal?
>
> On Fri, Mar 11, 2016 at 12:16 PM, Jehan Tremback <jehan.tremback@gmail.com
> > wrote:
>
>> > IMHO that makes the preparation phase a phase of trial and error, much like
>> -- presumably -- the proposal and preceding path finding phases. If so,
>> why bother differentiating between these? Where is the necessity for a
>> more complex multi phase protocol? Complexity killed the cat as they say
>> so its necessity should be well-reasoned.
>>
>> I'm guessing that the intention there is that the proposal phase is
>> initiated by the sender, while the prep phase is done one hop at a time?
>> This would seem to assume that the route will be determined by the sender.
>>
>> Maybe I'm wrong, but are you recommending the nested transactions as a
>> substitute for the direct connection of the proposal phase?
>>
>> Why not just eliminate the sender's knowledge of the entire route? Does
>> the sender know the entire route that a packet is going to take on the
>> internet?
>>
>> If there is going to be some kind of source routing in five bells that's
>> fine, but it seems weird to integrate it that deeply into Interledger, a
>> low-level transmission protocol.
>>
>> Like this: Stefan escrows a payment to me on our ledger that I can only
>> redeem with some cryptographic condition. At this point, I want to know who
>> I need to escrow a payment to to get the fulfillment to that condition.
>>
>> - With the current ILP proposal phase, I was sent the information on how
>> to get the fulfillment by the payment sender, who presumably knew the
>> network map and ran a pathfinding algorithm.
>>
>> - With RPR <https://github.com/jtremback/reactive-payment-routing>, that
>> information is found during a routing phase, during which the receiver
>> sends out a routing message that floods the network.
>>
>> - With some hypothetical BGP-like payment routing protocol, that
>> information would come from a routing table.
>>
>> Are the last 2 routing methods possible with the ILP proposal phase? I
>> think not, maybe I'm wrong.
>>
>> On Fri, Mar 11, 2016 at 11:24 AM, Stefan Thomas <stefan@ripple.com>
>> wrote:
>>
>>> > The originator will initiate another preparation phase with the same
>>> connectors? Or another proposal? Or find different connectors? I guess all
>>> the options are open.
>>>
>>> Yes, these are all options.
>>>
>>> > IMHO that makes the preparation phase a phase of trial and error,
>>> much like -- presumably -- the proposal and preceding path finding
>>> phases. If so, why bother differentiating between these? Where is the
>>> necessity for a more complex multi-phase protocol? Complexity killed
>>> the cat as they say so its necessity should be well-reasoned.
>>>
>>> Great point. As you pointed out on IRC, the Nested Transfers [1] spec is
>>> essentially a realization of your idea here.
>>>
>>> [1]
>>> https://docs.google.com/document/d/1zTLQLBx0p6-Ds9Ki8nCaVBdXUK4mbJZDQOaz83n6VY8/edit
>>>
>>> On Mon, Nov 23, 2015 at 2:24 AM, Xavier Vas <xavier@tr80.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I'd like some clarification on the preparation phase in universal mode.
>>>> I assume a connector can, when receiving a preparation message from a
>>>> previous connector, deny performing the escrow on its outgoing ledger
>>>> and instead pass an error message back, or just let the escrow timeout
>>>> on its incoming ledger expire. Either way, this will percolate back to
>>>> the payment originator and the payment has failed its preparation phase.
>>>>
>>>> Reasons for failing to execute the escrow on behalf of a connector could
>>>> be technical problems etc. but most likely, I assume, not having enough
>>>> funds at its disposal to execute the escrow. This can happen in spite of
>>>> a confirmation during the proposal phase, as confirming funds to be
>>>> available does not mean setting aside said funds for a later
>>>> transaction. It can at best be a good guess that involves parameters
>>>> such as funds available, rate of transactions processed, typical delays
>>>> between proposal and preparation phases and -- most importantly --
>>>> likelihood of customers actually following up a proposal with an actual
>>>> transaction, because they can propose several paths and only execute
>>>> one, if even, e.g. the one with the lowest fees.
>>>>
>>>> The latter I guess would be like airline passengers booking seats on
>>>> several flights and only showing up for one at best. Airlines compensate
>>>> for this behavior by overbooking their flights, which then in turn may
>>>> lead to booked passengers being turned down. Booking a seat is the
>>>> proposal phase and showing up the preparation phase of the transaction.
>>>>
>>>> Either way, if a payment fails during the preparation phase, what then?
>>>> The originator will initiate another preparation phase with the same
>>>> connectors? Or another proposal? Or find different connectors? I guess
>>>> all the options are open. The next attempt could also, conceivably, fail
>>>> again then.
>>>>
>>>> IMHO that makes the preparation phase a phase of trial and error, much
>>>> like -- presumably -- the proposal and preceding path finding phases. If
>>>> so, why bother differentiating between these? Where is the necessity for
>>>> a more complex multi-phase protocol? Complexity killed the cat as they
>>>> say so its necessity should be well-reasoned.
>>>>
>>>> Thanks
>>>>
>>>> Xav
>>>>
>>>>
>>>>
>>>>
>>>
>>
>
>
> --
> Evan Schwartz | Software Architect | Ripple
> [image: ripple.com] <http://ripple.com>
>

Received on Wednesday, 16 March 2016 18:19:28 UTC