## gemwalletcom/wallet — 2.114.60…2.114.61

_120 commits._

### Features
- **Add associated asset to perpetuals** (8149dda)
- **Add Bridgers swap provider (#1411)** (2cb6047)
- **Add VM296 for one device-sync trigger on both apps** (429ab2e)
- **Support chat reads its list phase from Core (VM262)** (45cc90f)
- **Core: notifications and support use their repositories (CLN464)** (5d80764)
- **Core: support webhooks publish through the queue trait (CLN458)** (328415f)
- **Core: pause .sol resolution until SRS support (X173)** (a2c0d42)

### Fixes
- **Fix the available balance being cut off on the Buy screen (#1471)** (2579c01)
- **Fix chart rendering with shared validated ranges** (9d5940d)
- **Fix cross-chain swap transaction classification** (1508454)

### Backend
- **Bump to 2.114.61 (iOS 232, Android 874)** (0dd1bbb)
- **Convert amounts by shifting the decimal point instead of dividing** (2968dfd)
- **Deposit to Perpetuals from HyperCore spot USDC (#1431)** (87db5b3)
- **Load portfolio assets and prices in one query each** (feb4109)
- **Sort swapper provider imports** (5b42788)
- **Clean up chart function migration** (3ec856e)
- **Android: key asset picker, search and perpetual list rows** (252076d)
- **Aggregate exact chart buckets** (d7d838d)
- **Android: read a row's action only when the row can be tapped** (b6fc7f3)
- **Android: decode NFT images at their displayed size** (712e9ca)
- **Skip unchanged price asset mappings** (d2c8121)
- **Batch transaction push notifications per block** (dadd79c)
- **Filter undeliverable price alerts in storage** (f4dd040)
- **Check pending transactions on several chains at once** (e984694)
- **Core: align Hyperliquid fee estimate with order size** (8ead11f)
- **Update GRDB to 7.11.1** (59cf857)
- **Open the iOS database in WAL mode with full sync** (f56863e)
- **Reuse configured date formatters for transaction dates** (b964081)
- **Share one list_phase export across store-observed lists** (9c86e44)
- **Build Gemstone release at opt-level s on both apps** (b043c06)
- **Store realized PnL in transactions_perpetuals** (8cd8198)
- **Cache empty subscription lookups** (00c6b7a)
- **Core: identify internal security scan provider** (213cbfe)
- **Omit empty associatedAssetId from asset details** (08918a8)
- **Cascade perpetual associated asset deletes like other asset references** (39ac628)
- **Android: scan a QR code when importing a wallet (#1473)** (faeb5e2)
- **Open the Hyperliquid socket without waiting on markets or the mode** (709736c)
- **Improve chart point selection (#1443)** (ffea330)
- **Show money under $0.99 with at least two decimal places** (63074ed)
- **Android: keep the fiat provider list as it opened while quotes refresh** (f39ffa9)
- **Keep Swap details open with the error when a quote refresh fails** (4576697)
- **Android: show the loading indicator in Swap details while quotes refresh** (a04460b)
- **Android: keep the typed wallet name while renames save** (343c0cc)
- **Android: keep the Confirm error sheet open across refreshes** (a2d512a)
- **Android: keep a typed custom fee across Confirm refreshes** (5de3670)
- **Core: apply Hyperliquid referral discount to fee estimates** (bb74a46)
- **Buy and sell read an amount typed in non-Latin digits (#1474)** (6c36846)
- **Core: stop setting up every wallet at app start** (ba7dde2)
- **iOS: look up the current wallet by id in the view model factory** (b61578f)
- **Remove dead helpers, forwarders and orphaned signing code** (7717e60)
- **Android: the app lock offer stays open when the screen is recreated (#1469)** (6171967)
- **Stake reads asset APR through the assets service (#1468)** (839fac9)
- **Android: a repeated import failure shows its error again (#1467)** (cd2a023)
- **Fail closed on unreadable Android password storage and keep the password keyset encrypted (#1387)** (d023c06)
- **Wallet home reads its collections preview from Core (#1466)** (9a55446)
- **Custom fee takes a base fee and a tip on EVM networks (#1419)** (b416b16)
- **Asset catalog reads through the assets repository (#1465)** (29a07e7)
- **Wallet perpetuals preview reads its state from Core (VM290)** (331734f)
- **Avatar picker reads its list phase from Core (VM290)** (35e2e96)
- **Android: size foreign-future result structs before first use (X174) (#1445)** (cf5782c)
- **Currency and import-type searches read their phase from Core (VM290)** (ab8e495)
- **Network searches read their list phase from Core (VM290)** (c0fe53e)
- **Network assets read their list phase from Core (VM290)** (9820dd4)
- **Validator selection reads its list phase from Core (VM290)** (6400644)
- **Stake and earn read their list phase from Core (VM290)** (40a85cd)
- **Contacts read their list phase from Core (VM290)** (22bb89c)
- **WalletConnect connections read their list phase from Core (VM290)** (8241874)
- **Android: read recipient wallets for the asset chain only** (5a7a105)
- **iOS: read recipient wallets for the asset chain only** (00b3669)
- **Core: build recipient sections from WalletAddressItem** (eac5f06)
- **Perpetual markets read sections and phase from Core (VM262)** (1446eff)
- **Cache shared asset catalog** (4924472)
- **Android: keep the Rust symbol table for Play's crash symbolication (#1463)** (70b517b)
- **NFT lists read their phase from the Core list screen (VM262)** (255eccb)
- **Remove the device subscriptions signature** (48b78a5)
- **Optimize chart aggregation freshness** (f21e1f3)
- **Notifications read their list phase from Core (VM262)** (a7b8b17)
- **Price alerts read their list phase from Core (VM262)** (f4b9be1)
- **Fiat history reads its list phase from Core (VM262)** (27f03cf)
- **Activity and asset transactions read their list phase from Core (VM262)** (cab93bd)
- **Core: bundle logos for every official stablecoin deployment** (2cb3fdc)
- **Android: read the wallets list from the wallets table only** (1772fec)
- **iOS: read the wallets list from the wallets table only** (2d3c7ca)
- **Core: build wallet sections from a slim WalletListItem** (b324d71)
- **Core: rewards use a rewards repository; services stay off Database (CLN464)** (9050794)
- **update CJ translations** (cd7048b)
- **Core: device and wallet clients use a devices repository (CLN464)** (b188b59)
- **Core: setup runs through a setup repository (CLN464)** (c153a06)
- **Core: access, app config and system jobs use repositories (CLN464)** (ea81fec)
- **Core: fiat, NFT, DeFi, scan and indexer services use repositories (CLN464)** (2d55638)
- **Core: transaction writers use the transactions repository (CLN464)** (535a5f5)
- **Core: transaction readers, swap and perpetual lookups use repositories (CLN464)** (92f5a76)
- **Core: portfolio and price alerts use the prices repository (CLN464)** (623367a)
- **Core: price updaters and consumers use the prices repository (CLN464)** (b499d8b)
- **Core: price, chart and market clients use a prices repository (CLN464)** (992399a)
- **Core: search index updaters read through a search repository (CLN464)** (8a43d49)
- **Core: asset units and lists use the assets repository (CLN464)** (d3eaed6)
- **Core: asset reads and writes go through the assets repository (CLN464)** (52b26a6)
- **Core: service constructors receive completed dependencies (CLN463)** (b138d18)
- **Core: fiat and rewards return typed service errors (CLN462)** (dec9262)
- **Core: rewards and scan load typed configuration (CLN461)** (1e833e5)
- **Core: ConfigCacher reads through a config repository (CLN461)** (bb2fdc5)
- **Remove speculative Chainflip classification** (75f56d3)
- **Core: search goes through a typed SearchProvider (CLN460)** (a445f52)
- **Core: push delivery goes through a PushProvider trait (CLN459)** (fa9e5e9)
- **Android: resume APK install after permission grant** (4fb9e2a)
- **Core: wallets and indexer publish through the queue trait (CLN458)** (338244e)
- **Core: price and asset publishers use the queue trait (CLN458)** (a768b5d)
- **Core: notification publishers use the queue trait (CLN458)** (c85d5a5)
- **Core: transaction consumers publish through the queue trait (CLN458)** (e619a88)
- **Core: rewards publish through the queue trait (CLN458)** (2050d61)
- **Core: fiat webhooks publish through the queue trait (CLN458)** (f3e6316)
- **Core: missing rows default, failed reads propagate (AUD464)** (93e7079)
- **Payload rows render through the shared list row (VM267)** (46cd480)
- **Android: drop dead models and unread composition locals (CLN465)** (d859b32)
- **Select asset reads its sections and phase from Core (VM262)** (fa33db4)
- **Core: one CacheKey-based CacherClient call per Redis operation** (6a44835)
- **Core: cacher files drop the repeated _cacher suffix** (9af8057)

### Docs
- **Docs: show number examples as value and output rows** (3517df3)
- **Docs: move shared product rules into PRODUCT.md sections** (785aaa1)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/gemwalletcom/wallet?utm_source=github-action)._