Skip to content

Instantly share code, notes, and snippets.

@ezynda3
Created July 18, 2022 08:08
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 19 You must be signed in to fork a gist
  • Save ezynda3/c8eb04cce79c0c09903d484a13b17b3e to your computer and use it in GitHub Desktop.
Save ezynda3/c8eb04cce79c0c09903d484a13b17b3e to your computer and use it in GitHub Desktop.
Flashbots Rescue Tokens
import { ethers, providers, Wallet, utils, Transaction } from "ethers";
import {
FlashbotsBundleProvider,
FlashbotsBundleResolution,
} from "@flashbots/ethers-provider-bundle";
import { exit } from "process";
const FLASHBOTS_URL = "https://relay-goerli.flashbots.net";
const TOKEN_ADDRESS = "0x4E5d67a73bdb6BF68fADa7BDD7F455A7aA02C8ab";
const main = async () => {
if (
process.env.SPONSOR_KEY === undefined ||
process.env.VICTIM_KEY === undefined
) {
console.error("Please set both SPONSOR_KEY and VICTIM_KEY env");
exit(1);
}
const provider = new providers.JsonRpcProvider(
"https://rpc.goerli.mudit.blog/"
);
const authSigner = Wallet.createRandom();
const flashbotsProvider = await FlashbotsBundleProvider.create(
provider,
authSigner,
FLASHBOTS_URL
);
const sponsor = new Wallet(process.env.SPONSOR_KEY).connect(provider);
const victim = new Wallet(process.env.VICTIM_KEY).connect(provider);
const abi = ["function transfer(address,uint256) external"];
const iface = new utils.Interface(abi);
provider.on("block", async (blockNumber) => {
console.log(blockNumber);
const targetBlockNumber = blockNumber + 1;
const resp = await flashbotsProvider.sendBundle(
[
{
signer: sponsor,
transaction: {
chainId: 5,
type: 2,
to: victim.address,
value: utils.parseEther("0.01"),
maxFeePerGas: utils.parseUnits("3", "gwei"),
maxPriorityFeePerGas: utils.parseUnits("2", "gwei"),
},
},
{
signer: victim,
transaction: {
chainId: 5,
type: 2,
to: TOKEN_ADDRESS,
gasLimit: "50000",
data: iface.encodeFunctionData("transfer", [
sponsor.address,
utils.parseEther("1000000"),
]),
maxFeePerGas: utils.parseUnits("3", "gwei"),
maxPriorityFeePerGas: utils.parseUnits("2", "gwei"),
},
},
],
targetBlockNumber
);
if ("error" in resp) {
console.log(resp.error.message);
return;
}
const resolution = await resp.wait();
if (resolution === FlashbotsBundleResolution.BundleIncluded) {
console.log(`Congrats, included in ${targetBlockNumber}`);
exit(0);
} else if (
resolution === FlashbotsBundleResolution.BlockPassedWithoutInclusion
) {
console.log(`Not included in ${targetBlockNumber}`);
} else if (resolution === FlashbotsBundleResolution.AccountNonceTooHigh) {
console.log("Nonce too high, bailing");
exit(1);
}
});
};
main();
@ovijitM
Copy link

ovijitM commented Mar 22, 2023

is it work for arbiturm network?

@web3anand
Copy link

im also have the question

@Zenkit1488
Copy link

Zenkit1488 commented Mar 24, 2023

im also have the question ..

@OsmXWH
Copy link

OsmXWH commented Mar 24, 2023

Hi Eid Zynda,

       Thanks for your code and video you post it in the internet. I try it and I could run it and tested with zero error until now. Unfortunately it end up with the result "Please set both SPONSOR_KEY and VICTIM_KEY env".

       .env file set in and package dotenv is installed in the project folder with SPONSOR_KEY, and VICTIM_KEY and I tested with another .ts file to confirm the value is going to the application. but again console.error message is the final result.

async function main(): Promise {
if (process.env.SPONSOR_KEY === undefined ||
process.env.VICTIM_KEY === undefined) {
console.error("Please set both SPONSOR_KEY and VICTIM_KEY env");
exit(1);
}

.env file
SPONSOR_KEY= "12345678912345678912345678912345678912345678912345678912345678"
VICTIM_KEY= "98765432198765432198765432198765432198765432198765432198765432"

It will be great from you if you can share with us how to define the the file.

from my side i am using the easiest method and default .env without settings host:port and localhost server in my PC.

I am not programmer but I use to it really very long back but I writing my application when only I have problem like stolen wallet. I am only IT/Electrical Engineer love computer.

thanks,

@Ihushan0007
Copy link

any one tell me where can i run this code because i don't know about coding but i can

@ElOgiso
Copy link

ElOgiso commented Apr 13, 2023

any one tell me where can i run this code because i don't know about coding but i can

dm me @ElOgiso on Twitter i have same issue, but solved mine already. you need a node js. an app.. google python software for pc

@jb0gie
Copy link

jb0gie commented Apr 22, 2023

is it work for arbiturm network?

yeah all ya gotta do is change the rpc you can find an example here

@DRIPDROPS
Copy link

Hi Eid Zynda,

       Thanks for your code and video you post it in the internet. I try it and I could run it and tested with zero error until now. Unfortunately it end up with the result "Please set both SPONSOR_KEY and VICTIM_KEY env".

       .env file set in and package dotenv is installed in the project folder with SPONSOR_KEY, and VICTIM_KEY and I tested with another .ts file to confirm the value is going to the application. but again console.error message is the final result.

async function main(): Promise { if (process.env.SPONSOR_KEY === undefined || process.env.VICTIM_KEY === undefined) { console.error("Please set both SPONSOR_KEY and VICTIM_KEY env"); exit(1); }

.env file SPONSOR_KEY= "12345678912345678912345678912345678912345678912345678912345678" VICTIM_KEY= "98765432198765432198765432198765432198765432198765432198765432"

It will be great from you if you can share with us how to define the the file.

from my side i am using the easiest method and default .env without settings host:port and localhost server in my PC.

I am not programmer but I use to it really very long back but I writing my application when only I have problem like stolen wallet. I am only IT/Electrical Engineer love computer.

thanks,

are you calling for env properly in your require use ..?

@Rama930
Copy link

Rama930 commented May 8, 2023

Can anyone write a step by step procedures to install the above code. Sounds interesting. I am not a programmer, wanted to learn though.

@hvktbach
Copy link

is it work for BSC network?thanks

@Rama930
Copy link

Rama930 commented May 15, 2023 via email

@ehenry-50
Copy link

does this work for BNB

@brig371
Copy link

brig371 commented Oct 16, 2023

If you can not recover your funds - just drop me a telegram message (username: unsweep) and I will try to help. BSC is possible also, but in case by case basis.

@DRIPDROPS
Copy link

DRIPDROPS commented Oct 16, 2023 via email

@RahulGaat
Copy link

is there Json. file required if this is required then where it is ?

@ovijitM
Copy link

ovijitM commented Jan 13, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment