Skip to content

[Bug] “Gasless transactions” set code on my EOA; no way to unset → wallet now unusable #7906

@mikeghen

Description

@mikeghen

📱 Interface Affected

Which application are you experiencing issues with?


🧩 App Version

  • Version (if known): Latest production build, May 17 2025
  • Production build
  • Development build

💻 System / Environment Info

Item Details
Browser Chrome
OS / Platform redacted
Device Desktop
Wallet used MetaMask
Network Optimism

🔁 Steps to Reproduce

  1. Open the Uniswap web UI with a fresh EOA.
  2. Enable Gasless transactions in settings (UI displays “Set up gasless transactions”).
  3. Approve the resulting transaction (UI sends a setCode / tx that installs code on the EOA).
    1. Txn hash from setting EOA code: https://optimistic.etherscan.io/tx/0xc8a0ce4e2e701247fdae0a3f615fc2d26edec32dda5ca1b1ce87d16eb38e688a
  4. Try to perform any swap or even a 0-ETH self-transfer.

✅ Expected Behavior

  • The UI should provide a clear “Disable / unset gasless transactions” button that removes the code.
  • After disabling, the wallet should behave like a normal EOA again.

❌ Actual Behavior

  • The UI installs code on the EOA.
  • Subsequent transactions fail on multiple RPCs with
in-flight transaction limit reached for delegated accounts
  • Self-call with 0 ETH (suggested fix) does not clear the code.
  • Uniswap UI no longer allows swaps from this wallet; Foundry scripts (see below) also fail.

📸 Screenshots or Screen Recording

N/a

🧾 Additional Context

  • I can't find any way to unset this contract code.
  • First I verify the code is set:
$ cast code 0xC07E21c78d6Ad0917cfCBDe8931325C392958892 --rpc-url https://optimism.gateway.tenderly.co/xxx

0xef010063c0c19a282a1b52b07dd5a65b58948a07dae32b
  • Tried work-arounds that failed
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import "forge-std/Script.sol";

contract ClearEOACode is Script {
  function run() external {
      uint256 pk = vm.envUint("PRIVATE_KEY");
      address eoa = vm.addr(pk);

      // Attempt 1: self-call to consume authority
      vm.startBroadcast(pk);
      eoa.call{gas: 1_000_000_000}("");
      vm.stopBroadcast();

      // Attempt 2: attach delegation to zero address
      vm.signAndAttachDelegation(address(0), pk);

      // Attempt 3: self-call again
      vm.startBroadcast(pk);
      (bool success, ) = eoa.call("");
      require(success, "EOA code clear failed");
      vm.stopBroadcast();
  }
}

Result:

% forge script script/ClearCode.s.sol --rpc-url https://opt-mainnet.g.alchemy.com/v2/xxx --broadcast
[⠊] Compiling...
[⠃] Compiling 1 files with Solc 0.8.29
[⠊] Solc 0.8.29 finished in 846.51ms
Compiler run successful!
Script ran successfully.

## Setting up 1 EVM.

==========================

Chain 10

Estimated gas price: 0.000052296 gwei

Estimated total gas used for script: 92693

Estimated amount required: 0.000000004847473128 ETH

==========================

Transactions saved to: /Users/mghen/Documents/Projects/superdca-core/broadcast/ClearCode.s.sol/10/run-latest.json

Sensitive values saved to: /Users/mghen/Documents/Projects/superdca-core/cache/ClearCode.s.sol/10/run-latest.json

Error: Failed to send transaction

Context:
- server returned an error response: error code -32000: in-flight transaction limit reached for delegated accounts

Nothing clears the code. Please provide a supported method (or UI toggle) to unset / revert the EOA back to a plain account.

⚠️ No private keys or seed phrases were shared.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions