gui: Houdini private send prototype (swap-to-address)#6031
Conversation
📸 Test evidence: real ETH→BTC Houdini private send on iOS simagent proof 1215648766077587 01 houdini scene agent proof 1215648766077587 02 source picker agent proof 1215648766077587 03 configured agent proof 1215648766077587 04 private quote confirm agent proof 1215648766077587 05 swap success agent proof 1215648766077587 06 onchain tx Captured by the agent's in-app test run (build-and-test). |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 3 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 731069c. Configure here.
|
Comments from Paul: "1. log privacy, blockchain privacy, address type needs to be factored in |
731069c to
d56d281
Compare
A dev-only swap-to-address flow reachable from the Developer test scene. Pick a funded source wallet, pick a destination asset from Houdini's supported set, paste a destination address (validated with Houdini's per-chain regex), get a live private quote, then create the private exchange order and broadcast the on-chain deposit via core's swap-to-address path. Registers the HoudiniSwap plugin and its initOptions. Restricts the prototype request to the houdini plugin so a swap-to-address quote does not fan out to other providers.
The swap-to-address change in edge-core-js makes EdgeSwapRequest.toWallet and EdgeTxActionSwap.payoutWalletId optional (a private send has no destination wallet). Narrow toWallet to its always-present value in the wallet-to-wallet swap scenes, and tolerate a missing payoutWalletId in the transaction-action mappers, so these consumers compile against the new core.
d56d281 to
b89674f
Compare
|
Re Paul's 3 review points: 3. toAddressInfo dedup (done). 1. Log / blockchain privacy and address type (plan, needs design alignment).
2. getMemo via Houdini's synthetic wallet (plan). Agreed the full memo/tag design is a large lift. The lighter path: Houdini's synthetic destination wallet exposes a |







CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
EdgeSwapRequest.toAddressInfo)This branch consumes APIs that are not published yet, so CI will fail until both deps publish and the version pins here are bumped. Opened as a draft for that reason.
Requirements
If you have made any visual changes to the GUI. Make sure you have:
Description
Asana: https://app.asana.com/0/1215088146871429/1215648766077587
A minimal, dev-only prototype of a Houdini private send: a swap-to-address flow reachable from the Developer test scene.
What it does:
HoudiniPrivateSendScene, reachable from Dev Tab > "Houdini Private Send".WalletListModal.src/util/houdiniPrivateSend.ts). A production flow would source this dynamically from Houdini'sGET /chains.TextInputModal, validated with the per-chain address regex from the matrix. No new address component.EdgeSwapRequestwithtoAddressInfo(no destination wallet), gets a live Houdini private quote, creates the private exchange order, and broadcasts the on-chain deposit through core's swap-to-address path, then lands on the existingswapSuccessscene.houdiniswap plugin and itsinitOptions, and restricts the prototype request to the houdini plugin so a swap-to-address quote does not fan out to other providers.The second commit adapts the existing wallet-to-wallet swap scenes to the now-optional
toWallet/payoutWalletIdintroduced by the core change.Verified in-app on the iOS simulator: a real ETH to BTC private send executed end to end (live private quote, private exchange order created, ETH deposit broadcast on-chain, success scene). Proof screenshots are attached below.
Follow-ups:
GET /chains), add token destinations, and wire memo /destinationTagfor the memo-required chains.Note
Medium Risk
Touches swap quoting/approval and on-chain deposits with real funds; wallet-to-wallet paths now throw if
toWalletis missing, but the new flow is dev-gated and Houdini-only.Overview
Adds a dev-only Houdini private send prototype: a new
HoudiniPrivateSendScene(Dev Test → navigation) where users pick a source wallet, a hard-coded destination chain fromhoudiniPrivateSend, and a validated paste-in address, then build anEdgeSwapRequestwithtoAddressInfo(notoWallet), fetch quotes with only thehoudiniplugin enabled, confirm, andapprove()to create the private order and broadcast the deposit before routing toswapSuccess.Wires Houdini into the app via
HOUDINI_INIT/swapPlugins.houdiniand adds localized copy plus thehoudiniPrivateSendroute.Adapts existing wallet-to-wallet swap and display code to optional
toWallet/payoutWalletIdfrom core: explicit null checks (or throws) in swap create/confirm/processing, quote UI, andSwapProviderRow; safer category labeling whenpayoutWalletIdis missing; emptypayoutWalletIdfor swap-to-address in transaction details.Reviewed by Cursor Bugbot for commit 731069c. Bugbot is set up for automated code reviews on this repo. Configure here.