Skip to content

Un-gate Send: ship the native-ETH send UI - #54

Merged
hellno merged 1 commit into
mainfrom
claude/un-gate-send-brief-hk1uuf
Jun 14, 2026
Merged

Un-gate Send: ship the native-ETH send UI#54
hellno merged 1 commit into
mainfrom
claude/un-gate-send-brief-hk1uuf

Conversation

@hellno

@hellno hellno commented Jun 14, 2026

Copy link
Copy Markdown
Owner

The daemon, frozen wire contract, and the app's key-less send transport (signer::send_blocking / approve_and_execute_blocking) were already built and tested; this adds the held-back UI surface that drives them.

  • New Surface::Send with a compose → review → hold-to-confirm → done flow mirroring the shield flow (shield_view.rs / shell.rs shield_*).
  • send_* state on Shell + open/reset/review/confirm/hold_start/hold_cancel, epoch-guarded exactly like their shield twins; lock() clears send state and inputs.
  • Recipient accepts a 0x address (parsed directly) or an ENS name (forward-resolved via EthProvider::resolve_name, the watch-address path).
  • signer::build_native_send_intent builds the native Send intent (token: None, empty calldata) the daemon already admits.
  • welcome.rs Send button un-gated (disabled only while viewing a watched account, like Shield); copy updated to "Swap arrives in the next release."
  • New send command in the ⌘K palette, handled in run_palette_command.

No contract/signerd changes; no new dependencies.

Tests: build_native_send_intent_is_a_native_send; palette count 9 → 10. cargo fmt --all --check clean; just check green on default and --features tray; cargo test --workspace green.

Screenshots

Captured live by running the app headlessly (software Vulkan + Xvfb — recipe + the screenshot convention land in #57).

Portfolio — Send un-gated (Swap still gated) Review — clear-signing card + hold-to-confirm
Send enabled on the Portfolio Send review card

The daemon, frozen wire contract, and the app's key-less send transport
(signer::send_blocking / approve_and_execute_blocking) were already built
and tested; this adds the held-back UI surface that drives them.

- New Surface::Send with a compose -> review -> hold-to-confirm -> done
  flow mirroring the shield flow (shield_view.rs / shell.rs shield_*).
- send_* state on Shell + open/reset/review/confirm/hold_start/hold_cancel,
  epoch-guarded exactly like their shield twins; lock() clears send state
  and inputs.
- Recipient accepts a 0x address (parsed directly) or an ENS name
  (forward-resolved via EthProvider::resolve_name, the watch-address path).
- signer::build_native_send_intent builds the native Send intent
  (token: None, empty calldata) the daemon already admits.
- welcome.rs Send button un-gated (disabled only while viewing a watched
  account, like Shield); copy updated to "Swap arrives in the next release."
- New "send" command in the Cmd-K palette, handled in run_palette_command.

No contract/signerd changes; no new dependencies.

Tests: build_native_send_intent_is_a_native_send; palette count 9 -> 10.
cargo fmt --all --check clean; just check green on default and --features
tray; cargo test --workspace green.
@hellno
hellno merged commit 977c6b5 into main Jun 14, 2026
5 checks passed
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.

2 participants