---
# System prepended metadata

title: Pigeon Sequence Diagrams

---

# Custodial

## With Backend
```mermaid
sequenceDiagram
autonumber

participant A as Alice
participant DF as DIDPay Webapp
participant DB as DIDPay Backend
participant I as Issuer
participant YC as YC PFI


A->>DF: Open DIDPay
DF->>DB: GET /balances
DB->>DF: Balances
DF->>DF: Render balances
DF->>DB: GET offerings
DB->>YC: Fetch offerings
YC->>DB: Offerings
DB->>DF: Offerings
DF->>DF: Render Offerings
A->>DF: Select BTC --> KES
DF->>DF: Render Amount Selection Modal
A->>DF: Type in desired amount and click next
DF->>DF: Renders Sender Details Modal
A->>DF: Type in Sender Details and click next
DF->>DF: Renders Recipient Details Modal
A->>DF: Type in Recipient Details and click next
DF->>DB: POST /transaction-details
DB->>I: POST /sanctions-cred-application
I->>DB: Sanctions VC
DB->>DB: use cred + txn details to form RFQ
DB->>YC: submit RFQ
DF->>DF: Exit Modal


loop indefinitely
  DF->>DB: GET /quote
  DB->>YC: Poll for Quote
end

DF->>DF: Renders Quote
A->>DF: Click Accept
DF->>DB: POST /accept-quote

loop indefinitely
  DF->>DB: Poll for Order Status
  DB->>YC: Poll for Order Status
end
```

* Resembles the custodial experience more accurately especially given that we can display a balance in DIDPay
* Sender details form is there so we don't have to build a KYC flow in DIDPay webapp. Alice wouldn't need to fill in details in the offramp flow with a real custodial wallet

## Without Backend

```mermaid
sequenceDiagram
autonumber

participant A as Alice
participant DF as DIDPay Webapp
participant I as Issuer
participant YC as YC PFI

A->>DF: Open DIDPay
DF->>YC: Fetch offerings using web5
YC->>DF: Offerings
DF->>DF: Render offerings
A->>DF: Selects BTC->KES Pair
DF->>DF: Render Amount Selection Modal
A->>DF: Type in desired amount and click next
DF->>DF: Render Payment Method Selection
A->>DF: Types in recipient details and hits next
DF->>DF: Resolve Issuer DID. Fetch Credential Manifest from DID
DF->>DF: Render Sanctions Credential Application
A->>DF: Fill out form and hit submit
DF->>I: Send Credential App to Issuer DID
I->>DF: Sanctions VC
DF->>DF: Store Credential in DWN
DF->>DF: Render Review Page
A->>DF: Click Submit
DF->>DF: Exit Modal
DF->>YC: Send RFQ

loop indefinitely
  DF->>YC: Poll for Quote
end

DF->>DF: Render Quote
A->>DF: Click Accept

loop indefinitely
  DF->>YC: Poll for Order Statuses
end

```

* There needs to be a single hardcoded DID and hardcoded keys associated with that DID
  * if we intend to use web5-js then we will need to submit a PR that allows us to create and provide our own hardcoded DID because web5-js currently doesn't allow you to do that

* Given the single hardcoded DID, there's also only 1 DWN owned by DIDPay vs. user specific DWNs. All VCs get saved to DIDPay's DWN
* TODO: Add `Order` Tbdex Message
* Where do we get Alice's BTC/USDC balance from in this architecture?

# Issuance

## VC Issuance
```mermaid
sequenceDiagram
autonumber

participant A as App
participant I as tbdiligence
participant C as Castellum
participant S as SSIS


A->>I: POST /sanctions-cred-application
I->>C: POST /check-user
C->>I: User not on sanctions lists
I->>S: POST /create-vc
S->>I: VC
I->>A: VC
```

## VC Revocation

