...
- We're taking the "happy path" - no errors.
- 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:
High Level Design - Methods, Inputs/Actions - Simplified Flow
SendCredentialRequest
Sends a request-credential message to another agent.
Input:
- Connection ID: Used to identify the agent to send this proposal to.
- Desired credential data (optional)
- Requested formats for credential.
- Comment (optional)
- Schema ID - a filter to request credentials based on a particular schema (optional).
- Credential definition ID - a filter to request a credential based on a particular credential definition (optional).
Actions:
- Send request-credential message to other agent, along with a unique Credential_exchange_id.
- Create a credential_exchange_record with the unique Credential_exchange_id.
- Update state to credential-requested for given credential_exchange_record.
HandleCredentialRequest
Receives a request-credential message from another agent.
Input:
- A credential_exchange_id.
- A request-credential message.
Actions:
- Validate incoming message.
- Update state to credential_requested for given credential_exchange_record.
- Notify business logic via client.
SendIssueCredential
Sends an issue-credential message to another agent.
Input:
- A credential_exchange_id.
- The issued credentials.
- Comment (optional)
Actions:
- Send issue-credential message to other agent.
- Update state to credential-issued for given credential_exchange_record.
HandleIssueCredential
Receives an issue-credential message from another agent.
Input:
- A credential_exchange_id.
- An issue-credential message.
Actions:
- Validate incoming message.
- Store the credential.
- Update state to credential_received for given credential_exchange_record.
- 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.
...
- Update state to offer_sent for given credential_exchange_record.
- Notify business logic via client.
SendCredentialRequest
Sends a request-credential message to another agent.
...
- Send request-credential message to other agent.
- Update state to credential-requested for given credential_exchange_record.
HandleCredentialRequest
Receives a request-credential message from another agent.
...
- Validate incoming message.
- Update state to credential_requested for given credential_exchange_record.
- Notify business logic via client.
SendIssueCredential
Sends an issue-credential message to another agent.
...
- Send issue-credential message to other agent.
- Update state to credential-issued for given credential_exchange_record.
HandleIssueCredential
Receives an issue-credential message from another agent.
...
- Validate incoming message.
- Store the credential.
- Update state to credential_received for given credential_exchange_record.
- Notify business logic via client.
SendCredentialRequestWithoutOffer
...
- .
...
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 :
- How to register schema on the ledger?
- Go through VC and refactor if required ?
- At what point we need to store the schema to the ledger and retrieve from ledger ?
- If schema ID is related to verifiable credential ?