Re: A Survey of ILP Account Identifiers?

Stefan, thanks for your feedback on this.  It was very helpful, and I've
finally gotten some time to incorporate it (your feedback) into my GitHub
identifier survey page for posterity.

Currently, the page is intended to provide context/background for ILP
identifiers that I've come across.  However, if anyone feels like I should
add additional details or entirely new sections (per the other discussion
in this thread), please feel free to suggest additional entries.

Thanks,
david


On Wed, Dec 7, 2016 at 3:04 PM Stefan Thomas <stefan@ripple.com> wrote:

Hey David,

That's awesome, thanks for putting together this write-up. I want to
contribute by explaining how I think about the identifiers and hopefully
that will help clarify things a bit further.

Specifically, I think it's important to point out that each of the
identifier types corresponds to a different layer in the protocol stack.
(SPSP is the highest layer - application layer, ILP is below that -
internetworking layer and Five Bells is below that - ledger layer.)

1. ILP Address

Used by: Interledger Protocol (ILP)
Used for: Routing payments to the correct destination
Equivalent in the data world: IP Address

Example: ilp:us.usd.nexus.stefan

The ILP Address is a low-level identifier used by ILP Connectors to forward
a payment to the intended destination. They're designed such that accounts
that are close to each other in the ILP topology tend to have common
prefixes, which will allow connectors to simplify their routing tables.

Our experience so far is that the most confusing thing about ILP Addresses
is that they are ASCII characters, whereas IP Addresses are just numbers.
Many people have interpreted that to mean that ILP Addresses are
user-facing. They are not! They are similarly ephemeral and low-level as IP
Addresses, and a user should never see one. They are used for routing and
nothing else.

By convention, they consist of a country code, one or more asset
identifiers, one or more ledger identifiers, one or more account
identifiers and zero or more subject identifiers  (e.g. invoice ID, etc.).
An ILP Address essentially specifies which account (in an accounting sense)
a payment should be delivered to. It goes from less specific to more
specific, so to give an extreme example:

A payment to:

ilp:us.usd.nexus.acme.commercial.rnd.vanderbilt.5db6a086-35cf-4944-94c8-df0377c63e8c

Would be a payment to:

- Country: Some account under US jurisdiction
- Asset: Denominated in USD
- Ledger: With USD backed up by "nexus"
- Subledger: On behalf of "acme" corporation
- Subledger: For its "commercial" activities
- Subledger: In the "rnd" department
- Account: For the "vanderbilt" project
- Subject: Related to incident "5db6a086-35cf-4944-94c8-df0377c63e8c"

Note that the scheme is meant to be very flexible and it doesn't matter if
people use very different schemas as long as:

- Ledgers with shared prefixes tend to be close together in the liquidity
graph
- Prefixes of subledgers start with the prefix of their parent ledger

2. SPSP Address

Used by: Simple Payment Setup Protocol (SPSP)
Used for: Permanently identifying a real-world payment destination (a user
account, an invoice) that is associated with rich meta-data
Equivalent in the data world: Email Address

Example: stefan@nexus.justmoon.com

The SPSP Address is a user-facing identifier for quickly and easily
referencing an account. Using the SPSP protocol, an SPSP address can be
resolved into a set of rich metadata which specifies the types of payments
that are possible to do with that destination.

Some use case examples include:

- bob@acme.com is Bob's account at ACME. SPSP clients would be able to get
Bob's name and avatar (if Bob chose to make that information public) and
submit a message to Bob to go along with the payment. They would also be
able to learn about limits - for instance, Bob's banks has a rule that he
can't be sent more than 100 USD at once.

- 138591359@amazon.com could be a specific Amazon invoice. SPSP clients
would be able to ensure that the invoice can't be paid twice by accident,
can't be overpaid and even provide the user with links to things like order
status etc.

3. Five Bells Account URI

Used by: Five Bells Ledger API, Common Ledger API (proposed)
Used for: Identifying an account on a ledger
Equivalent in the data world: MAC Address

Example: https://nexus.justmoon.com/ledger/accounts/stefan

The Five Bells Account URI is the identifier used by Five Bells ledgers and
their clients to refer to accounts.

Note that different types of ledgers will have different ways to refer to
accounts. Ripple, for instance, refers to accounts with a URI like
ripple:rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn. For Bitcoin, it is:
bitcoin:12A1MyfXbW6RhdRAZEqofac5jCQQjwEPBu. In other words these
identifiers are not standardized by ILP and are totally up to the specific
ledger protocol.

- Stefan

On Sun, Dec 4, 2016 at 10:57 AM David Fuelling <dfuelling@sappenin.com>
wrote:

Hey All,

There seems to be several different ways to define the format and
characteristics of an ILP Ledger Account identifier (e.g., ILP Address,
email address, URL, etc).

For me, this has led to some confusion as I've tried to reason about when
and where to use which style of identifier.  So, I created the following
wiki page to try to and collect my thoughts and formalize my understanding
of these different proposed identifiers, when to use them, and why:

https://github.com/fluid-money/ilp-connector-java/wiki/A-Survey-of-Interledger-Account-Identifiers

While I feel like this has clarified some thing for me, it has prompted a
few more questions, which I tried to outline in the last section called
"FAQ" -- I provided some strawman answers and counter-answers in there, but
I'm curious if anyone has input/opinions/clarifications/corrections about
what I've put together overall.  Feel free to share your thoughts, and if
there's any interest I'd be happy to move this page over to the Interledger
project on Github if people find it useful.

Thanks,
david

Received on Monday, 30 January 2017 16:25:46 UTC