Skip to content

chore(release): promote dev to staging#268

Open
sallymoc wants to merge 72 commits into
stagingfrom
dev
Open

chore(release): promote dev to staging#268
sallymoc wants to merge 72 commits into
stagingfrom
dev

Conversation

@sallymoc

@sallymoc sallymoc commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

No description provided.

sallymoc and others added 30 commits March 12, 2026 16:18
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.
sallymoc and others added 30 commits May 26, 2026 23:43
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.
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
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)
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.

4 participants