Skip to content

Add RPC-backed transaction history#69

Open
Jim8y wants to merge 2 commits into
neoorder:masterfrom
Jim8y:codex/rpc-transaction-history
Open

Add RPC-backed transaction history#69
Jim8y wants to merge 2 commits into
neoorder:masterfrom
Jim8y:codex/rpc-transaction-history

Conversation

@Jim8y

@Jim8y Jim8y commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Route the wallet Records entry to an in-app transaction history page instead of sending users to the explorer.
  • Load NEP-17 and NEP-11 transfers directly from RPC for the selected wallet address.
  • Resolve token metadata in memory for readable asset/activity rows without adding local transaction storage.

Validation

  • dotnet build OneGateApp/OneGateApp.csproj -f net10.0-android -p:AndroidSdkDirectory=/opt/homebrew/share/android-commandlinetools -p:EmbedAssembliesIntoApk=true
  • dotnet build OneGateApp/OneGateApp.csproj -f net10.0-ios -p:RuntimeIdentifier=iossimulator-arm64 -p:CodesignKey=- -p:CodesignProvision=
  • iOS and Android simulator screenshots will be posted in a PR comment before marking ready for review.

Notes

  • Scope is intentionally limited to transaction history navigation and RPC-backed display.
  • The page does not persist transaction history locally; it queries RPC on demand to avoid introducing a new record store.

@Jim8y

Jim8y commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

Simulator validation completed for this PR.

Validation run:

  • iOS build passed: dotnet build OneGateApp/OneGateApp.csproj -f net10.0-ios -p:RuntimeIdentifier=iossimulator-arm64 -p:CodesignKey=- -p:CodesignProvision= (3 existing NU1903 SQLite warnings, 0 errors).
  • Android build passed: RuntimeIdentifiers=android-arm64;android-x64 dotnet build OneGateApp/OneGateApp.csproj -f net10.0-android -p:AndroidSdkDirectory=/opt/homebrew/share/android-commandlinetools -p:EmbedAssembliesIntoApk=true (9 existing NU1903 SQLite warnings, 0 errors).
  • iOS Simulator: installed and launched on iPhone 17 Pro / iOS 26.5, launch returned PID 6358.
  • Android Emulator: installed and launched on emulator-5554, created a temporary local test wallet by private-key import, opened Wallet -> History, and confirmed the RPC-backed empty transaction state rendered. App PID 11549, crash buffer empty.
  • Sensitive mnemonic/private-key setup screens were not uploaded; only non-sensitive screenshots are attached.

Screenshots:

iOS simulator

Android emulator history empty state

@Jim8y Jim8y marked this pull request as ready for review June 22, 2026 02:44
Copilot AI review requested due to automatic review settings June 22, 2026 02:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR adds an in-app, RPC-backed transaction history experience for the wallet, replacing the previous “Records” behavior that navigated users out to an external explorer. It queries NEP-17 and NEP-11 transfers on demand via RPC and resolves token metadata in-memory for display.

Changes:

  • Routed Wallet “Records” tap to a new in-app TransactionHistoryPage (//wallet/transactions) and registered the Shell route.
  • Implemented TransactionHistoryPage (UI + code-behind) to load NEP-17/NEP-11 transfers from RPC and render them as activity rows.
  • Added new localized string keys for empty/error/retry transaction history states across all .resx files and updated Strings.Designer.cs.

Reviewed changes

Copilot reviewed 20 out of 21 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
OneGateApp/Properties/Strings.resx Adds transaction history empty/error/retry strings (neutral culture).
OneGateApp/Properties/Strings.de.resx Adds transaction history strings for German locale.
OneGateApp/Properties/Strings.es.resx Adds transaction history strings for Spanish locale.
OneGateApp/Properties/Strings.fr.resx Adds transaction history strings for French locale.
OneGateApp/Properties/Strings.id.resx Adds transaction history strings for Indonesian locale.
OneGateApp/Properties/Strings.it.resx Adds transaction history strings for Italian locale.
OneGateApp/Properties/Strings.ja.resx Adds transaction history strings for Japanese locale.
OneGateApp/Properties/Strings.ko.resx Adds transaction history strings for Korean locale.
OneGateApp/Properties/Strings.nl.resx Adds transaction history strings for Dutch locale.
OneGateApp/Properties/Strings.pt-BR.resx Adds transaction history strings for Brazilian Portuguese locale.
OneGateApp/Properties/Strings.ru.resx Adds transaction history strings for Russian locale.
OneGateApp/Properties/Strings.tr.resx Adds transaction history strings for Turkish locale.
OneGateApp/Properties/Strings.vi.resx Adds transaction history strings for Vietnamese locale.
OneGateApp/Properties/Strings.zh-Hans.resx Adds transaction history strings for Simplified Chinese locale.
OneGateApp/Properties/Strings.zh-Hant.resx Adds transaction history strings for Traditional Chinese locale.
OneGateApp/Properties/Strings.Designer.cs Exposes new TransactionHistory* resource accessors.
OneGateApp/Pages/WalletPage.xaml Changes “Records” tap to navigate in-app to transaction history route.
OneGateApp/AppShell.xaml.cs Registers the new wallet/transactions Shell route.
OneGateApp/Pages/TransactionHistoryPage.xaml Adds UI for list/empty/error/loading states with pull-to-refresh.
OneGateApp/Pages/TransactionHistoryPage.xaml.cs Implements RPC transfer loading, token metadata caching, and row formatting.
OneGateApp/Models/TransactionHistoryItem.cs Adds a simple UI model for transaction history rows.
Files not reviewed (1)
  • OneGateApp/Properties/Strings.Designer.cs: Generated file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +239 to +247
static string? ReadString(JsonObject obj, params string[] keys)
{
foreach (string key in keys)
{
if (obj[key] is JsonValue value)
return value.ToString();
}
return null;
}
Title = title,
AmountText = amountText,
DirectionText = transfer.IsIncoming ? Strings.Receive : Strings.Send,
CounterpartyText = string.IsNullOrWhiteSpace(transfer.Counterparty) ? ShortHash(transfer.AssetHash.ToString()) : transfer.Counterparty,
Comment on lines +10 to +12
<ContentPage.Resources>
<toolkit:InvertedBoolConverter x:Key="InvertedBoolConverter" />
</ContentPage.Resources>
Comment thread OneGateApp/Properties/Strings.fr.resx Outdated
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
Comment thread OneGateApp/Properties/Strings.de.resx Outdated
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
Comment thread OneGateApp/Properties/Strings.nl.resx Outdated
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
Comment thread OneGateApp/Properties/Strings.ru.resx Outdated
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
Comment thread OneGateApp/Properties/Strings.tr.resx Outdated
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
Comment thread OneGateApp/Properties/Strings.vi.resx Outdated
Comment on lines +442 to +446
<data name="TransactionHistoryEmpty" xml:space="preserve">
<value>No transaction activity found</value>
</data>
<data name="TransactionHistoryEmptyText" xml:space="preserve">
<value>Transfers for this wallet will appear here after they are indexed by the RPC node.</value>
@Jim8y

Jim8y commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

Review feedback fixes pushed in c6ec0fc.

Validation after the update:

  • Android: dotnet build OneGateApp/OneGateApp.csproj -f net10.0-android -c Debug -p:AndroidSdkDirectory=/opt/homebrew/share/android-commandlinetools -p:JavaSdkDirectory=/opt/homebrew/Cellar/openjdk@17/17.0.19/libexec/openjdk.jdk/Contents/Home -p:EmbedAssembliesIntoApk=true passed with existing SQLitePCLRaw NU1903 warnings only.
  • Android emulator: installed with adb install --no-incremental, launched on emulator-5554, PID 14362, AndroidRuntime crash buffer empty.
  • iOS: DEVELOPER_DIR=/Applications/Xcode-26.5.0.app/Contents/Developer dotnet build OneGateApp/OneGateApp.csproj -f net10.0-ios -c Debug -p:RuntimeIdentifier=iossimulator-arm64 -p:CodesignKey=- -p:CodesignProvision= -p:ProvisioningType=automatic passed with existing SQLitePCLRaw NU1903 warnings only.
  • iOS Simulator: installed and launched on iPhone 17 Pro / iOS 26.5, PID 43940.

Screenshots:

iOS simulator

Android emulator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants