Dev to main - #671
Merged
Merged
Conversation
Add one immutable genesis snapshot lifecycle per chain with independent initial and index-coverage boundaries, source identity metadata, verified counts, and explicit importing/ready timestamps. Store account membership and per-validator delegations in cascade-owned child tables with exact Decimal(80,0) base-unit amounts and bounded B-tree lookup keys. Handwrite an additive migration with lifecycle, identity, count, height, and amount checks while leaving every existing table and index, including the podcast vector HNSW index, untouched.
Stream and validate pinned Cosmos Hub and AtomOne genesis files before any write, including archive/JSON hashes, chain metadata, account wrappers, staking references, gentx shapes, exact counts, and indexer coverage. Persist through the ValidatorInfo genesis tables under a dedicated PostgreSQL advisory-lock session. Interrupted importing snapshots rebuild only their own children, complete snapshots publish atomically as ready, and matching ready reruns become verified no-ops. Exact BigInt/fixed-point math preserves per-validator delegation attribution. Expose only an explicit verify-only-by-default CLI, keep it out of indexer startup and cron registration, and document disposable dry-run, retry, HNSW, and live-stop safeguards. Add focused streaming, identity, cleanup, lifecycle, and lock tests. The parser and arithmetic adapt reviewed prior experiments while all storage ownership remains in ValidatorInfo.
Replace the passport fixture and per-row database lookups with a server-only Cosmos LCD flow for Cosmos Hub and AtomOne. The service reads VI-managed REST endpoints, applies timeout and endpoint failover, drains bounded delegation pagination, batches validator identity resolution, and caches exact string-valued results with in-flight request deduplication. Render typed empty, unsupported, and error states, preserve exact staking and reward amounts until the final approximate USD calculation, and add client pagination plus a dedicated Suspense skeleton. Keep the new copy in sync across English, Portuguese, and Russian, with focused fixtures for precision, multi-denom rewards, endpoint failures, and pagination guards.
Extend the parallel Cosmos Hub and AtomOne API clients with coverage, earliest-activity, and atomic-cursor staking-delta contracts while preserving every existing client method. Route both clients through a small server-only facts adapter. Resolve account first-seen from ready genesis membership and indexed actor or transfer activity, cache known and unknown JSON-safe results for a day, and isolate the potentially slow lookup behind a dedicated passport Suspense row. Make the surrounding passport information render synchronously and keep all new copy aligned across English, Portuguese, and Russian. Compose historical delegated stake from exact Decimal-to-BigInt genesis baselines and fully drained signed deltas. Bound pages and rows, reject cursor and total inconsistencies, clamp negative approximations to zero, retain coverage and ambiguous-message metadata, and cache the reusable full series for five minutes. Add fixtures for incoming-only activity, client parity, large integers, pagination failures, and hand-calculated stake histories.
Move the batched operator-address lookup into the node service and source current token prices through the existing price service while keeping independent reads parallel. Add localized delegation table guidance and a runnable feature test command, and document the intentionally fail-closed multi-pass genesis validation and pre-write hash verification cost.
Add the AccountBalance relation and a handwritten additive migration for exact liquid, staked, unbonding, and reward base units. A nullable refresh timestamp keeps visit-created rows distinguishable from successfully fetched zero balances, while durable view recency supports background scheduling. Introduce canonical bech32 normalization and pure Cosmos LCD aggregation for spendable balances, paginated unbonding entries, delegations, and floored DecCoin rewards. Cover both live network response shapes, pagination safety, checksum gating, and large integer precision in the regular test suite.
Record validated account visits in a shared Redis sorted-set namespace and drain them in bounded snapshots. Persist recency with a GREATEST upsert, then remove only unchanged member-and-score pairs so crashes and concurrent views remain retry-safe. Add the ten-minute VI worker that resolves Prisma chain context and REST endpoints, refreshes recent stale accounts in limited-concurrency chunks, retains stale rows after LCD failures, warns on backlog, and prunes inactive rows in bounded batches. Register it with the existing per-task single-flight scheduler and cover the complete PostgreSQL/Redis lifecycle with an injectable LCD fixture.
Replace the placeholder passport value with persisted liquid, delegated, unbonding, and reward balances, including an exact token total, optional USD conversion, freshness context, and pending or unsupported states. Share one chain LCD context between balance and delegation reads, keep Redis visit tracking fail-soft, and isolate the interactive token/USD presentation in an accessible client component while the server owns data loading and localization. The existing shared switch remains unchanged to avoid widening its consumer blast radius. Add matching English, Portuguese, and Russian copy plus unit coverage for feature gates, exact composition, price validation, stale-denom handling, and pending refreshes.
Keep an existing stored denomination unchanged when recording later visits so stale amounts cannot be relabeled as current before a successful refresh. Extend the disposable job fixture through a failed first refresh and the pending composition path, and verify failed retries preserve both freshness and denomination. Add visible keyboard focus treatment to the account value row without changing the shared switch component.
Add a canonical chain-aware transaction filter model with exact date and base-unit handling, curated message type resolution, a fail-closed server-action input boundary, and byte-compatible unfiltered cache keys. Consume the enriched by-address API response through dedicated required item and batch types, pass the same filters through SSR, lazy prefetch, retry, Redis and both indexer clients, and remount account list state when the canonical filter set changes. Validator transaction summaries explicitly retain the empty filter set. Focused tests cover normalization, action serialization, API denom coupling, decimal conversion, and cache-key parity.
Render a transaction-specific Customize panel above live account tables with draft-only message, date, and amount controls. Apply performs one pending route transition, resets cursor and window state, and writes canonical base-unit URL values; Reset removes only transaction-owned parameters. Resolve chain token metadata server-side, enforce the indexer message-type wire budget including both AtomOne governance namespaces, preserve local calendar dates without timezone drift, and localize every new label in English, Portuguese, and Russian. The shared multi-select receives only additive caption props so existing consumers keep their current behavior.
Add the account-only Amount column with exact native-denom formatting, honest foreign-denom display, direction arrows, multi-transfer disclosure, and subtle module/reward treatment. Keep the shared validator transaction table on its existing four-column layout. Classify transfers from validated participants, live chain module addresses, and complete message-type facts, with explicit precedence for rewards, staking, IBC/module execution, wallet transfers, and unknown data. Normalize missing message types during rolling API deployments and for pre-upgrade cache rows so VI remains deploy-order safe. Cover the five transfer kinds and dynamic IBC detection with focused tests, and thread one explicit amount context through the account transaction path.
Render invalid amount ranges with the required red wrapper border and classify both delegator-reward and validator-commission withdrawal messages as staking-related when no higher-precedence distribution participant is present. Add direct server-action boundary coverage with a module-level TxService stub for unsupported chains, malformed addresses, non-canonical filters, cursor propagation, successful batches, error batches, and thrown service failures. Also cover the five-message API cap with more than five curated URLs. Run the action test under Node's scoped module-mocking support so the Next server-only dependency remains untouched and production exports do not gain test-only injection hooks.
Add a unified account vote contract over the existing Cosmos Hub and AtomOne API clients, then enrich each bounded vote page with batched proposal metadata, exact closed-proposal counts, and delegated stake reconstructed at the vote heights. Keep tally and impact arithmetic in strict BigInt helpers, preserve votes whose proposal metadata is missing, reject impossible percentages, and cache only successful cursor pages with in-flight deduplication. Add a validated load-more action plus focused domain, action, and service tests so open proposals, AtomOne's missing veto field, weighted decimals, cache failures, and duplicate concurrent loads remain honest.
Replace the governance placeholder with a streamed first page, a retryable client-side append flow, proposal-linked vote rows, an exact API total, and option and closed-proposal participation charts that recompute from every loaded row. Unsupported networks retain an explicit preview-data table instead of entering the live service path. Parameterize the shared Doughnut component with typed optional data while preserving its existing propless defaults, expose project palette colors for the new charts, and remove the old type suppression. Rewrite the complete governance namespace in English, Portuguese, and Russian to disclose reconstructed-stake approximation, weighted-vote producer limits, missing data, pagination state, and chart semantics.
Extend the existing batched governance service fixture with a missing proposal, an open voting-period proposal, and a closed proposal whose reconstructed stake uses the wrong denom. Assert each public impact-unavailable reason while retaining the happy-path basis-point, single-batch, closed-count, cache, and in-flight checks.
Replace flat CSS vote squares with the glowing square icons used across existing tables, adding a gray variant for veto and unspecified options, and render vote options uppercase. Drop the card-style backgrounds around the charts and the section header in favor of the underlined yellow section titles used elsewhere, size the doughnuts so legends render in full, and style the table header cells after the shared header treatment (clipped background and hard shadow) instead of bare cells.
Remove the doughnut charts from the account governance tab, leaving the voting-history table as the single focus, and link each vote height to its block page like the transaction table does. Drop the Amount column from the transaction history entirely: raw multi-denom base units were unreadable, and transfer history will move to a dedicated table on the Tokens tab instead. The transfer facts and classifier stay in the data layer for that upcoming table. Rebuild the filter row as a single inline strip of existing controls (menu dropdown, bordered inputs with placeholders, menu-style buttons) instead of a labeled panel, matching how filters look across the site. Clean up the locale files accordingly.
Date and amount fields had no existing input component to reuse, so they wore a plain neutral border that clashed with the menu-styled dropdown and buttons beside them. Apply the same menu treatment (table-row background, top/right border, menu shadow) so the whole filter strip reads as one row of native controls; invalid amounts keep the red border signal.
The Apply/Reset button pair was an invented pattern: ListFilters consumers commit every change immediately and reset via three quick clicks on Customize. Follow that convention: dropdown and date changes push the URL at once, the free-typing amount inputs commit on blur or Enter, and the triple-click gesture (with the shared tooltip copy) clears all owned params. Selected values now derive from the URL-parsed filters, so the panel no longer needs a remount key and stays open across filter changes. An AtomOne vote selection that would resolve past the API's five-type budget is ignored instead of truncated.
Drop the min/max amount inputs: with the Amount column gone the filter had no visible counterpart, and amount filtering belongs to the upcoming Tokens transfer table where the sums are actually shown. The API-side amount parameters stay for that table. This also removes the page's only reason to resolve the chain LCD context, saving a per-render DB lookup. Remove the sort arrows from the transaction table headers: the feed is keyset-paginated by the indexer API in a fixed height-descending order, so the sortBy/order params the arrows wrote were never read.
Option buttons had a fixed 160px width with no wrap guard, so a longer label wrapped to two lines and bled over the next option under the row height cap. Let the menu size itself to its widest entry (w-max column, full-width buttons, nowrap labels) and shorten the withdraw-rewards filter label to Rewards across locales.
Drain the account's full final-vote list in the service (five API pages cover any realistic account; a truncation caption appears past 500) and render the governance tab entirely on the server: the table slices per page and uses the shared TablePagination like every other listing, replacing the bespoke load-more button, its server action, and the client state machine. Show Total Votes as a MetricsCardItem instead of plain text, align the Suspense skeleton with the new layout, and drop the now-dead locale keys.
The voting-history table with its pagination already conveys the count; the standalone card added noise. Remove it with its locale key and slim the skeleton accordingly.
The page title already names the tab; the extra subheading above the table repeated it. Drop it with its locale key and skeleton line.
Render the header through TableHeaderItem so the cells pick up the standard treatment and responsive typography, move the rows to the fractional column widths and hover styles the other tables use, and show the vote transaction (shortened hash link with a copy button, like every tx listing) instead of the raw vote height — the height stays in the data for the impact math.
Replace the NotToday stub with a transfer history table: direction relative to the account (in/out/self, colored), shortened counterparty with a copy button, the amount scaled through a per-chain known-denom map (unknown denominations stay raw with the full value in a tooltip — never scaled by a guessed exponent), the transfer transaction link, and the timestamp. Live chains ride a new bank/transfers indexer endpoint through the same batched cursor-window model as the transaction list (batches of 100, windows of 20, URL-synced cursor, Redis read-through with single-flight); the cursor mirrors the transfer table's full primary key so pagination stays exact when one message emits several coin rows. Mock chains keep a static preview table. en/pt/ru copy included.
Same fix the account transaction table already received: the feed is keyset-paginated by the indexer API in a fixed height-descending order, so the sortBy/order params the header arrows wrote were never read.
Task/310 account overview
Jail Status now renders localized Jailed / Not Jailed values, and the Voting and Sends TXs rows show real state instead of a jailed-flag proxy: Voting reflects indexed governance votes, Sends TXs lights up once the node's transaction feed has more than one transaction; the row label is renamed to Sends TXs. The Show Validators With Same Opinions buttons are functional. Both the node votes tab and the validator governance page share one table that compares voting records over common proposals and ranks by a 95% Wilson lower bound, shown as an explicit Wilson Score column next to the raw match percent and the common-proposal count, so a high percent over a tiny overlap no longer outranks a solid record. The validator-level page adds a single-select network filter over chains where the validator's nodes have indexed votes, and the button hides when there are none. Rich list defaults to the largest delegations first with working asc/desc levers on Amount and Happened. Sort mode travels through the page params, a mode-carrying cursor token that falls back to a head load on mismatch, sort-aware cache keys and the delegations endpoint's new sort/order/before_amount params. Until the indexer API deploy lands the endpoint ignores the new params and keeps serving the legacy time order, so the page stays functional either way.
…port #621: passport live status, same-opinions tables, rich list amount sort
The Sends TXs indicator and the tx filters feature merged from separate branches: the filters work made the filters argument of getTxsByAddressBatch required, while the passport probe still called it without one, so the combined dev branch stopped compiling. Pass EMPTY_TX_FILTERS the same way the tx summary page does — the probe wants the unfiltered head batch either way.
Pass explicit empty filters to the passport tx probe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.