Identity first
Every sensitive operation references user_id, mid_id, account_id, device session, and risk context.
This product should be built as one identity-bound account system, with wallet, payment, IBC, credential, and cold-signing modules composed around the selected account.
Backend engineers should treat M Wallet as a verified account system. Addresses, assets, cards, invoices, and receipts all belong to an identity-bound account context.
Every sensitive operation references user_id, mid_id, account_id, device session, and risk context.
Personal, IBC, Vault, Merchant, and Agent accounts should share a common account model with type-specific permissions.
Payment, swap, invoice, and credential-sharing actions produce immutable receipts or audit events.
Payment conversation is not open chat. It stores typed messages: contact card, request, note, receipt, confirmation.
Swap, IBC payments, large withdrawals, credential sharing, and Vault Card signing must pass policy checks.
MXCD-related features should be marked as future or policy-gated until official approvals and reserve frameworks exist.
These objects form the minimum backend vocabulary. Frontend screens should be able to compose all pages from these resources.
Represents a verified person and their identity assurance state.
Common account container for personal wallet, IBC company wallet, Vault account, and future account types.
Balances are scoped to accounts and networks. External assets remain separate from FC Chain primary rails.
Typed structured messages around verified contacts and payments.
Company-specific wallet and service record connected to a MID owner or authorized role.
Apple Wallet style credential, issued by an authority and shareable through selective disclosure.
NFC cold wallet card and signing-session state for high-value actions.
Signed official broadcast, payment notice, IBC invoice notice, or security alert.
Each page can be implemented independently as long as it respects account context, role policy, typed actions, and audit logging.
Primary landing page showing account switcher, MID credential state, FC Chain balances, fast actions, latest payment request, and high-level infrastructure status.
me with MID stateaccounts[]selected_accountbalances[]latest_payment_requestnotification_countsShows primary FC Chain rails, external networks, USDF/MXCD policy note, controlled swap module, and MID Vault Card status.
balances[] by networkasset_metadata[]swap_supported_pairs[]vault_statusnetwork_status[]Controlled exchange flow for FC Chain internal pairs. MVP should start with USDF and FCA. Future MXCD routes remain policy-gated.
account_limitseligible_assets[]quote_idrate and expires_atfees[]policy_resultStructured payment communication around verified contacts. This is not open chat; it is a transaction-supporting message system.
contact_cardpayment_requestpayment_notereceiptconfirmationIndependent company account space with its own FC Chain address, balances, roles, invoices, receipts, and vault policies.
Verified cards for personal and business credentials, with status lifecycle and selective disclosure.
Card-based cold signing for large transfers, company reserve withdrawals, and protected long-term holdings.
Signed official channel for government messages, IBC renewal reminders, payment requests, and security alerts.
signature_statusissuer_idprioritytarget_account_idaction_urlOfficial service fee payment path for registry renewals, filings, certificates, and future government services.
invoice_idissuer_signatureamountaccepted_assets[]service_contextreceipt_idOperational security surface for trusted devices, passkeys, transaction limits, notification preferences, recovery contacts, and account export controls.
device_sessions[]auth_methods[]limit_profilerecovery_methods[]vault_cards[]notification_preferencesThese examples are intentionally small. They define the shape engineers need for frontend integration, idempotency, audit logs, and future compliance review.
{
"message_type": "payment_request",
"conversation_id": "conv_123",
"counterparty_mid": "did:mid:resident:789",
"account_id": "acct_personal_01",
"amount": "125.00",
"asset_code": "USDF",
"note_template": "service_payment",
"expires_at": "2026-05-01T00:00:00Z"
}
{
"account_id": "acct_personal_01",
"from_asset": "USDF",
"to_asset": "FCA",
"amount": "250.00",
"idempotency_key": "uuid-client-generated",
"policy_context": {
"purpose": "wallet_rebalance"
}
}
{
"credential_id": "cred_driver_license_01",
"scope": ["name", "credential_status", "expiry"],
"recipient_type": "service",
"recipient_id": "registry_service",
"expires_in_seconds": 900,
"user_consent": true
}
{
"account_id": "acct_ibc_01",
"operation_type": "large_transfer",
"human_readable_payload": "Send 4,500 USDF to FC...9A2",
"required_card_role": "primary",
"expires_at": "2026-04-26T12:30:00Z"
}
{
"notice_id": "notice_2026_001",
"channel": "official",
"issuer_id": "dro_registry",
"signature_status": "verified",
"priority": "urgent",
"action_url": "/services/invoices/inv_001"
}
{
"receipt_id": "rcpt_001",
"source_type": "service_payment",
"account_id": "acct_ibc_01",
"transaction_hash": "0x...",
"asset_code": "USDF",
"amount": "350.00",
"status": "settled",
"audit_event_id": "audit_001"
}
Security is account-specific. The backend should calculate required assurance before every sensitive operation and return the next required step.
This is the practical checklist I would hand to engineering before implementation planning.
Identity + account switcher + balances + payment conversation + IBC invoices + receipts first. Add controlled swap and Vault Card signing as gated modules after the core account and audit model is stable.