Skip to content

feat(ui): asset-lock transaction identity (transfers + identity fundings)#827

Merged
QuantumExplorer merged 4 commits into
swift-sdk-integrationfrom
feat/platform-transfer-identity
Jul 16, 2026
Merged

feat(ui): asset-lock transaction identity (transfers + identity fundings)#827
QuantumExplorer merged 4 commits into
swift-sdk-integrationfrom
feat/platform-transfer-identity

Conversation

@QuantumExplorer

@QuantumExplorer QuantumExplorer commented Jul 16, 2026

Copy link
Copy Markdown
Member

What

Every asset-lock transaction in history used to render as a bare "Internal Transfer" (or "Received") with a 0 amount. This PR gives all of them their real identity:

Balance transfers — uniform "Internal Transfer" title + route carried visually and in a compact pill:

  • Icons: source → destination badge (Ð→shield, Ð→credit card, shield→Ð).
  • Route pill next to the time: Transparent → Shielded / Transparent → Platform / Shielded → Transparent; replaced by Pending — tap to finish (shielded, has the recovery sheet) or Pending (platform) while the lock is unconsumed.
  • Real locked amount (live from the asset-lock row) instead of 0.
  • Detail sheet: "Internal Transfer" header, From/To rows naming the balances, live Status row (Broadcasting / Funds locked — finishing transfer / Completed), change-output "Internally moved to" row suppressed.

Identity fundings (types 0–3) — titled by purpose instead:

  • Row + detail header: "Identity registration" / "Identity top-up" / "Invitation", Ð → person route icons, real locked amount, Pending pill while unconsumed.
  • Detail sheet: From: Transparent balance / To: Identity credits / live Status.

Implementation

  • ShieldedTxLookup snapshots all six asset-lock funding types with fundingTypeRaw; info(forTxidHex:) keeps its shielded-only contract (existing consumers unaffected); new platformFundingInfo/identityFundingInfo accessors. fundFromCore/resumeFundFromCore refresh the lookup on completion.
  • Transaction: isPlatformFundingTransfer/isIdentityFundingTransfer (+ pending variants), .coreToPlatform/.coreToIdentity routes, live locked-amount override for all funding types, route-driven stateTitle.
  • Home row: route icons, route/pending pills. Detail sheet: route-aware title + From/To/Status rows.
  • en strings: three route keys, "Pending", "Identity registration", "Identity top-up", "Identity credits" (reuses "Invitation", "Internal Transfer").

Testing

Testnet smoke on QA-iPhone16 / iPhone 16 Pro sims: real Core→Platform (25 tDASH) and Core→Shielded fundings show route icons/pills + amounts; identity registration rows from the QA wallet's earlier username registration relabel with purpose + amount; detail sheets show route + Status + duffs fee; classic rows unchanged. Unit-test target pre-existing-broken per CLAUDE.md.

🤖 Generated with Claude Code

A Core → Platform funding (Type-8 asset lock, funding type 4 —
AssetLockAddressTopUp) rendered as a generic "Internal Transfer" with a
0 amount on the home list, and "Moved to Address" on the detail sheet.
Give it the same first-class identity shielded transfers have:

 - ShieldedTxLookup now snapshots BOTH tracked funding types (5 shielded,
   4 platform address), carrying fundingTypeRaw; `info(forTxidHex:)`
   keeps its shielded-only contract and the new
   `platformFundingInfo(forTxidHex:)` serves the platform rows. The
   fund/resume legs refresh the lookup on completion so rows re-label
   immediately instead of waiting for the next shielded sync pass.
 - Transaction: isPlatformFundingTransfer + coreToPlatform route; the
   row shows the real locked amount (live, like shielded rows) and is
   titled "Platform transfer" / "Platform transfer (pending)".
 - Home list: Core → Platform route icons (Ð + credit-card badge).
 - Detail sheet: "Platform transfer" header, From Transparent balance /
   To Platform balance / live Status rows (shared asset-lock status
   text), and the change-output "Internally moved to" row suppressed
   like the shielded case.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c48c010a-13d5-47fb-b260-bd87cd84704c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/platform-transfer-identity

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

"Platform transfer" reads like a Platform → Platform credit send and
"Shielded transfer" like a shielded → shielded spend. Name the route
instead, matching the balance names used across the app:
 - Transparent → Shielded (+ pending variant)
 - Transparent → Platform (+ pending variant)
 - Shielded → Transparent (was "Shielded withdrawal")
Applies to the history rows (stateTitle) and the detail-sheet header;
plain self-sends keep "Internal Transfer".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@QuantumExplorer QuantumExplorer changed the title feat(ui): platform-transfer identity for Core → Platform fundings feat(ui): route-form identity for Core ↔ Platform/Shielded transfers Jul 16, 2026
Balance transfers now all read "Internal Transfer"; the route rides the
iconography (source icon → destination badge) plus a compact route pill
next to the time ("Transparent → Platform" / "Transparent → Shielded" /
"Shielded → Transparent"). Pending locks replace the pill with
"Pending — tap to finish" (shielded, which has the recovery sheet) or
"Pending" (platform funding). The detail sheet titles "Internal
Transfer" and names the route in its From/To/Status rows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@QuantumExplorer QuantumExplorer changed the title feat(ui): route-form identity for Core ↔ Platform/Shielded transfers feat(ui): internal-transfer identity with route icons and pill Jul 16, 2026
Identity funding locks (types 0…3 — registration, top-up variants,
invitation) rendered as bare "Internal Transfer / 0" rows too. They now
title by purpose ("Identity registration" / "Identity top-up" /
"Invitation") on the row and detail header, show the real locked
amount, Ð → person route icons, a "Pending" pill while unconsumed, and
From Transparent balance / To Identity credits / Status rows on the
detail sheet (change-output row suppressed). The lookup tracks all six
funding types; `info(forTxidHex:)` keeps its shielded-only contract.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@QuantumExplorer QuantumExplorer changed the title feat(ui): internal-transfer identity with route icons and pill feat(ui): asset-lock transaction identity (transfers + identity fundings) Jul 16, 2026
@QuantumExplorer
QuantumExplorer merged commit 11771b7 into swift-sdk-integration Jul 16, 2026
3 checks passed
QuantumExplorer added a commit that referenced this pull request Jul 16, 2026
…ep both Identity* string keys

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant