A lot of the current protocol draft is concerned with broadcasting the
network state (available credit on links, exchange rates, etc.)
through the trust network. Let's just forget this to start and use
HTTP, the most ubiquitous information distribution protocol. Using
HTTP has been proposed by several people, and I actually started
developing the protocol years ago with HTTP. It's not the most
elegant thing, but it's so established and easy to develop on top of,
that it makes sense as a starting place for people with finite time
and energy. And there are promising optimizations to HTTP developing,
such as SPDY, that we would automatically benefit from as they evolve.
HTTPS gives easy secure connections. We can use the existing
certificate authorities (including free CAs like StartSSL), as well as
support self-signed certs using notary systems like Perspectives:
http://perspectives-project.org/
We can actually use the existing Perspectives notary system, since it
works with HTTPS.
Go back to using JSON text for data, rather than binary protocol
buffers. It's just easier to work with.
Every Ripple server simply publishes the network state for its nodes,
and asks for updates directly from other servers as it needs. Then
the information is out there, and people can innovate aggregation
schemes or routing services as needed.
The main thing you lose over the current draft is the ability to
obscure your server's domain/IP address from anyone but your
connections. We should be able to integrate with TOR easily enough to
support this though (using the .onion TLD, or similar).
Nodes are identified by email-style <node...@host.com> identifiers,
or maybe a URL. Servers communicate by HTTP POST (or other HTTP
verbs).
Let's forget about setting up the connections (mutual-credit accounts)
for now, and assume that users input them manually. Better methods
for doing this can develop over time.
So the payer will need to initialize the transaction with the
recipient, and then POST promises forward along a route it pre-selects
from the published routing data. The recipient can release the
promises by POSTing a release back along the promise path(s).
For commit, there are two options:
1. The commit gets POSTed back along the promise path(s). IOUs get
POSTed forward as acknowledgement.
2. The commit is timestamped and published by an agreeable authority
(commit registry).
The is no need for IOUs with commit registries, since the promise
combined with the timestamped commit constitute proof of IOU. (One
could say that IOUs are just voluntary timestamps on the commit by the
party who is least motivated to issue it...) Also, the transaction is
atomic. For those reasons, I favour option 2. To start with,
intermediaries can just poll the registry and get the commit once it's
ready.
A simple optimization is to allow intermediaries to subscribe to a
commit, and be notified once it is ready (or once the time has expired
and it has failed to appear). Then they might subscribe to several
different sources, including the promise holder, to maximize the
chances of being notified in a timely fashion. One can imagine commit
distribution networks arising to archive commits and make them
available in many places... Or maybe that won't be necessary. But it
would be fairly simple with HTTP.
To me this seems like a reasonable way to start simply and build a
good protocol that is easy for others to work with and develop
further.
Ryan
Ryan
--
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To post to this group, send email to rippl...@googlegroups.com.
To unsubscribe from this group, send email to rippleusers...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rippleusers?hl=en.
Sincerely yours,
Apostolis Xekoukoulotakis
Multicast only seems important for broadcasting routing information,
which is quite independent from the transaction mechanism itself, so
it should be easy enough to add in later using whatever technology
seems best at the time. It is entirely possible for the transaction
mechanism to be built from HTTP on standard TCP, while the routing
broadcast is done with 0MQ or whatever.
Ryan
Ryan
--
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To post to this group, send email to rippl...@googlegroups.com.
To unsubscribe from this group, send email to rippleusers...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rippleusers?hl=en.
http://dreamsongs.com/RiseOfWorseIsBetter.html
> Maybe the REST part is an invalid assumption but if it was REST we'd be
> looking for a list of resources aka nouns residing that people signed in to
> a given server would have the right to manipulate.
>
That's right. In my experience the exact list of resources will
develop as the implementation progresses, and it's not worth worrying
too much about them to start. You can go around in circles for a long
time trying to get the nouns right, only to have to discard them
immediately when you start coding because of a million things you
hadn't considered.
One thing that seems important is to make sure the protocol is
versioned, so that we can make changes to the design after it's
released and not have servers getting confused if they are speaking
different versions.
> 2. Do nodes 'belong' to and have a 'definitive source' at a particular
> server or is the whole idea that people, with appropriate key (assuming some
> sort of agreed notary service thing) can publish updates to info beloning to
> that node to/on any server and then have that propagate out.
>
> That is, the first/simple way is that only one server is able to make
> definitive statements about a given node and any data about that node or its
> immediate edges is just 'cached' elsewhere.. the more complex/more
> distributed? way is that any server can receive updates appropriately
> signed and somehow all other servers when receiving data from those servers
> are able to check cryptographically for themselves that the statements on
> other servers (that they might be updating) are valid/signed information
> about nodes which they may already have.
>
Routing information should be signed with the node's key to avoid
spoofing, so it doesn't necessarily have to originate at the node's
transaction server.
> 3. Generally speaking do we aim for a system where every server has a
> complete copy of all the data on the network - but no server is 'definitive'
> for the whole network, or a situation where each server only has a copy of
> the data relevant to them locally, with caches of other data it may need for
> route calculation purposes.
>
I don't see much difference between the two. Routing data will always
potentially be stale for nodes on other servers, so it's all a big
cache, and no one knows whether they really have everything, or the
most up-to-date copy. It's all just hints in the end, and servers
will store as much as they think is useful. A simple initial
implementation will just store everything, and refresh it
periodically.
One thing I'm not sure about is whether servers, when asked, should
relay routing info they have about nodes they don't host. It's
probably a pretty simple optimization, but not strictly necessary at
first, so I'd probably leave it out to start for the sake of releasing
*something*...
Ryan
Ryan
--
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To post to this group, send email to rippl...@googlegroups.com.
To unsubscribe from this group, send email to rippleusers...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rippleusers?hl=en.
On Wed, Apr 25, 2012 at 7:08 PM, Seth de l'Isle wrote:
The problem with this is that B can just keep the five hours from C
and not pass them on to A, and no one can prove he did it, since no
one knows who the intermediaries actually are. B can just say it was
someone else further on. That's why the commit signal either has to
propagate backwards from C, so that B sends obligations before
receiving any, or be issued by some agreed-upon commit-registry
authority.
> So how about if A sends a secret to B along with the request for payment,
> and hands that secret to C, then C hands the secret to A as proof that the
> trust relationship has been worked out? A could deliver the goods upon
> receipt of that secret since A trusts B to be responsible for getting a
> promise back.
>
Unfortunately, that doesn't help. If I'm B, I can still keep all the
hours from C without passing them to A, and no one can prove what I
did.
--
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To post to this group, send email to rippl...@googlegroups.com.
To unsubscribe from this group, send email to rippleusers...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rippleusers?hl=en.
There's no requirement for A to trust B. A might just have issued
IOUs to B. Or A might only trust that he can sue B if he can prove he
failed to live up to some legal agreement. But he needs to be able to
prove B has cheated.
Might I suggest a different name, since Rivulet is already being used:
For all the reasons I gave earlier (and more), I believe this is a
much more stable IOU-passing order:
1. B -> A
2. C -> B
Any plans to implement it that way? What's next?
--
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rippleusers/-/7Ty-kO4-umwJ.
To post to this group, send email to rippl...@googlegroups.com.
To unsubscribe from this group, send email to rippleusers...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rippleusers?hl=en.
The problem with this is that B can just keep the five hours from C
and not pass them on to A, and no one can prove he did it, since no
one knows who the intermediaries actually are. B can just say it was
someone else further on. That's why the commit signal either has to
propagate backwards from C, so that B sends obligations before
receiving any, or be issued by some agreed-upon commit-registry
authority.
On Mon, May 28, 2012 at 1:11 PM, Seth de l'Isle
--
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To post to this group, send email to rippl...@googlegroups.com.
To unsubscribe from this group, send email to rippleusers...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rippleusers?hl=en.