owned this note
owned this note
Published
Linked with GitHub
# Rebase VCs
## Priorization
First, defining verification flows + test vectors for:
1. Github
2. Discord
- ...
## Verification Flows
The goal of a Rebase verification flow is to provide the user with an attestation which is verified by a third-party witness that the user owns a certain identifier on a target system (e.g., Github, Discord, DNS).
To allow the witness to attest that the user owns a target identifier, the user typically needs to publish a `statement` that proves they own the target identifer on the target which is linked to their user identifier (e.g., DID, Ethereum Account). The witness would then verify the `statement` and issue a W3C Verifiable Credential and includes `evidence` that was used for verification (e.g., URI to Twitter post).
The `statment` has another function which is to give implicit consent to publish the content on the target system. It also tells the user why something is published. This is important for GDPR reasons.
A `statement` is a quadruple comprising user identifier, target system identifier, human-readable message, and a target system identifier name.
Internationalization of the `statement` is out of scope for now.
**Example:**
"I am attesting that this GitHub handle {`awoie`} is linked to the {Ethereum Address} {`0x...`}."
The generic verification flow is as follows:
- User creates and publishes `statement` on target system.
- Witness verifies `statement` and linkage.
- Witness issues a W3C VC with an `evidence` property that contains information on what and how it was verified, so other witnesses can do the verification themselves. The W3C VC contains the witness' issuer identifier and is signed by the witness.
- Witness provides the W3C VC to the user. This is out of scope of Rebase.
The user can then provide the W3C VC to verifying parties. A verifier would need to trust the witness but can use the `evidence` material to verify the witness was genuine. This allows the verifier to avoid registering with third-party platforms to for example use their API and to reduce implementation complexity and costs.
## Test Vectors
### Discord
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"sameAs":"https://schema.org/sameAs",
"DiscordVerification":{
"@id":"https://rebase.xyz/context/DiscordVerification",
"@context":{
"@version":1.1,
"@protected":true,
"url":"https://schema.org/URL"
}
},
"DiscordVerificationMessage":{
"@id":"https://tzprofiles.com/DiscordVerificationMessage",
"@context":{
"@version":1.1,
"@protected":true,
"handle":"https://tzprofiles.com/handle",
"timestamp":{
"@id":"https://tzprofiles.com/timestamp",
"@type":"https://www.w3.org/2001/XMLSchema#dateTime"
},
"channelId":"https://tzprofiles.com/DiscordChannelId",
"messageId":"https://tzprofiles.com/DiscordMessageId"
}
}
}
],
"evidence":{
"type":[
"DiscordVerificationMessage"
],
"handle":"{discordHandle}",
"messageId":"{discord_message_id}",
"channelId":"{discord_channel_id}",
"timestamp":"2010-01-01T19:23:24Z"
},
"issuanceDate":"2010-01-01T19:23:24Z",
"id":"urn:uuid:{uuid_v4}",
"type":[
"VerifiableCredential",
"DiscordVerification"
],
"credentialSubject":{
"id":"did:pkh:...",
"sameAs":"urn:discord:{discord_handle}",
"issuer":"did:web:..."
},
"proof":{
...
}
}
```
### DNS
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"sameAs":"https://schema.org/sameAs",
"DnsVerification":"https://tzprofiles.com/DnsVerification",
"DnsVerificationMessage":{
"@id":"https://tzprofiles.com/DnsVerificationMessage",
"@context":{
"@version":1.1,
"@protected":true,
"timestamp":{
"@id":"https://tzprofiles.com/timestamp",
"@type":"https://www.w3.org/2001/XMLSchema#dateTime"
},
"dnsServer":"https://tzprofiles.com/dnsServer"
}
}
}
],
"evidence":{
"type":[
"DnsVerificationMessage"
],
"dnsServer":"{dnsServer}",
"timestamp":"2010-01-01T19:23:24Z"
},
"issuanceDate":"2010-01-01T19:23:24Z",
"id":"urn:uuid:{uuid_v4}",
"type":[
"VerifiableCredential",
"DnsVerification"
],
"credentialSubject":{
"id":"did:pkh:...",
"sameAs":"dns:{domain}"
},
"issuer":"did:web:...",
"proof":{
...
}
}
```
### Github
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"sameAs":"https://schema.org/sameAs",
"GitHubVerification":{
"@id":"https://tzprofiles.com/GithubVerification",
"@context":{
"@version":1.1,
"@protected":true,
"url":"https://schema.org/URL"
}
},
"GitHubVerificationMessage":{
"@id":"https://tzprofiles.com/GitHubVerificationMessage",
"@context":{
"@version":1.1,
"@protected":true,
"timestamp":{
"@id":"https://tzprofiles.com/timestamp",
"@type":"https://www.w3.org/2001/XMLSchema#dateTime"
},
"gistId":"https://tzprofiles.com/gistId",
"gistVersion":"https://tzprofiles.com/gistVersion",
"handle":"https://tzprofiles.com/handle"
}
}
}
],
"evidence":{
"type":[
"GithubVerificationMessage"
],
"handle":"{github_username}",
"gistVersion":"{gist_version}",
"gistId":"{gist_id}",
"timestamp":"2010-01-01T19:23:24Z"
},
"issuanceDate":"2010-01-01T19:23:24Z",
"id":"urn:uuid:{uuid_v4}",
"type":[
"VerifiableCredential",
"GitHubVerification"
],
"credentialSubject":{
"id":"did:pkh:...",
"sameAs":"https://github.com/{github_handle}"
},
"issuer":"did:web:...",
"proof":{
...
}
}
```
### Instagram
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"sameAs":"https://schema.org/sameAs",
"InstagramVerification":{
"@id":"https://tzprofiles.com/InstagramVerification",
"@context":{
"@version":1.1,
"@protected":true,
"url":"https://schema.org/URL"
}
},
"InstagramVerificationPublicPost":{
"@id":"https://tzprofiles.com/InstagramVerificationPublicPost",
"@context":{
"@version":1.1,
"@protected":true,
"handle":"https://tzprofiles.com/handle",
"timestamp":{
"@id":"https://tzprofiles.com/timestamp",
"@type":"https://www.w3.org/2001/XMLSchema#dateTime"
},
"postUrl":"https://tzprofiles.com/postUrl"
}
}
}
],
"evidence":{
"type":[
"InstagramVerificationPublicPost"
],
"handle":"{instagram_handle}",
"postUrl":"{instagram_post_url}",
"timestamp":"2010-01-01T19:23:24Z"
},
"issuanceDate":"2010-01-01T19:23:24Z",
"id":"urn:uuid:{uuid_v4}",
"type":[
"VerifiableCredential",
"InstagramVerification"
],
"credentialSubject":{
"id":"did:pkh:...",
"sameAs":"https://instagram.com/{instagram_handle}"
},
"issuer":"did:web:...",
"proof":{
...
}
}
```
### Twitter
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"sameAs":"https://schema.org/sameAs",
"TwitterVerification":{
"@id":"https://tzprofiles.com/TwitterVerification",
"@context":{
"@version":1.1,
"@protected":true,
"url":"https://schema.org/URL"
}
},
"TwitterVerificationPublicTweet":{
"@id":"https://tzprofiles.com/TwitterVerificationPublicTweet",
"@context":{
"@version":1.1,
"@protected":true,
"handle":"https://tzprofiles.com/handle",
"timestamp":{
"@id":"https://tzprofiles.com/timestamp",
"@type":"https://www.w3.org/2001/XMLSchema#dateTime"
},
"tweetId":"https://tzprofiles.com/tweetId"
}
}
}
],
"evidence":{
"type":[
"TwitterVerificationPublicTweet"
],
"handle":"{twitter_handle}",
"postUrl":"{twitter_post_url}",
"timestamp":"2010-01-01T19:23:24Z"
},
"issuanceDate":"2010-01-01T19:23:24Z",
"id":"urn:uuid:{uuid_v4}",
"type":[
"VerifiableCredential",
"TwitterVerification"
],
"credentialSubject":{
"id":"did:pkh:...",
"sameAs":"https://twitter.com/{twitter_handle}"
},
"issuer":"did:web:...",
"proof":{
...
}
}
```
### Ethereum
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"EthereumVerification":{
"@id":"https://tzprofiles.com/EthereumVerification",
"@context":{
"@version":1.1,
"@protected":true,
"sameAs":"https://schema.org/sameAs",
"wallet":"https://schema.org/Text"
}
},
"EthereumAddressControl":{
"@id":"https://tzprofiles.com/EthereumAddressControl",
"@context":{
"@version":1.1,
"@protected":true,
"sameAs":"https://schema.org/sameAs",
"address":"https://schema.org/Text"
}
}
}
],
"issuanceDate":"2010-01-01T19:23:24Z",
"id":"urn:uuid:{uuid_v4}",
"type":[
"VerifiableCredential",
"EthereumAddressControl"
],
"credentialSubject":{
"address":"{eth_address}",
"sameAs":"{assoc_address}"
},
"issuer":"did:pkh:eth:{eth_address}",
"proof":{
... EIP712 ...
}
}
```
### Personal Profile
```json=
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"alias":"https://schema.org/name",
"description":"https://schema.org/description",
"website":"https://schema.org/url",
"logo":"https://schema.org/logo",
"BasicProfile":"https://tzprofiles.com/BasicProfile"
}
],
"id":"urn:uuid:{uuid}",
"issuer":"did:pkh:...",
"issuanceDate":"2010-01-01T19:23:24Z",
"type":[
"VerifiableCredential",
"BasicProfile"
],
"credentialSubject":{
"id":"did:pkh:...",
"alias":"{alias}",
"description":"{description}",
"website":"{website}",
"logo":"{logo}"
},
"proof":{
...
}
}
```
### Telegram
TBD
### Discourse
TBD