You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Send: show the estimated fee on the new-transaction page, shielded sends included #477
The send form doesn't show an estimated fee until later in the flow, and private (shielded) sends never show one up front. Users can't tell what a send will cost before they commit to it.
Proposed solution
Show an estimated network fee on the new-transaction page once the recipient and amount are valid. Refresh it when either one changes.
For private sends and shielding, also show the Privacy Pool fee, labelled as a separate line.
Fees should use the same formatting as the review screen, so the two never disagree.
Additional context
Related: #356 (affordability assumes a STRK-only fee), #358 (converted fees render as STRK), #441 (minimum balances for private send/unshield).
Acknowledged. I will show the cost of a send on the new-transaction screen, before the user commits:
A public send shows an estimated network fee once the recipient and amount are valid, refreshed when either changes. It is the same estimate and the same formatter the review screen uses, so the two cannot disagree.
A private route (shield, private send, unshield) also shows the Privacy Pool fee as its own line, attributed to the balance it is charged from, worded exactly as the review screen words it.
The estimate is presentation only: it never blocks the flow, and the review remains the figure the send is authorized against.
The amount step now quotes the composed fee before it is committed:
A plain public transfer shows the network estimate, taken from the review's own estimator and rendered through a helper the review also uses, so the amount screen and the review cannot word or format the same charge two ways. When the account must deploy first, the line is the deployment-inclusive total.
A pool route (shield, private send, unshield) states the pool's per-batch charge, in the same sentence the review's Cost box uses and attributed to the balance it leaves. It does not invent a network fee: a deposit's gas needs a proof that does not exist yet, so the preview shows only what is knowable.
The estimate is debounced by 400 ms and token-guarded, so a slow estimate for a superseded amount can never paint, and it carries the same read-only review request the review screen already used.
Checks: bun run check exit 0 (wallet-ui 1545 pass 0 fail, every workspace and every gate clean); bun run --filter @bramble/ui-lab check exit 0 (224 tests). On the pre-change tree a probe typed an amount and found no fee element at all; on this branch the same probe reads the fee.
Browser: UI Lab Storybook, desktop 1280x720 and phone 390x844 DPR3 on both surfaces. A plain send renders Estimated fee: 0.0024 STRK, a shield renders Pool fee: 6 STRK from your public balance with no network line, right-aligned under the value, no clipping or horizontal overflow on either surface or skin.
Two things worth flagging for review:
One existing guard changed meaning. sidepanel-transfer-recipient-enter.test.ts (audit chore(deps-dev): bump jsdom from 25.0.1 to 30.0.1 #248) asserted the amount step produced no wallet request. It now asserts what the request the preview makes must carry: the address on screen, never the previously chosen one.
No UI Lab checkpoint showed the amount screen with an amount entered, so the affected state could not be rendered or guarded. This adds two fixture-only checkpoints and their story assertions, disclosed in the PR. The lab's send binding gains a privacy fixture so a shield route can clear; public routes ignore it, so existing checkpoints are unchanged.
Limitations: axe cannot run against the lab's sandboxed srcdoc application document, so that scan is a best effort; the commits are not GPG-signed (this host has no signing key).
Activity
mossbot55 commentedon Oct 3, 2026
Acknowledged. I will show the cost of a send on the new-transaction screen, before the user commits:
The estimate is presentation only: it never blocks the flow, and the review remains the figure the send is authorized against.
mossbot55 commentedon Oct 3, 2026
Implemented in #521.
The amount step now quotes the composed fee before it is committed:
The estimate is debounced by 400 ms and token-guarded, so a slow estimate for a superseded amount can never paint, and it carries the same read-only review request the review screen already used.
Checks:
bun run checkexit 0 (wallet-ui 1545 pass 0 fail, every workspace and every gate clean);bun run --filter @bramble/ui-lab checkexit 0 (224 tests). On the pre-change tree a probe typed an amount and found no fee element at all; on this branch the same probe reads the fee.Browser: UI Lab Storybook, desktop 1280x720 and phone 390x844 DPR3 on both surfaces. A plain send renders
Estimated fee: 0.0024 STRK, a shield rendersPool fee: 6 STRK from your public balancewith no network line, right-aligned under the value, no clipping or horizontal overflow on either surface or skin.Two things worth flagging for review:
sidepanel-transfer-recipient-enter.test.ts(audit chore(deps-dev): bump jsdom from 25.0.1 to 30.0.1 #248) asserted the amount step produced no wallet request. It now asserts what the request the preview makes must carry: the address on screen, never the previously chosen one.Limitations: axe cannot run against the lab's sandboxed srcdoc application document, so that scan is a best effort; the commits are not GPG-signed (this host has no signing key).
derek-flossman commentedon Oct 13, 2026
Fixed in #521, merged into
release/v0.10.6through batch #642 (fecb613).