Hacked Wallet Recovery logo

Custom calls

Back to recovery

Some assets can’t be recovered with a simple token transfer. For example: Aave/Spark deposits, Morpho positions, Curve pool deposits, or vault shares. In those cases you need to perform a protocol action first (withdraw/redeem/unwrap). This page shows the easiest way to copy the exact onchain call from a protocol UI and paste it into the recovery flow.

Important
You should not approve/sign anything from the compromised wallet while doing this. The goal is to use the protocol app only long enough to open the “Confirm transaction” screen in your wallet, then copy the details.

Recommended: Raw tx (copy contract + calldata)

This is the most reliable method because you’re copying the exact calldata the protocol UI would send.

  1. In the recovery app, go to Select assets Custom.
  2. Open the protocol’s app (use the “Manage positions” link) and navigate to the action you need (usually Withdraw or Redeem).
  3. Continue until your wallet opens the Confirm transaction screen for the compromised wallet.
  4. In the wallet’s transaction details, copy:
    • To / Interacting with (the contract address)
    • Data / Calldata (0x… hex)
    Your wallet might label this as “Hex data”, “Input data”, or “Calldata”.
  5. Back in the recovery app, in Custom choose Raw tx, paste the calldata, and ensure the Contract field matches the To address you copied.
  6. Click Add call. This call will be executed as part of the recovery batch, without you needing to sign from the compromised wallet.

Alternative: Function signature (when calldata isn’t available)

If your wallet UI doesn’t show calldata, you can build the call from the contract’s ABI.

  1. Find the contract on the chain’s block explorer (BaseScan, Etherscan, etc.) and open the Contract tab.
  2. If it’s verified, you’ll see read/write methods or an ABI. Identify the method you need (often withdraw(...), redeem(...), exit(...), etc.).
  3. The function signature is the method name plus parameter types, for example: withdraw(uint256,address).
  4. In the recovery app’s Custom tab, enter the Contract address and paste the function signature. Then fill in the inputs.
  5. For address parameters you can use:
    • $SAFE → your destination safe address
    • $COMPROMISED → the compromised wallet address
Tip: if you can see a past successful withdraw/redeem tx for a similar position (on a block explorer), you can copy the calldata from that transaction as well and use the Raw tx method.