Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. We're taking the "happy path" - no errors.
  2. An ack for the receipt of the credential was not requested.

Before implementing the full flow, we could instead start with a simpler version first, and then expand upon it later. Here's what a simplified version might look like. It eliminates the propose-offer cycle and instead merges the proposal message into the request message, effectively turning the exchange into a two-step process:

Image Added

High Level Design - Methods, Inputs/Actions - Simplified Flow

SendCredentialRequest

Sends a request-credential message to another agent.

Input:

  1. Connection ID: Used to identify the agent to send this proposal to.
  2. Desired credential data (optional)
  3. Requested formats for credential.
  4. Comment (optional)
  5. Schema ID - a filter to request credentials based on a particular schema (optional).
  6. Credential definition ID - a filter to request a credential based on a particular credential definition (optional).

Actions:

  1. Send request-credential message to other agent, along with a unique Credential_exchange_id.
  2. Create a credential_exchange_record with the unique Credential_exchange_id.
  3. Update state to credential-requested for given credential_exchange_record.

HandleCredentialRequest

Receives a request-credential message from another agent.

Input:

  1. A credential_exchange_id.
  2. A request-credential message.

Actions:

  1. Validate incoming message.
  2. Update state to credential_requested for given credential_exchange_record.
  3. Notify business logic via client.

SendIssueCredential

Sends an issue-credential message to another agent.

Input:

  1. A credential_exchange_id.
  2. The issued credentials.
  3. Comment (optional)

Actions:

  1. Send issue-credential message to other agent.
  2. Update state to credential-issued for given credential_exchange_record.

HandleIssueCredential

Receives an issue-credential message from another agent.

Input:

  1. A credential_exchange_id.
  2. An issue-credential message.

Actions:

  1. Validate incoming message.
  2. Store the credential.
  3. Update state to credential_received for given credential_exchange_record.
  4. Notify business logic via client.




Below shows the full flow.


High Level Design - Methods, Inputs/Actions - Full Flow

SendProposal

Sends a propose-credential message to another agent.

...

  1. Update state to offer_sent for given credential_exchange_record.
  2. Notify business logic via client.

SendCredentialRequest

Sends a request-credential message to another agent.

...

  1. Send request-credential message to other agent.
  2. Update state to credential-requested for given credential_exchange_record.

HandleCredentialRequest

Receives a request-credential message from another agent.

...

  1. Validate incoming message.
  2. Update state to credential_requested for given credential_exchange_record.
  3. Notify business logic via client.

SendIssueCredential

Sends an issue-credential message to another agent.

...

  1. Send issue-credential message to other agent.
  2. Update state to credential-issued for given credential_exchange_record.

HandleIssueCredential

Receives an issue-credential message from another agent.

...

  1. Validate incoming message.
  2. Store the credential.
  3. Update state to credential_received for given credential_exchange_record.
  4. Notify business logic via client.

SendCredentialRequestWithoutOffer

...

  1. .

...

Additional details

Layer responsibilities

...

One of the supported flows is to send a request-credential message without going through the propose-offer cycle. How does this work?


Design Questions TBD : 

  1. How to register schema on the ledger? 
  2. Go through VC and refactor if required ?
  3. At what point we need to store the schema to the ledger and retrieve from ledger ? 
  4. If schema ID is related to verifiable credential ?