Commit bb91c04
Fix MetaMask-mobile voting: ensure mainnet before signing the ballot (#16)
The ballot is EIP-712 signed with the domain pinned to mainnet (chainId 1).
MetaMask refuses to sign typed data whose domain.chainId doesn't match the
wallet's active chain. On desktop the wallet is already on mainnet so it's
invisible, but MetaMask mobile over WalletConnect keeps whatever chain the
user had open, so signing failed with the generic "Couldn't sign the ballot."
castVote now switches the wallet to mainnet before signing (votingApi
ensureSigningChain), re-reads the chain to catch wallets that ACK the switch
but don't change, and throws WRONG_CHAIN otherwise. safeWalletErr surfaces a
clear "Switch your wallet to Ethereum mainnet" message for both that sentinel
and MetaMask's native chain-mismatch error.
Zero impact on vote integrity: only the active network changes, never the
signed payload or the domain, so every ballot already cast still verifies
identically. Scoped to the vote path; the other signers (submit/delete) have
the same latent bug and can reuse ensureSigningChain next.
4 regression tests: switches when on the wrong chain then signs, no switch on
mainnet, refuses (no signature) when the switch fails, refuses when the switch
silently doesn't change chains. Full suite 152/152.
Co-authored-by: Xerxes <xerxes-openclaw@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>1 parent 8ad8e9b commit bb91c04
3 files changed
Lines changed: 90 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
156 | 161 | | |
157 | 162 | | |
158 | 163 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
313 | 313 | | |
314 | 314 | | |
315 | 315 | | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
316 | 352 | | |
317 | 353 | | |
318 | 354 | | |
319 | 355 | | |
320 | 356 | | |
321 | 357 | | |
| 358 | + | |
322 | 359 | | |
323 | 360 | | |
324 | 361 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
6 | 12 | | |
7 | 13 | | |
8 | 14 | | |
| |||
17 | 23 | | |
18 | 24 | | |
19 | 25 | | |
20 | | - | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
21 | 31 | | |
22 | 32 | | |
23 | 33 | | |
| |||
123 | 133 | | |
124 | 134 | | |
125 | 135 | | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
126 | 172 | | |
0 commit comments