base / base/account-sdk

[bug] eth_sendTransaction returns 65-byte ECDSA signature instead of tx hash via wagmi baseAccount connector

Open
#251 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.