[bug] eth_sendTransaction returns 65-byte ECDSA signature instead of tx hash via wagmi baseAccount connector
- Dominant language
- TypeScript
- Stars
- 172
- Forks
- 207
- Avg merge
- 49m
- Merged PRs (30d)
- 1
Description
### Description
When using the `baseAccount` wagmi connector (via Reown AppKit), `eth_sendTransaction` returns a **65-byte ECDSA signature** (packed `r + s + v`) instead of a standard 32-byte transaction hash. This causes `waitForTransactionReceipt()` to fail with:
```
InvalidParamsRpcError: invalid argument 0: hex string has length 130, want 64 for common.Hash
```
### Steps to Reproduce
1. Connect with Coinbase Wallet using the `baseAccount` wagmi connector (via `@reown/appkit` v1.8.17)
2. Call `sendTransaction()` via wagmi's `WalletClient`
3. The returned hash is 65 bytes (130 hex chars) instead of 32 bytes (64 hex chars)
4. Passing this to `waitForTransactionReceipt()` → `eth_getTransactionReceipt` fails
### Example invalid response
```
0x03fdfd595361b21b53574b61e8dec99b1840150e1a38440f59b74fef209bb7c1
4e58f33b45a03c90f19685177b6d91cf1a5ad5f5be5408f9f932301f7a4a35b01b
```
Last byte `0x1b` = 27 = `v` recovery byte → this is a packed ECDSA signature, not a tx hash.
### Expected behavior
`eth_sendTransaction` should return a standard 32-byte (64 hex char) transaction hash after the UserOperation has been bundled and submitted on-chain.
Looking at `Signer.ts`, `eth_sendTransaction` is delegated to the wallet popup via `sendRequestToPopup()`. The popup should handle the full flow (create UserOp → submit via bundler → return on-chain tx hash), but it appears to return the raw signature instead.
### Context
This issue was surfaced while investigating [reown-com/appkit#5494](https://github.com/reown-com/appkit/issues/5494) and [reown-com/appkit#5541](https://github.com/reown-com/appkit/issues/5541). AppKit v1.8.x migrated from `coinbaseWallet` to `baseAccount` connector (PR [reown-com/appkit#5269](https://github.com/reown-com/appkit/pull/5269)), which now forces all Coinbase users through the Smart Wallet path.
### Versions
- `@base-org/account`: via `@wagmi/connectors` 5.11.2
- `@reown/appkit`: 1.8.17
- `@reown/appkit-adapter-wagmi`: 1.8.17
- `wagmi`: 2.19.5
- `viem`: 2.45.0
Contributor guide
Research direction
Start in Signer.ts at eth_sendTransaction and trace the sendRequestToPopup() flow; reproduce the issue through wagmi's WalletClient and inspect the returned value. Done means the popup flow returns a standard 32-byte transaction hash after the UserOperation is bundled and submitted, so waitForTransactionReceipt() succeeds.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, blockchain
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100