Conversation
Replace qli SubmitTransaction and transaction status endpoints with local PendingTransactionService backed by localStorage. Broadcast transactions via the live API. Add ApiQueryService for resolving pending transaction outcomes. Simplify transaction status computation and use template variable caching for asset transfer lookups.
Use live API endpoints to replace qli dependencies in IPO:
- GET /live/v1/ipos/active replaces GET /ipo/contracts
- GET /live/v1/ipos/{id}/bids replaces GET /Wallet/IpoContracts
- Remove unused getIpoContracts and getSmartContracts from ApiService
- getCurrentIpoBids from qli stays (no replacement yet)
…ents - Add per-contract bid fetch error tracking with retry UI - Add global error state with refresh button for failed IPO loading - Encapsulate currentIpoContracts BehaviorSubject behind setter - Validate API response parsing with safe parseInt defaults - Remove dead SmartContract interface from api.model - Simplify switchMap + of to map in observable chain - Use nullish coalescing for tickNumber fallback - Add i18n keys for error states across all 11 locales
- Replace raw address with getAddressDisplayName for consistent formatting - Link share addresses to explorer instead of copy-to-clipboard - Remove unused getSeedName method
Replace the old /Wallet/CurrentIpoBids endpoint (qubic.li) with the new /aggregation/v1/getCurrentIpoBids endpoint on a dedicated aggregation service. Create ApiAggregationService following the one-service-per-API-tree convention. Add error handling with localized messages for bids load failures and simplify the IPO bid status icon to a hardcoded trx-executed since IPO bids are always SC calls (inputType=1, amount=0).
chore: merge main into dev
…factor/replace-qli-tx-submission # Conflicts: # src/app/constants/qubic.constants.ts # src/app/services/api.service.ts
The service had 20 endpoint methods but zero call sites. The only references were administrative (an unused import in app.component.ts and a module-level provider entry), both removed. Superseded by ApiQueryService in 50ec2d0; this was a parallel implementation that was never wired up.
Cleans up translation keys that have no template references after the WebSocket bridge / QubicService removal (dcd9c57): notifyComponent.qubicLiSync notifyComponent.qubicOffline notifyComponent.qubicOnline settings.general.title ("Web Bridge" header) settings.general.webBridge.placeholder settings.general.beta.placeholder Applied uniformly across all 11 language files.
Three small follow-ups noted in the latest code review: - Drop a dead conjunct in the archiver→record copy guard. transactionsRecord was cleared synchronously at the start of the method, so its length is always 0 by the time we reach that branch. The check now reads as intent: copy when there is anything to copy. - Add a matching '// stale response — a newer fetch superseded this one' comment to the error callback so a reader landing there gets the same context as the success callback. - Make the fetchSeq field type explicit (`: number = 0`) for parity with the sibling tick fields (viewStartTick / viewEndTick).
The IPO path in submitIpoTransaction was building a PendingTransaction without inputHex, losing the bid's price/quantity from local state the moment the broadcast succeeded. Other contract-call paths (asset transfers, transfer-rights) already capture inputHex via storePendingTransaction. Synthesize the same 16-byte input the chain receives (price int64-LE, quantity int16-LE, 6 bytes zero padding) and store it hex-encoded on the pending entry. Layout matches QubicHelper.createIpo. No interface change — inputHex was already optional on PendingTransaction; the IPO path was simply omitting it. Keeps the wallet's pending records protocol-faithful and gives future UI / retry flows access to the bid details without round-tripping to the chain.
Promotes the local const IPO_INPUT_TYPE = 1 in transaction.service.ts to a documented export in src/app/constants/qubic.constants.ts. Matches how other input-type constants are sourced in this codebase (via QubicDefinitions for QX_TRANSFER_ASSET_INPUT_TYPE, QUTIL_SENDMANY_INPUT_TYPE). QubicDefinitions does not currently expose an IPO input type, so we define it ourselves alongside the wallet's own constants.
The hex-encode chain Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('')
appeared twice: in encodeIpoInputHex (new IPO inputHex path) and in
storePendingTransaction (existing contract-call path). Extracted into
a private bytesToHex helper so the byte-to-hex convention lives in
one place — anyone who ever wants to change it (uppercase, spaced,
faster lookup-table encoding, etc.) has a single point to edit.
Both transaction.service.ts and apis/query/api.query.service.ts had
their own copies of byte-to-hex encoding (the same
Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('')
chain), one wrapped as bytesToHex (private), the other as base64ToHex
(private, with inline duplicated byte loop).
Moved both to a new src/app/utils/hex.utils.ts module, sitting next
to the existing shifted-hex.utils.ts. base64ToHex now delegates to
bytesToHex so the lowercase-hex convention lives in exactly one place.
Net effect: one canonical encoder, both services now consume it via
import. No behavior change.
Match the pattern used by LIVE_API_BASE_PATH and QUERY_API_BASE_PATH, and drop the duplicated path comment from api.aggregation.model.ts.
feat: replace qli tx submission
Port the explorer's getTransactionTypeDisplayLong helper into src/app/utils/transaction-type.utils.ts and use it to format the "Type" cell in the balance table. Display now reads "<label> (N)" instead of "N Standard|SC (<proc>)" and supports the "Place Bid" label for shares-auction bids and protocol input-type labels. Extends QubicStaticService to fetch /v1/general/data/protocol.json for the transaction-input-type labels and adds sharesAuctionEpoch to StaticSmartContract. Adds a per-epoch tick range cache on BalanceComponent so the tick->epoch lookup driving each row doesn't rebuild a Map and sort on every change-detection cycle.
feat: replace QLI /Wallet/Assets with aggregation batch endpoint
The previous unscoped `mat-card { max-width: 420px }` rule in
assets.component.scss matched every mat-card in the component template,
including the Send Assets form — capping it at 420px regardless of
screen width. Scope it to `.card-list mat-card` so only the asset
tiles are constrained, and add explicit width caps on `.asset-card`
to preserve the no-assets card's prior size.
The source-account dropdown in the place-bid form was populated from the unfiltered seed list, so read-only (watch-only) addresses appeared as selectable sources even though they cannot sign transactions. Filter them out, matching the pattern already used in payment, transfer-rights, sign-message, qearn/staking, and assets.
…ounts fix(ipo): exclude watch-only seeds from place-bid source dropdown
fix: scope mat-card 420px cap to .card-list grid tiles
…er last-processed tick
fix: source QEarn current epoch from live tick-info instead of archiv…
## [4.26.2](v4.26.1...v4.26.2) (2026-06-17) ### Bug Fixes * source QEarn current epoch from live tick-info instead of archiver last-processed tick ([70de123](70de123))
# Conflicts: # src/app/qearn/qearn.component.ts
The runtime 'yarn add commitlint@20.5.3' pulled @commitlint/cli v21, which requires Node >=22.12.0 while the job runs Node 20.x, breaking the commitlint check on every branch. Use the @commitlint/cli ^19.5.0 already installed via --frozen-lockfile instead.
chore: merge main into dev (v4.26.2 hotfix)
fix: restore pending bid display
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.