Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add initial-values matrix parameter to Generic DID Parameters #84

Closed
wants to merge 8 commits into from
Closed

Add initial-values matrix parameter to Generic DID Parameters #84

wants to merge 8 commits into from

Conversation

csuwildcat
Copy link
Contributor

@csuwildcat csuwildcat commented Oct 22, 2019

This PR is intended to start the next phase of discussion around the needs highlighted in issue #70, regarding the ability to resolve DIDs for Methods that require a period of time before their inclusion/state has been propagated in an underling trust system (blockchain, ledger, etc.).


Preview | Diff

Copy link
Contributor

@peacekeeper peacekeeper left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a note that we're using lowercase terms now for everything..

index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
@peacekeeper
Copy link
Contributor

Wasn't the original suggestion that the value of this parameter would be a complete initial DID document? Are you now proposing that the value could be more flexible, e.g. anything that helps the DID to be resolved when otherwise that would not (yet) be possible? I think both are interesting ideas to explore!

@csuwildcat
Copy link
Contributor Author

csuwildcat commented Oct 22, 2019 via email

csuwildcat and others added 3 commits October 22, 2019 08:25
Co-Authored-By: Markus Sabadello <markus@danubetech.com>
Co-Authored-By: Markus Sabadello <markus@danubetech.com>
Co-Authored-By: Markus Sabadello <markus@danubetech.com>
@csuwildcat
Copy link
Contributor Author

I have connected my GitHub and W3C accounts, so the IPR flag on this should be good to go now.

@peacekeeper
Copy link
Contributor

Hey @csuwildcat you asked on today's 2019-11-05 DID WG call what's the next step for this. I think this is a good feature, but we haven't gotten much other feedback from the WG yet. If you don't mind I'd like to wait a bit longer, perhaps until we've had an opportunity to discuss matrix parameters during one of the upcoming WG calls..

index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
index.html Outdated Show resolved Hide resolved
csuwildcat and others added 4 commits November 26, 2019 15:09
Co-Authored-By: Markus Sabadello <markus@danubetech.com>
Co-Authored-By: Ted Thibodeau Jr <tthibodeau@openlinksw.com>
Co-Authored-By: Ted Thibodeau Jr <tthibodeau@openlinksw.com>
Co-Authored-By: Ted Thibodeau Jr <tthibodeau@openlinksw.com>
@OR13
Copy link
Contributor

OR13 commented Nov 26, 2019

Add examples from sidetree:

did:sidetree:<unique-portion>;initial-values=<encoded-original-did-document>

https://github.com/decentralized-identity/sidetree/blob/ae54238411245a55edeeda992e3dbcc6af1ffbc4/docs/protocol.md#unpublished-did-resolution

Per comments from WG Call

Copy link
Member

@msporny msporny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parameter feels like it's too generic, which will lead to interop issues. Can we make this more specific, with a more specific encoding?

</tr>
<tr>
<td>
<code>initial-values</code>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand why this is plural, does it support some sort of array semantics in the value property? If not, change to "initial-value".

<code>initial-values</code>
</td>
<td>
Some <a>DID methods</a> may require an interim period of time (e.g., a block
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What this paragraph says, and what was explained during the WG call today feel like two very different things. We shouldn't create generic parameters where DID Methods can put whatever they want to into the value... that will lead to bad interoperability. If this is going to be a base64 encoded value of the initial DID Document, then the property should be did-document. If it is a hash of the initial document, use a hashlink. If it is a link to the initial document, it should be document-link. The property should be more specific, with a specific encoding such that all methods implement it in the same way, if they choose to implement it.

Copy link
Contributor

@selfissued selfissued left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe that we should not merge this until we've determined whether there is actually consensus to resurrect the matrix parameter syntax at all. Less is more.

@csuwildcat
Copy link
Contributor Author

I am entirely fine without this PR, or matrix parameters, so long as the group provides me a mechanism to do what we need to do. Not doing so is unacceptable - we MUST have a means to do this, full stop. Provide me a way, or pull in a PR like this, those are your choices, folks.

@peacekeeper
Copy link
Contributor

I believe that we should not merge this until we've determined whether there is actually consensus to resurrect the matrix parameter syntax at all.

@selfissued In the CCG there was quite strong support e.g. for the service or the version-id and version-time parameters, and there are some clear use cases for additional parameters in the community (such as this one introduced by @csuwildcat). But since the topic is new for the WG, I agree it is valid to consider whether are not we want them at all. Do you perhaps want to raise a separate issue to discuss matrix parameters in general, so we can discuss this separately from any specific one?

@OR13
Copy link
Contributor

OR13 commented Dec 17, 2019

I think we should figure out how to actually use query params and then use them... I'm not clear on what is legal regarding path, query and fragments....

did:example:123?service=foo&path=/bar/baz#!/path/a/b?query=1&foo=2

Return of the hashbang?

@cboscolo
Copy link

I'd like to bring this conversation back to the initial-value matrix parameter.

Can we agree that given for a DID did:foo:abc;initial-value=xyz123 the DID subject is did:foo:abc and that the matrix parameter initial-value=xyz123 is used to help the DID method determine the DID Document to be returned during the window when the DID is being committed to a backing store?

But, ;initial-value=xyz123 is not intended to part of the unique DID did:foo:abc nor intended to introduce a secondary equivalence DID? (Even tho, looking up did:foo:abc;initial-value=xyz123 and did:foo:abc will return the same DID Document once it is written to chain and not having been updated.)

@peacekeeper
Copy link
Contributor

I'm not clear on what is legal regarding path, query and fragments....

The DID Core spec should not define or restrict in any way how DID developers can use path or query, in the same way how the base URI spec or e.g. the HTTP spec don't define specific paths or queries. Regarding the fragment, in the DID WG we cannot define how it works, since the MIME type of the resource, not the URI scheme, defines how the fragment works. The DID Resolution spec currently says that the path and query components may or may not be dereferencable in an application- or method-specific way, i.e. it leaves their use pretty much undefined and wide open.

Therefore, matrix parameters, not query parameters, are where we should define functionality that we think should be inherent to DID resolution itself, such as service selection, versioned DID documents, and in this case an initial value to be used for DID resolution.

did:example:123?service=foo&path=/bar/baz#!/path/a/b?query=1&foo=2

Uhh if people think matrix parameters are "complex", then what would you call this example? :)

@peacekeeper
Copy link
Contributor

But, ;initial-value=xyz123 is not intended to part of the unique DID did:foo:abc nor intended to introduce a secondary equivalence DID?

@cboscolo +1 to everything you said in your comment!

If you add a matrix parameter to a DID, then the resulting DID URL could but doesn't have to identify the same resource, in a similar way as e.g. https://website.com/ and https://website.com/index.html are different URLs but may return the same resource.

@TallTed
Copy link
Member

TallTed commented Dec 18, 2019

This may seem like a pedantic quibble, but I think it's necessary. Sloppy terminology use will slow our progress substantially, as arguments will arise about things that both/all sides already agree upon. I'm going to repeat some things here that most currently active participants already know, but later readers may not.

different URLs but may return the same resource

No. Different URIs (including URLs) may return the same representation of a resource. They never return the resource at all.

One representation might be returned for multiple resources for various reasons. And multiple URIs might refer to the same resource ("co-reference"), resulting again in an identical representation being returned.

Different URLs (being Locators) that co-reference the same resource are similar to filesystem links (without getting into the difference between symbolic and hard links).

Different URNs (being Names) that co-reference the same resource are similar to nicknames for a person ("Fred Third", "Frederick Jones III", "Freddy Three").

Different URIs (being Identifiers) that co-reference the same resource are similar to multiple names or locators for the same house ("third house on the left", "40 Main Street", "the Smith house", a hypothetical WKTliteral).

@OR13
Copy link
Contributor

OR13 commented Feb 7, 2020

I suggest we use a method specific matrix param for this, and close this PR / Issue.

@OR13
Copy link
Contributor

OR13 commented Mar 15, 2020

@csuwildcat we chose to use a method specific identifier for this, and did:peer / did:key might do the same as noted on:

The more PRs are open but not mergeable, the harder it is to focus reviews on things that might actually be mergeable. Are you opposed to closing this?

@csuwildcat
Copy link
Contributor Author

Given we will be able to use either method specific matrix params or URL params for this, I'm going to close this out to avoid relying on the whims of DID Core spec participants. There's a good chance people will wake up to the broad usefulness/necessity of this (in fact, many have since we opened this) across methods that rely on truly decentralized systems, but I'm happy for folks to take as long as necessary to arrive at a place of understanding. When that time comes, maybe we move it from method specific redundancy to a general param, with historical notes about why that occurred.

@csuwildcat
Copy link
Contributor Author

Closing this issue, as it isn't required that we have a Generic parameter (even if it may be a good idea). Instead, we can use parameters in Method-specific ways, and let the Generic question be assessed at a future date by opening a new Issue, if it warrants doing so.

@csuwildcat csuwildcat closed this Mar 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants