Skip to content

v1.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Nov 16:49
· 57 commits to dev since this release
Immutable release. Only release title and notes can be modified.
7793112

What's new in 1.2.0

Clearer sends and app approvals, a recovery phrase check for new wallets, and a new default Testnet node.

  • Testnet connects through a new default node. A wallet still on the old default moves to it at its next unlock; a node address you set yourself stays.
  • Send: the token picker lists what you hold and adds a token from a pasted address, a zero balance reads 0, sends in progress show in a toast and in History, and a refusal shows beside the balance.
  • App approval windows list what leaves your account with the fee, say which calls Nulo cannot check, and name another of your accounts when a send uses its authorization. A failed fee or authorization preview can be retried, and a fee estimate waits behind a send in progress instead of failing.
  • Setting up a wallet checks three words of the recovery phrase before Ready, and the phrase step closes itself after 5 minutes.
  • The lock screen offers "Forgot your password?" or "Lost your passkey?", and a full backup downloads protected in one step.
  • Receive and the Send review show the whole address, and Receive names the network.
  • Long forms show a round "more below" button.
  • The token list refreshes about every six hours, and on request in Settings → Tokens. Dollar values come from the signed list, so a token it prices shows one without a wallet update.
  • The sponsored fee payer is offered only on Testnet and the local network.
  • Also: a Switch button on each network in Manage networks, a password hint that judges how guessable a password is, ten new glossary entries, and a question before auto-lock is set to never.
  • The Privacy Policy (1.2.9) describes the token list's refresh and the price requests. Nothing needs accepting again.
  • Over 60 fixes across send, fees, app windows, onboarding, backup, import and storage.

1.2.0

Install

The stores review each version, so they can trail this release by a few days.

Verify or load by hand

The zips below are the same builds. Verify them with shasum -a 256 -c SHASUMS256.txt. To check that this repository's release workflow built them from this commit, run gh attestation verify nulo-chrome-1.2.0.zip --repo nulo-sh/nulo --signer-workflow nulo-sh/nulo/.github/workflows/release.yml --source-digest 7793112bc70849bc3817e468b3862294bc1b3522 --deny-self-hosted-runners, and the same for the Firefox zip. To load the Chrome zip by hand, unzip it, open chrome://extensions, turn on Developer mode and click Load unpacked. The Firefox zip is unsigned; the signed build comes from Firefox Add-ons.


Bug Fixes

  • No client batch cap on the free node endpoints (#1660) (network) 25a08e0
  • Name authorizations a send consumes for another approved account (#1649) (execution) 040334f
  • Offer the sponsored fee payer only on testnet and the local network (#1652) (fees) 5d41de8
  • Recovery link, delete checks, password toast, connect window words (#1640) (security) 66f762b
  • A call string the card cannot print whole says so; utf-8 text prints (#1646) (execute) 3174dd4
  • Raise the free node endpoints' batch cap from 3 to 25 (#1643) (network) df26e45
  • The refreshing dot stays lit while a newer refresh of the same row runs (#1637) (home) 0861ade
  • Keyless dRPC defaults with a batch cap of 3, old testnet rows moved (#1622) (network) 3b845ef
  • An address pasted with invisible characters at its ends reads as the address (#1617) (send) e5cffd8
  • E2e lane filters name what each lane runs; the docker runner reaches its tests (#1583) (ci) a0458e2
  • A failed read or write never overwrites, strands or wipes what is stored (#1576) (storage) 846030f
  • An app page's late read, new sender's enter, invisible characters in searches (#1580) (popup) 038901c
  • A locked Connect retry drains on unlock, and an early window close settles (#1573) (dapp) 5b3b05a
  • Keep a live account's key, fence a departed import, export no pending send (#1570) (import) 93b9a2d
  • The receipt page follows its link, and a failed read is not "not found" (#1558) (received) 2575c86
  • One-step full backup, described modes, a named risk, a profile-free file name (#1559) (backup) ed30c25
  • Send's first load keeps a balance update that lands during it (#1551) (send) b21fcda
  • Sign and list only authorizations on behalf of the sending account (#1552) (execution) f6d96be
  • A long network name wraps inside the takeover and the network arrival (#1550) (ui) 6509f2f
  • Open on the funded side, show a pasted address's start, outline one priority (#1544) (send) 9348b85
  • Plural helper, "already exists", strict mode's line and the store's audit note (#1543) (copy) 9cb3403
  • Ready's line in plain words, and back stays on ready (#1542) (onboarding) c4173bb
  • Fee payer, token and sender popups refuse an address at or above the modulus (#1500) (popups) d64f317
  • The detail page closes the network and account clients it opens (#1497) (connected-apps) ed1150a
  • A dapp send waits as asked and keeps its additional and capsule scopes (#1485) (execution) 60e0ef1
  • Disconnecting an app also cancels its send's open fee question (#1489) (dapp) a39d1b2
  • A long network name wraps in the dapp windows and the backup reset notice (#1498) (ui) f94e500
  • The tx page shows when a send was made, and a failed fee estimate offers a retry (#1496) 902b158
  • A deleted token's id is never given to another token (#1487) (tokens) 3af5f78
  • A dapp send's public authwits are listed once the network took the send (#1483) (authwit) dfa3d64
  • A boot resume erases only its own deletions, and no listener is skipped (#1484) (profiles) f8a7b7b
  • A refused log page ends the scan tick, backs off and shows the stall (#1482) (incoming) fcc4da2
  • A cancelled dapp send never restarts when its queued row cannot be read (#1481) (execution) f738cba
  • A dapp send's public authwits are indexed when its history write fails (#1424) (authwit) cadc6f8
  • The unlock method is fixed at submit and an empty password is refused (#1423) (profiles) d5d8fda
  • A disconnect ends its requests, a restart reads interrupted, latest connect wins (#1414) (dapp) cdb61d0
  • History orders sends by when they were sent, and a failed fee estimate offers a retry (#1415) a89db85
  • Typed addresses, app aliases and settings searches drop invisible characters (#1409) (ui) a463950
  • Sign refused keys, count password characters, clear a stale token refusal (#1403) (inputs) 7bde519
  • Render the duplicate confirm and keep a reload off a false ready (#1400) (onboarding) eec97bd
  • The takeovers' lock chip is its padlock, and the terms box says alpha (#1399) (ui) 13bb213
  • A long network name wraps inside the chain banner (#1398) (capabilities) c9cf614
  • Name the default network alpha and give the header's chips room (#1369) (ui) 9fba3c2
  • A long name wraps inside the restore texts (#1366) (restore) 88633a4
  • A fee method switched while queued reads estimating until the wallet answers (#1362) (execute) a4da1f3
  • Estimates queue behind a send, report their run, and outlive 60 s (#1351) (fees) 3d7611c
  • A token imported from the picker keeps the sides the person had (#1346) (send) 87d0411
  • Confirm waits for the fee estimate, and its authorizations outlive the queue (#1344) (execute) f11178b
  • Disable auto-close on the phrase screen hands focus to close (#1321) (settings) 4aa5fd4
  • A settle keeps the selection a newer pick in another window names (#1320) (lock) 2914b96
  • A stale-network or arrival read that a lock ends logs at debug (#1319) (popup) 49b5732
  • A string wider than the notice card breaks inside it (#1277) (ui) f1b0c9c
  • Wrong passwords and refused passkeys log at debug (#1302) (logs) 756ad00
  • Handle lock refusals at their calls, and vue's disconnect errors at debug (#1297) (popup) ee45a7f
  • An account file once saved says so (#1286) (backup) 2ecbc33
  • The duplicate-phrase confirm names every profile on it (#1285) (profiles) da2d472
  • Ask before auto-lock is set to never (#1283) (settings) 0d14303
  • An address edit re-reads its fee payer; a reset discovery logs at debug (#1291) (fpc) c2852ea
  • An import or a new profile a restart overtook lands on the lock screen (#1289) (popup) ea144d5
  • The lock screen and export pages drop what a session left typed (#1272) (popup) d116546
  • Stop a cancelled send before its proof; close three test races (#1271) (execution) 146f2d8
  • A gas retry or a pxe read that a lock or purge ends logs at debug (#1268) (logs) 2e524ef

Build / CI

  • A root tsconfig base holds the compiler options every workspace shares (#1592) (ts) f72de58

Chore

Documentation

  • Retire, route and promote lessons.md entries in one pass (#1350) (plans) 94ac9cf
  • The 1.1.0 release notes cover 0.31.0 to 1.1.0 (#1251) (store) 232b00c

Features

  • A "more below" button on screens whose content runs past the fold (#1666) (popup) 1a46f99
  • Refresh every six hours, and a manual refresh on settings → tokens (#1625) (token-list) ea282b7
  • The shared password pair on "Create profile", two config reads on useConfigRead (#1621) (ui) 250cec0
  • The signed list carries each token's price feed (#1612) (token-list) 67c1ac5
  • The chip says its status, 240 px fits, full addresses, holdings refresh dot (#1581) (ui) 6c7ba28
  • Sends in progress in a toast and history, refusals by the balance (#1572) (send) 1b09f04
  • A phrase check before ready, create profile, a popup pointing to the tab (#1567) (onboarding) 51a6924
  • Retry a failed app fee or authorization preview, total what leaves (#1568) (execute) 00895db
  • Ten first-path entries, proof dotted, how aztec works says website (#1560) (glossary) b243579
  • The new-password hint measures guessability, not only length (#1503) (password) baec793
  • Name the network where an address changes, toast a new account, hold get started (#1545) (ui) c17dfc1
  • Ready names a created wallet's unsaved recovery phrase (#1480) (onboarding) 8bb36c3
  • The token picker lists holdings and adds a pasted token; the corner shows 0 (#1342) (send) af025cf
  • A switch button on each inactive row of manage networks (#1334) (networks) b036edb
  • One line under the calls says which ones nulo cannot check (#1332) (execute) beb6355
  • After a delete, the lock screen selects a profile (#1287) (lock) 50baa40
  • The phrase step closes itself after 5 minutes (#1284) (onboarding) d4eb7ec

Other

  • Promote dev → main (clearer sends and approvals, phrase check, new Testnet node) (#1671) 7d2ac6c
  • Promote dev → main (launch email asset, store release notes) (#1255) c969a21
  • Merge remote-tracking branch 'origin/dev' into chore/sync-main-dev-2 e6af626

Refactor

  • One new-password pair, one current-password field, one length cap (#1600) (ui) c77e77f
  • One stored-passkey ask, and leavePanelFor on the four passkey pages (#1599) (popup) b20da9b
  • One reveal frame and credential check in ProfileService, one pxe log router (#1597) ad57a13
  • One helper for deadline and abort races, in place of seventeen copies (#1598) cca0a7f
  • One row card, named amount widths, task and re-ask hooks off the feed (#1596) (activity) 422e229
  • The trust gate in the wallet layer, one pick and decrypt classifier (#1595) (backup) aaaf927
  • One copy of each send step, one confirm list in the execute window (#1591) (execution) 78815e9
  • Move the slot codec out of ProfileService (#1589) (profile) 88dfdcd
  • Background.ts in three modules, and a test that the edge headers agree (#1587) 1373308
  • The managers registry's client slots get owned writers and go read-only (#1588) (popup) 0b14e59
  • One lane surface, a registration executor, no registry import cycle (#1585) (execution) cf9ed1e
  • One owner each for unlock sealing, fenced creates, purge match, seams (#1584) (services) 5bb2593
  • One private-fetch recipe, and the fee window shares execute's prelude (#1501) 85b783d

Tests

  • The update test expects the sponsor's removal where its chain offers none (#1665) (e2e) 5e3d7bd
  • The egress guard declares each release's Testnet host for the update scenarios (#1650) (e2e) 8ad61eb
  • The v1.1.0 recording refreshed for the 1.2.0 candidate (#1641) (e2e) 6bef2ce
  • The sandbox node's admin rpc takes a per-run key (#1422) (e2e) 3e8b8f6
  • The firefox driver answers the file picker instead of racing it (#1411) (e2e) 57162aa
  • The passkey window's discovery and refusal on Firefox, concurrent restores (#1378) (profile) 9ce6bb0
  • The chaos model races a delete or a method change against an open page (#1367) (profile) 8046c9e
  • A seeded sequence test over fee estimates, queue and confirm timing (#1361) (execution) 15a9bd9
  • The flag-on-paste check runs only in source runs, so the nightly smoke passes (#1352) (e2e) 25fe44c
  • Run the firefox suite on puppeteer's firefox 158 (#1338) (e2e) c0ead8b
  • In-process sequences for the profile chaos scenario list (#1331) (profile) b7cd053
  • The reopen and re-ask failures name what they saw (#1326) (e2e) 0a65972
  • A seeded in-process sequence drives the profile chaos catalog (#1324) (profile) 843d27f
  • The profile chaos pre-update start runs from every reviewed release (#1322) (e2e) 5ef0c11
  • The update scenarios run from v1.1.0 (#1314) (e2e) 210d02f
  • BringToFront and setViewport go through the driver (#1309) (e2e) 89b07a0
  • Profile chaos drives passkey imports, method changes and shared passkeys (#1301) (e2e) dda8023
  • Wait for the terms verdict and the fee read (#1298) (e2e) 0d5b196
  • Four whole-tree guards parse only the files that can hold a finding (#1280) c08c2b2
  • Three unit tests stop depending on host speed and the runner's git (#1269) 8017e3f