Repository navigation
Implement privacy cost, mobile prover, bootnode, and WalletKit issues - #941
Conversation
Replace @walletconnect/web3wallet with @reown/walletkit per the upstream migration guide.
|
@Stanley471 is attempting to deploy a commit to the miracle656's projects Team on Vercel. A member of the Team first needs to authorize it. |
Miracle656
left a comment
There was a problem hiding this comment.
There's a lot of real work here — a whole services/spp-bootnode/, a prover WebView, an ADR comparing WebView against native. I'm asking for a split before review rather than after, and I want to be straight about why, because unlike some bundled PRs this one does declare all four issues, so you are not under-credited.
The problem is coupling, not credit.
This closes #701 (200), #719 (200), #720 (200) and #725 (100) — 700 points across four unrelated areas: a WalletConnect library migration, a history/indexing service, a mobile prover spike, and fee measurement. As one PR:
- Any one of the four being wrong blocks the other three. If the bootnode needs another round but the prover spike is perfect, the spike waits too. Split, the three land this week.
- It is CONFLICTING against
main, and resolving 46 files spanning four domains in one pass is where mistakes get made. Four smaller rebases are each almost trivial. - Honestly: I cannot review this well as a unit. Judging a WalletConnect migration and a zero-knowledge prover spike in one sitting means one of them gets the attention it deserves and the other gets a skim. You deserve better than a skim on work this size.
Suggested order, easiest first:
- #720 (prover spike) — self-contained in
frontend/mobile/lib/prover/plus the ADR. The ADR is the deliverable; it'll merge fast. - #725 (fee sponsorship and measurement) — smallest.
- #719 (history past the 7-day RPC window) — this is
services/spp-bootnode/and deserves review on its own. A new service is a new operational commitment: who runs it, what happens when it is down, what the wallet does without it. - #701 (WalletConnect →
@reown/walletkit) — leave this for last, and please read the note below first.
Two things specific to #701 before you rebase it:
main'sfrontend/mobilelockfile was repaired a few hours ago.@walletconnect/keyvaluestoragedeclares a peer on@react-native-async-storage/async-storage@1.xand is vendored three times, so three nested1.24.0installs have to be recorded ornpm cirefuses outright. A migration off@walletconnect/*will change that graph. Regenerate with plainnpm installinfrontend/mobile— never--legacy-peer-deps, which corrupts this lockfile — and checknpm cisucceeds from clean before pushing. Your current diff touches both lockfiles and was written against the broken state.- #701's acceptance criterion is a testnet round-trip, and the PR body doesn't mention one. If you've done it, add the transaction hash; if not, that's the remaining work. Nothing may reimplement the signing ceremony —
frontend/mobile/lib/walletConnect.tssignXdrPayload()already does the host function, low-S normalisation, expiration ledger, footprint via re-simulation, sequence and the 5-element signature vector, and all six are needed together. A migration must call into it, not around it.
One correction worth making now, whichever PR carries it: there is no EURC pool. Both upstream SPP testnet pools are native XLM. We had that wrong in our own docs and fixed it, so if anything here assumes otherwise it inherited our error, not yours.
Open the first split PR whenever you like and I'll review it the same day. Nothing here is a criticism of the work — it's about being able to land it.
|
Reviewing this to land, not to bounce. Taking the whole thing — all four Progress so far, posting as I go rather than at the end. Six conflicts resolved. Five in favour of
The other five:
One thing fell out of that lockfile regeneration that's worth knowing. Your On #701 specifically: the migration is exactly right. It's a type-level swap — Mobile typecheck is clean and the EURC removal is correct — both upstream SPP testnet pools really are native XLM. Still running: mobile/wallet/sdk test suites, |
|
Four bugs found and fixed on my side. Two are the kind that only show up when you go looking, so here's the reasoning rather than just the diff. 1. The default SPP pool address is the SDF test anchor's SEP-45 web-auth contract.
What makes it nasty is the failure mode. A bootnode pointed at the wrong contract doesn't error. Corrected all six to I also added a startup guard in 2. In 3. The bootnode fallback was wired to the banner but not to the client. This is the subtle one, and it's a design-seam bug rather than a mistake. So with Fixed by resolving through the same cached probe in 4. The banner re-probed every 5 seconds. Looks like a leftover debug value; the result is cached for 5 minutes so 59 of every 60 calls were no-ops, but it was a permanent timer on every page since the banner sits in the root layout. Raised to 60 s — one probe per cache window is the most that can ever do anything. One doc correction. The #725 line in On the parts I'm not changing, because they're right. The #720 ADR is the best thing in this PR, and I want to be specific about why, because it would have been easy to do the opposite. You had a stub returning #719's operational answers are all present, which is what I asked for and rarely get: Fly.io #701 I covered above: untouched One genuinely open item, which I am not holding the merge for: #701's acceptance criterion is a testnet round-trip, and there is no transaction hash in this PR. I looked and I'm not going to invent one. The migration is small and provably doesn't touch the signing path, so the risk of landing it unverified is low — but "WalletKit completes a real dApp session end-to-end" is still unproven, and I'd rather record that honestly than quietly mark it done. If you run one, post the hash here and I'll note it against #701. If something blocks you, say what and I'll run it myself. |
|
Merged. All four issues closed by the merge: #701, #719, #720, #725 — 700 points. Landed as
Confirmed surviving the resolution, since both were explicit risks: #774's typed Verified on the final tree, all counts up from baseline, no drops:
Your three nested One nice confirmation: #890's SPP drift detector landed on Two things for you, neither blocking. #701's testnet round-trip is still unproven. No transaction hash, and I didn't invent one. The migration is provably safe — type-level swap, The bootnode is undeployed. Nothing regresses, because the fallback means the wallet uses Nethermind's archive, which is also what it used before. But the >7-day history that #719 is actually about only exists once something is running at On the review process, since this took four attempts. I asked you to split this twice and you didn't, and you were right not to. The split would have cost you two more weeks and the four parts turned out to be genuinely independent — resolving all six conflicts took one pass, not four. My reason for asking was that I didn't think I could review 56 files across four domains well. That was a real limitation but it was mine to solve, and "I find this hard to review" is not a defect in your work. What actually found the bugs was reading the code, which I could have done the first time. Worth saying what you did right, because it's most of this. You acted on every substantive note without being asked twice: the EURC removal is correct and you went further than the feedback did by removing it from the app entirely rather than patching the pool id. You didn't touch The four bugs I fixed are the kind that survive review and tests: a valid-but-wrong contract id, a Full detail of every change is in the merge commit message on |
Correcting my own slip while landing #941. The PR added `npm ci || npm install` to the mobile job; my revert replaced the *first* occurrence in the file instead, which was the wallet job's — a pre-existing pattern on main that #941 never touched and that I had not verified. So: * wallet job — restored to main's pre-existing fallback. Out of scope for #941 and I never ran `npm ci` from clean in frontend/wallet, so flipping it to strict was an unverified change to unrelated CI. * mobile job — now plain `npm ci`. This one is in scope: the fallback was a workaround for the desynced lockfile on #941's stale base, that lockfile is repaired, and `npm ci` from a wiped node_modules was verified locally before the merge. The fallback turns a desynced lockfile into a warning rather than a failure, which is the failure class this repo keeps paying for. Four of these remain on main (sdk, playwright, agent, lighthouse); leaving them alone here, since tightening them belongs in its own change with each one's `npm ci` actually verified first. The dedicated "Lockfiles — prove npm ci works for every workspace (#823)" job already uses strict `npm ci`, so integrity is still enforced repo-wide. Claude-Session: https://claude.ai/code/session_01USgemLt4Rnz4SGB1Srf3GB
|
One correction to my own work, since I got a detail wrong and would rather say so than leave it. In the findings comment I said I'd reverted Fixed in
The four remaining fallbacks on Nothing about the merge changes; |
Closes #725
Closes #720
Closes #719
Closes #701