-
Notifications
You must be signed in to change notification settings - Fork 234
SDP-1933: Add SDP Overview Page #2149
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,6 +4,83 @@ sidebar_position: 5 | |
| pagination_label: "Admin Guide: Overview" | ||
| --- | ||
|
|
||
| ## What is SDP? | ||
|
|
||
| The Stellar Disbursement Platform (SDP) is an orchestration layer for sending bulk payments over the Stellar network, combining operator-facing dashboards with APIs that cover onboarding, compliance, and funds delivery. It removes the friction of high-volume disbursements—recipient messaging, wallet registration, treasury controls, and Stellar transaction submission—so organizations can stand up programs quickly. SDP is built for NGOs, fintech platforms, payroll teams, and marketplaces that need predictable, traceable payouts without building Stellar plumbing themselves. | ||
|
|
||
| ## When to Use SDP | ||
|
|
||
| SDP is the right fit when you need: | ||
|
|
||
| - **Humanitarian aid / cash assistance:** Register recipients with OTP-secured flows, send invite messages over SMS or WhatsApp, and push scheduled disbursements as soon as wallets are verified (while still handling admin notifications over email). | ||
| - **Payroll or stipend programs:** Enforce MFA and reCAPTCHA for admins, expose Prometheus metrics for reliability teams, and keep treasury funds in a managed hot wallet while still settling quickly on Stellar. | ||
| - **Merchant, gig, or platform payouts:** Use the Admin/Dashboard APIs plus native SEP-10/SEP-24 flows so funds land in trusted anchors, connect to custody or off-ramps, and deliver global payouts through a single control plane. | ||
|
|
||
| ## What SDP Does Well | ||
|
|
||
| - High-volume batch payments with queueing, schedulers, and automated submission to Stellar ledgers. | ||
| - Compliance-friendly flows (MFA, reCAPTCHA, SEP-10 auth, SEP-24 interactive deposits, trusted wallets). | ||
| - Fast settlement via Stellar with real-time monitoring from the Transaction Submission Service. | ||
| - Integrations across custody, wallets, and fiat ramps with configurable messaging channels. | ||
| - Clear Admin/Dashboard APIs and Prometheus metrics for observability. | ||
| - Works globally with multi-tenant isolation via tenant-specific schemas and tunable resource limits per deployment. | ||
|
|
||
| ## Key Features | ||
|
|
||
| ### Core | ||
|
|
||
| - Admin API for tenant provisioning and Dashboard API for operator workflows. | ||
| - Message Service for invitations, OTPs, and notifications via AWS SES, Twilio SendGrid, Twilio SMS/WhatsApp, and AWS SNS. | ||
| - Wallet Registration UI hosted by SDP so recipients can self-serve verification and connect Stellar wallets. | ||
| - Native SEP-10/SEP-24 endpoints plus `stellar.toml` generation for wallet compatibility. | ||
| - Transaction Submission Service (TSS) that picks up queued payouts, submits them to Stellar, and feeds back status. | ||
|
|
||
| ### Enterprise | ||
|
|
||
| - Environment- or tenant-level controls for MFA, reCAPTCHA, and wallet policies, with guidance on hot vs. cold treasury wallets. | ||
| - Multi-tenant mode with isolated admin, TSS, and tenant schemas inside Postgres plus per-tenant configuration. | ||
| - Helm, Docker Compose, and CLI tooling for reproducible deployments and migrations. | ||
|
|
||
| ### Operational | ||
|
|
||
| - Scheduler-driven jobs for invitations, payment submission, and reconciliation, each with tunable intervals. | ||
| - Tunable PostgreSQL connection pools to keep multi-tenant workloads stable. | ||
| - Prometheus metrics export plus extensible APIs for external automation. | ||
|
|
||
| ## Architecture at a High Level | ||
|
|
||
| - **SDP Orchestrator:** Core services plus the Transaction Submission Service manage recipient onboarding, messaging, scheduling, and Stellar transaction lifecycles. | ||
| - **Treasury Account:** Organizations fund payouts from a controlled hot wallet, with policies to move excess funds to cold custody. | ||
| - **User & Trusted Wallets:** Recipient's wallet to receive funds and initiate local off-ramp journeys. | ||
| - **On/Off-Ramps & Stellar:** Anchors, custody providers, or fiat ramps bridge SDP-managed payouts to local rails while Stellar provides fast, low-cost settlement. | ||
|
|
||
| ```mermaid | ||
| sequenceDiagram | ||
| participant Org as Org Admin | ||
| participant Treasury as Treasury Account | ||
| participant SDP as SDP Orchestrator | ||
| participant TSS as Transaction Submission Service | ||
| participant Stellar as Stellar Network | ||
| participant Wallet as User Wallet | ||
| participant Ramp as On / Off-Ramp | ||
|
|
||
| Org->>Treasury: Fund treasury account with Stellar asset | ||
| Org->>SDP: Upload recipients & schedule disbursement | ||
| SDP->>SDP: Check recipient wallet status | ||
| alt Wallet not registered | ||
| SDP->>Wallet: Send SMS invite + deep link to Stellar wallet (first-time recipients) | ||
| Wallet->>Wallet: User installs wallet via deep link & signs up | ||
| Wallet-->>SDP: User submits OTP + verification data | ||
| else Wallet already registered | ||
| SDP-->>SDP: Use wallet on file | ||
| end | ||
| SDP->>Wallet: Link wallet address to recipient profile / phone | ||
| SDP->>TSS: Queue payouts & monitor submission status | ||
| TSS->>Stellar: Submit Stellar payment transactions | ||
| Stellar-->>Wallet: Credit recipient wallet | ||
| Wallet->>Ramp: Cash-out / local transfer | ||
| ``` | ||
|
|
||
| The entire SDP step-by-step process usually looks something like the following after the SDP is deployed and organizational users have been set up: | ||
|
|
||
| 1. The organization funds the SDP’s distribution account with a Stellar-based asset (e.g. USDC) | ||
|
|
@@ -14,7 +91,3 @@ The entire SDP step-by-step process usually looks something like the following a | |
| 6. Once the recipient has signed up and their Stellar account has been created, the wallet immediately authenticates with the SDP using parameters from the deep link and opens the SDP registration web view for the recipient to complete verification | ||
| 7. The user confirms their identity by providing an OTP code sent to their phone number and an additional piece of verification information for security purposes. The SDP supports three different types of verification information: Date of Birth, Personal PIN, and National ID. This information is input by the recipient in a web flow and passes directly to the SDP, meaning the wallet does not need to process or store this information. | ||
| 8. The SDP verifies the recipient’s information. If it matches the information from the CSV, the SDP automatically makes the payment to the recipient’s Stellar account | ||
|
|
||
| Graphic representation of flow of funds: | ||
|
|
||
|  | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. is this |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -24,6 +24,7 @@ const config: Config = { | |
| trailingSlash: false, | ||
| onBrokenAnchors: "ignore", | ||
| onBrokenLinks: "throw", | ||
| onBrokenMarkdownLinks: "throw", | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Docusaurus 3 dropped
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i think you might be looking at it the wrong way around. Source: https://docusaurus.io/docs/api/docusaurus-config#onBrokenMarkdownLinks |
||
| favicon: "img/docusaurus/favicon-96x96.png", | ||
| organizationName: "stellar", | ||
| projectName: "stellar-docs", | ||
|
|
@@ -84,9 +85,6 @@ const config: Config = { | |
| mdx1Compat: { | ||
| headingIds: true, | ||
| }, | ||
| hooks: { | ||
| onBrokenMarkdownLinks: 'throw', | ||
| }, | ||
| }, | ||
| themes: ["docusaurus-theme-openapi-docs", "@docusaurus/theme-mermaid"], | ||
| presets: [ | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good catch here!