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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions