Skip to content

feat: implement batch payout limit, usernames table, username search,… - #1098

Merged
ONEONUORA merged 1 commit into
Fracverse:masterfrom
Pvsaint:feat/issues-991-1002-1003-1005
Sep 27, 2026
Merged

ONEONUORA merged 1 commit into
Fracverse:masterfrom
Pvsaint:feat/issues-991-1002-1003-1005

Conversation

@Pvsaint

@Pvsaint Pvsaint commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

… and payment detail modal

Closes #991, Closes #1002, Closes #1003, Closes #1005

#991 — Contract: Enforce batch payout max recipient count limit

  • Updated the comment at the MAX_BATCH_SIZE guard in batch_payout to explicitly reference issue contract: CONTRACT: IMPLEMENT BATCH PAYOUT MAX RECIPIENT COUNT LIMIT ENFORCEMENT #991.
  • The constant MAX_BATCH_SIZE = 100 (defined at the top of lib.rs) and the guard if batch_size > MAX_BATCH_SIZE { return Err(Error::BatchTooLarge) } enforce that the payouts recipient vector never exceeds 100 elements per call, preventing CPU / gas exhaustion from unbounded iteration in Soroban. Returns the typed Error::BatchTooLarge so callers receive an inspectable error rather than an opaque panic. File: contracts/contracts/social_payment/src/lib.rs

#1002 — Dashboard: Usernames table tracking registry events and claims

  • The UsernamesTable component in the Contracts admin page renders a full data table of all registered usernames, their matched Stellar public keys, and registration dates, fetched live from /api/registry/claims.
  • Columns are sortable (username / registered date) via clickable headers.
  • The active registration count footer now carries a data-testid attribute for easier automated querying. File: dashboard/app/dashboard/contracts/page.tsx

#1003 — Dashboard: Username search bar with autocomplete in admin console

  • Added a new UsernameSearchBar component directly inside dashboard/app/dashboard/page.tsx (Social Overview page).
  • Debounces calls to /api/users/search (300 ms) and renders an ARIA- compliant listbox dropdown showing matching username, public key, and registration date for each result.
  • Selecting a result redirects the admin to /dashboard/transactions?user=<username>, which pairs with frontend: [Dashboard] Create detail modal showing historical payments for a specific username #1005 below. File: dashboard/app/dashboard/page.tsx

#1005 — Dashboard: Payment detail modal for a specific username

  • The Transactions page now reads the ?user= query param (set by the SearchBar autocomplete on username selection) and auto-opens the existing PaymentDetailDialog for that username on page load.
  • Added useRouter / usePathname imports to clean the ?user= param from the URL when the dialog is dismissed, preventing it from re-opening on subsequent renders.
  • The dialog itself already lists every historical payment for the user with sender, receiver, amount, and date columns (backed by /api/users/:username/payments). File: dashboard/app/dashboard/transactions/page.tsx

… and payment detail modal

Closes Fracverse#991, Fracverse#1002, Fracverse#1003, Fracverse#1005

## Fracverse#991 — Contract: Enforce batch payout max recipient count limit
- Updated the comment at the MAX_BATCH_SIZE guard in `batch_payout` to
  explicitly reference issue Fracverse#991.
- The constant MAX_BATCH_SIZE = 100 (defined at the top of lib.rs) and the
  guard `if batch_size > MAX_BATCH_SIZE { return Err(Error::BatchTooLarge) }`
  enforce that the `payouts` recipient vector never exceeds 100 elements per
  call, preventing CPU / gas exhaustion from unbounded iteration in Soroban.
  Returns the typed Error::BatchTooLarge so callers receive an inspectable
  error rather than an opaque panic.
File: contracts/contracts/social_payment/src/lib.rs

## Fracverse#1002 — Dashboard: Usernames table tracking registry events and claims
- The `UsernamesTable` component in the Contracts admin page renders a full
  data table of all registered usernames, their matched Stellar public keys,
  and registration dates, fetched live from `/api/registry/claims`.
- Columns are sortable (username / registered date) via clickable headers.
- The active registration count footer now carries a `data-testid` attribute
  for easier automated querying.
File: dashboard/app/dashboard/contracts/page.tsx

## Fracverse#1003 — Dashboard: Username search bar with autocomplete in admin console
- Added a new `UsernameSearchBar` component directly inside
  `dashboard/app/dashboard/page.tsx` (Social Overview page).
- Debounces calls to `/api/users/search` (300 ms) and renders an ARIA-
  compliant listbox dropdown showing matching username, public key, and
  registration date for each result.
- Selecting a result redirects the admin to
  `/dashboard/transactions?user=<username>`, which pairs with Fracverse#1005 below.
File: dashboard/app/dashboard/page.tsx

## Fracverse#1005 — Dashboard: Payment detail modal for a specific username
- The Transactions page now reads the `?user=` query param (set by the
  SearchBar autocomplete on username selection) and auto-opens the existing
  `PaymentDetailDialog` for that username on page load.
- Added `useRouter` / `usePathname` imports to clean the `?user=` param from
  the URL when the dialog is dismissed, preventing it from re-opening on
  subsequent renders.
- The dialog itself already lists every historical payment for the user with
  sender, receiver, amount, and date columns (backed by
  `/api/users/:username/payments`).
File: dashboard/app/dashboard/transactions/page.tsx
@drips-wave

drips-wave Bot commented Sep 27, 2026

Copy link
Copy Markdown

@Pvsaint Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@ONEONUORA ONEONUORA left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job @Pvsaint

@ONEONUORA
ONEONUORA merged commit d26a536 into Fracverse:master Sep 27, 2026
10 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants