---
# System prepended metadata

title: V2 Introduction

---

# V2 Introduction
In this doc, we'll introduce the products, the product concepts, and the technical concepts for our next platform

# Products

## SDK
A Trinsic SDK available in most major programming languages and frameworks. Initial frameworks: .Net, Node, Python, React Native, Android, iOS

## Docs
An interactive docs site for people to test out using the API and run through demos.

Maybe: a CLI

# Product Concepts
## Provider Service
```plantuml
package "Product Concepts" #FFFFFF {
    class Registry {
      + Id
      + List<Organization>
      + CRUDL()
    } 
    
    class Organization {
        + Id
        + Name
        + List<Members>
        + Wallet
        + List<CredentialTemplate>
        + List<PresentationTemplate>
        + CRUDL()
        + InviteMember()
    }
        
    class CredentialTemplate {
      + Id: string
      + Name: string
      + Types: string[]
      + Properties: URI | JSON
      + Configs: JSON
      + CRUDL()
    }
    
    class PresentationTemplate {
      + Id: string
      + Name: string
      + Attributes: List<Attributes>
      + CRUDL()
    }
    
    class Attribute {
      +Id: string
      +Name: string
      +Type: enum
      +CRUDL()
    }
}
```
## Other Services
```plantuml
  
  package IssuerService {
      class Credential {
        + Issuer
        + CredentialTemplateId
        + AttributeValues
        + State
        + issuanceDate
        + expirationDate
      }
  }
  
  package VerifierService {
    class Presentation {
        + VerifierId
        + PresentationTemplateId
        + VerifiedData
        + State
      }
  }
  
  package HolderService {
    class Individual {
      + Id
      + Name
      + ContactMethod
      + Wallet
    }
  }
  
  class Wallet {
     + Id
     + List<Roles>
     + List<Credentials>
     + List<Presentations>
     + List<Contacts>
   }
```
Now we'll walk through Alice getting a vaccination and proving it to her company. We'll show this from a provider's perpective. 

## Provider sets up ecosystem
Bob wants to create an ecosystem to exchange verifiable credentials, so he signs up with Trinsic.
We help him set up a set of credential and presentation templates. If they want a new credential template, we'll help them create one.
```javascript
provider.credentialTemplates.create([{
  name: "Vaccination Credentials",
  attributes: [
      {
        context: "https://example.org",
        type: ["Person", "Verifiable Credential"],
        properties: ["givenName", "familyName"]
      },
      {
        context: "https://example2.org",
        type: ["VaccinationCredential"],
        properties: ["vaccinationClinic", "vaccinationType"]
      }
  ]
}]);

provider.presentationTemplates.create([{
    name: "Proof of Vaccination",
    attributes: [
        {
            context: "https://example.org",
            type: ["Person", "Verifiable Credential"],
            properties: ["givenName", "familyName"]
        },
        {
            context: "https://example2.org",
            type: ["VaccinationCredential"],
            properties: ["vaccinationClinic", "vaccinationType"]
        }
    ]
}]);
```

Bob can now list the templates he has.
```bash
$ trinsic template list
-------------------------------------------------------------------
|          URI            |        Name            |     Type     |
|-------------------------|------------------------|--------------|
| did:123456asdfasdfasd   | VaccinationCredential  | Credential   |
|-------------------------|------------------------|--------------|
| did:123456asdfasdfasd   | Proof of Vaccination   | Presentation |
|-------------------------|------------------------|--------------|

$ trinsic template show --DID=did:trinsic:123456asdfasdfasd 

-------------------------------------------------------------------
| -> DID: did:trinsic:123456asdfasdfasd 
| -> Sources: [https://schema.org/Person, https://schema.trinsic.id]
-------------------------------------------------------------------------
|       Attributes        |        Value Type      |     Source          |
|-------------------------|------------------------|---------------------|
| firstName               | text                   | Person              |
|-------------------------|------------------------|---------------------|
| lastName                | text                   | Person              |
|-------------------------|------------------------|---------------------|
| vaccinationDate         | date                   | covid19-vaccination |
|-------------------------|------------------------|---------------------|
```

The provider can then create their organizations
```javascript

// Create Issuer
var vaccinationClinic = provider.organizations.create({
  name: "Vaccination Clinic",
  role: "issuer",
  credentialTemplates: [
    "did:trinsic:123dfgsdfaaer#vaccinationCred"
  ],
  presentationTemplates: [
    "did:trinsic:123wdasdfagaer#proofOfVaccination"
  ],
  members: [
    {
      name: "Michael Boyd",
      email: "michael@trinsic.id"
    },
    {
      name: "Riley Hughes",
      email: "riley@trinsic.id"
    }
  ],
});

// Create Verifier
let ACMECorp = provider.organizations.create({
  name: "ACMECorp",
  role: "verifier",
  presentationTemplates: [
      "did:trinsic:123wdasdfagaer#proofOfVaccinationComplex"
  ],
  members: [
      {
          name: "Tomislav Markovski",
          email:"tomislav@trinsic.id"
      }
  ]
});
```
Now the provider has their ecosystem created, let's follow the journey of the issuer organization that was just invited.
## Issue Credential

The first step for the vaccination clinic will be add the trinsic sdk to the app. They'll issue a credential whenever a vaccination event occurs
```javascript
if(event.type === EventTypes.Vaccination)
{
    let issuedCredential = issuer.credentials.issue({
        receiverId: "+8013616818",
        templateId: "did:trinsic:123123123123#vaccinationCredential",
        attributes: {
            "firstName": user.firstName,
            "lastName:": user.lastName,
            "atx": event.atxRecord
        }
    })
}

```

## Receive and Store Credential
The issuer needs to now add code to their user's app so that they can view their credentials
```javascript
let templateId = "did:trinsic:123123123#vaccinationCredential";
let credential = holder.credentials.retrieve(templateId).first();

let firstName = credential.attributes["firstName"];
let lastName = credential.attributes["lastName"];
```

## Present Credential
When alice is ready to present her credential, she can generate a presentation.
```javascript
let presentationTemplateId = "did:trinsic:123123123123#proofOfVaccinationCredential"
let presentation = holder.generatePresentation(presentationTemplateId);
let QR = createQR(presentation.data);
```


## Submit Verification
When Alice shows the PR to her work, the workplace scans her credential and sumbits verification
```javascript
let presentationData = await scanQRCode();
let presentationResult = verifier.presentations.submit(presentationData);
```

