Last active
January 26, 2024 09:16
-
-
Save taarushv/f8aee04b593c4dac24afc65aca9e37cd to your computer and use it in GitHub Desktop.
Analyzing backrun/rebate in txs 0/1/2 in https://etherscan.io/block/17358588
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// TX 1 - Admin wallet enables trading on FCKIT token https://etherscan.io/tx/0x12b949cf5605bb4da83efd14b6d38ad628a9ebf3befb42141d2ddb8cfc43d53e | |
// TX 2 - Searcher uses a proxy contract to buy ~2B FCKIT --for 60 ETH-- into multiple wallets (and to pay builder for gas fees/rebate) https://etherscan.io/tx/0xc3a37580a96b52a718a5b516dfef209f150e87a75032c725536821ea0d6cc875 | |
// TX 3 - Rebate is forwarded from the flashbots builder back to the user https://etherscan.io/tx/0x80dc2721d833cd221bdf9264f1138a88907f57303bc606f8ee4034297201e095 | |
const { ethers } = require('ethers'); // v5 | |
const rpc = "https://mainnet.infura.io/v3/YOUR_API_KEY_HERE" | |
const provider = new ethers.providers.JsonRpcProvider(rpc) | |
// uni v2 router, to fetch trades using logs | |
const uniPool ="0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D" | |
// To get around the anti token sniping limit, searcher simple uses 1 proxy contract | |
// and multiple wallets to buy the token after trading is enabled. | |
// The following accounts have their token balances increased after tx 2 | |
// source: https://dashboard.tenderly.co/tx/mainnet/0xc3a37580a96b52a718a5b516dfef209f150e87a75032c725536821ea0d6cc875/state-diff | |
const accounts = [ | |
"0x04287c7bf06c7e9121e3700861410d1cd489d872", | |
"0x072e06ddac45f643b2cadf8eb3721b111b9c3dbb", | |
"0x0ac3c761fa8d0f0b4be3f8849c6a12880e45a441", | |
"0x0fe59520431451170d6ca1c49d5659da0519ce18", | |
"0x142ce7a0ac45d6d866218b1f1d77500b8e7c34a6", | |
"0x1f93249ee6b6fc44c36cdcf30ca3faac76a6abe1", | |
"0x2b254e1888a37cd7ac68e25dce98d43d5afecf13", | |
"0x2b732f067f440edd49986dc6c50cb93af3698e10", | |
"0x342f28bbd622ee58ca1325df22767152d439ed9b", | |
"0x4558012c64e7f2c5e55caf2b2e701d89270cbec2", | |
"0x4a55e96619edb8719859179f63b28b8d47dead21", | |
"0x4c009b83467b61a196619f93e98b40e561ed89a5", | |
"0x5129d7026b55aecc1c1a0a18f618b93868c2be6a", | |
"0x552916a87aed04704c25ba9c1a88a43f4926e45a", | |
"0x55b7144f6067e488831092074cafd148b8fe701a", | |
"0x5a09a9ac96d908d5824ce49325b84c592db192b2", | |
"0x5c2d3fe72591e66c781ac78437347600e99adf8c", | |
"0x5f6f33cf5b9194fdc062ee035625b129f37c8c7d", | |
"0x6570f963a93dfc75d0816971c8257a8188d14293", | |
"0x6b2e314b3456cef77ea6408ae4d935a2fadca914", | |
"0x6edbbc42669121106a9fb2f5c5cc47654fe1b45f", | |
"0x6f000cc839689b52a95fb0d52e401bd46c70a2de", | |
"0x716576481a689b124344d51a7ce2d018af019440", | |
"0x72fe3e85f3e84093ac0d2cef4474fbdb3d844ce8", | |
"0x8840db22a5f535dd10ed1253ee730f252a635e6d", | |
"0x8d1fd7aa0b88483a49e4a174a6ce1739849e81c5", | |
"0x94c3075bc4011f69026dbd54b74b22399cb40d4c", | |
"0xa19d50a87c4c50131b320e905327b71d22b7d7e4", | |
"0xa8d7e9930b8afe024189976eaba5a54b6fef9db9", | |
"0xbaaa383463a057cc95d60ddf7b40230d819e2e96", | |
"0xcdef6ce0abbad6426b32a785cb8604317fc91070", | |
"0xcdfb3337d1e4b1865c8cecd5668af79fb82a375a", | |
"0xde4e8e8a9541aa7050c1a6b7480bd728508b5da9", | |
"0xe96e6267c73378754709600130fdfd9b5f2892e7", | |
"0xe9757e2660a89a811b25fe2aff3cf995c88e7934", | |
"0xec2347d9c64922da279c5ee02ae71b949af6b924", | |
"0xeed804b484c9a27875b601445e12e34a625396f4", | |
"0xf7e522b8fd87096ae0db2dba4cc3b25d239e6c0c", | |
"0xf9de78b65bf0835a2634862aeae60f567ab9097f" | |
] | |
// Hacky way to go from raw logs => how many FCKIT tokens were sold for how much ETH | |
const parseData = (log) => { | |
const data = log[0]['data'] | |
const cleanedData = data.slice(10); | |
const result = cleanedData.match(/.{1,64}/g); | |
const amount0In = ethers.BigNumber.from('0x' + result[result.length -4].substring(0, 56)); | |
const amount1Out = ethers.BigNumber.from('0x' + result[result.length - 1]); | |
parsedTokenAmount = ethers.utils.formatEther(amount0In.toString()) | |
parsedETHAmount = ethers.utils.formatEther(amount1Out.toString()) | |
return [parseFloat(parsedTokenAmount), parseFloat(parsedETHAmount)] | |
} | |
// For each of these accounts, fetch logs from when the tokens were eventually sold | |
// Use logs to determine how many total tokens were sold/for how much ETH/after how many blocks | |
const main = async () => { | |
var totalTokensSold = 0 | |
var totalETHMade = 0 | |
for(i=0;i<accounts.length;i++){ | |
const address = accounts[i] | |
const paddedAddress = '0x' + address.slice(2).padStart(64, '0'); | |
const paddedUniPool = '0x' + uniPool.slice(2).padStart(64, '0'); | |
const filter = { | |
fromBlock: 17358588 + 1, // First block after the snipe | |
toBlock: "latest", // The ending block for the search | |
topics: [ | |
"0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", // topic 0 | |
paddedUniPool, | |
paddedAddress | |
] | |
}; | |
const logs = await provider.getLogs(filter); | |
const tradeDetails = parseData(logs) | |
var totalTokensSold = totalTokensSold + tradeDetails[0] | |
var totalETHMade = totalETHMade + tradeDetails[1] | |
console.log(i+1, address) | |
console.log( `Sold: ${(tradeDetails[0]).toFixed(2)} tokens for ${(tradeDetails[1]).toFixed(2)} ETH, (${logs[0].blockNumber-17358588} blocks later)`) | |
console.log("-------------------------------------------------------") | |
} | |
console.log("TOTAL TOKENS SOLD: ", totalTokensSold.toFixed(2)) | |
console.log("TOTAL ETH MADE: ", totalETHMade.toFixed(2)) | |
console.log("TOTAL PROFIT: ", totalETHMade.toFixed(2) - 60 - 12.024) // 60 ETH to buy 2B tokens initially, 12 ETH paid to user + proposer (ignoring gas fees on final sells from different wallets) | |
} | |
main() | |
/* OUTPUT: | |
1 0x04287c7bf06c7e9121e3700861410d1cd489d872 | |
Sold: 70610491.72 tokens for 4.13 ETH, (14 blocks later) | |
------------------------------------------------------- | |
2 0x072e06ddac45f643b2cadf8eb3721b111b9c3dbb | |
Sold: 70612708.97 tokens for 3.90 ETH, (32 blocks later) | |
------------------------------------------------------- | |
3 0x0ac3c761fa8d0f0b4be3f8849c6a12880e45a441 | |
Sold: 70611004.79 tokens for 4.14 ETH, (19 blocks later) | |
------------------------------------------------------- | |
4 0x0fe59520431451170d6ca1c49d5659da0519ce18 | |
Sold: 70609840.77 tokens for 4.11 ETH, (10 blocks later) | |
------------------------------------------------------- | |
5 0x142ce7a0ac45d6d866218b1f1d77500b8e7c34a6 | |
Sold: 70613136.86 tokens for 3.70 ETH, (33 blocks later) | |
------------------------------------------------------- | |
6 0x1f93249ee6b6fc44c36cdcf30ca3faac76a6abe1 | |
Sold: 70612176.12 tokens for 4.08 ETH, (31 blocks later) | |
------------------------------------------------------- | |
7 0x2b254e1888a37cd7ac68e25dce98d43d5afecf13 | |
Sold: 70610110.82 tokens for 4.37 ETH, (13 blocks later) | |
------------------------------------------------------- | |
8 0x2b732f067f440edd49986dc6c50cb93af3698e10 | |
Sold: 70609178.88 tokens for 4.38 ETH, (6 blocks later) | |
------------------------------------------------------- | |
9 0x342f28bbd622ee58ca1325df22767152d439ed9b | |
Sold: 70610794.34 tokens for 4.00 ETH, (15 blocks later) | |
------------------------------------------------------- | |
10 0x4558012c64e7f2c5e55caf2b2e701d89270cbec2 | |
Sold: 70610019.38 tokens for 4.50 ETH, (13 blocks later) | |
------------------------------------------------------- | |
11 0x4a55e96619edb8719859179f63b28b8d47dead21 | |
Sold: 70612049.14 tokens for 4.19 ETH, (31 blocks later) | |
------------------------------------------------------- | |
12 0x4c009b83467b61a196619f93e98b40e561ed89a5 | |
Sold: 70611802.16 tokens for 3.53 ETH, (20 blocks later) | |
------------------------------------------------------- | |
13 0x5129d7026b55aecc1c1a0a18f618b93868c2be6a | |
Sold: 70610298.18 tokens for 4.38 ETH, (14 blocks later) | |
------------------------------------------------------- | |
14 0x552916a87aed04704c25ba9c1a88a43f4926e45a | |
Sold: 70612991.38 tokens for 3.70 ETH, (32 blocks later) | |
------------------------------------------------------- | |
15 0x55b7144f6067e488831092074cafd148b8fe701a | |
Sold: 70612305.53 tokens for 4.07 ETH, (31 blocks later) | |
------------------------------------------------------- | |
16 0x5a09a9ac96d908d5824ce49325b84c592db192b2 | |
Sold: 70611112.75 tokens for 4.02 ETH, (19 blocks later) | |
------------------------------------------------------- | |
17 0x5c2d3fe72591e66c781ac78437347600e99adf8c | |
Sold: 70611682.03 tokens for 3.79 ETH, (20 blocks later) | |
------------------------------------------------------- | |
18 0x5f6f33cf5b9194fdc062ee035625b129f37c8c7d | |
Sold: 70611564.07 tokens for 3.90 ETH, (20 blocks later) | |
------------------------------------------------------- | |
19 0x6570f963a93dfc75d0816971c8257a8188d14293 | |
Sold: 70609499.80 tokens for 4.00 ETH, (7 blocks later) | |
------------------------------------------------------- | |
20 0x6b2e314b3456cef77ea6408ae4d935a2fadca914 | |
Sold: 70609929.37 tokens for 4.28 ETH, (11 blocks later) | |
------------------------------------------------------- | |
21 0x6edbbc42669121106a9fb2f5c5cc47654fe1b45f | |
Sold: 70610394.16 tokens for 4.25 ETH, (14 blocks later) | |
------------------------------------------------------- | |
22 0x6f000cc839689b52a95fb0d52e401bd46c70a2de | |
Sold: 70610898.67 tokens for 3.89 ETH, (15 blocks later) | |
------------------------------------------------------- | |
23 0x716576481a689b124344d51a7ce2d018af019440 | |
Sold: 70610203.74 tokens for 4.51 ETH, (14 blocks later) | |
------------------------------------------------------- | |
24 0x72fe3e85f3e84093ac0d2cef4474fbdb3d844ce8 | |
Sold: 70612848.77 tokens for 3.80 ETH, (32 blocks later) | |
------------------------------------------------------- | |
25 0x8840db22a5f535dd10ed1253ee730f252a635e6d | |
Sold: 54241861.42 tokens for 2.99 ETH, (38 blocks later) | |
------------------------------------------------------- | |
26 0x8d1fd7aa0b88483a49e4a174a6ce1739849e81c5 | |
Sold: 70609667.66 tokens for 4.36 ETH, (10 blocks later) | |
------------------------------------------------------- | |
27 0x94c3075bc4011f69026dbd54b74b22399cb40d4c | |
Sold: 70612571.88 tokens for 4.01 ETH, (32 blocks later) | |
------------------------------------------------------- | |
28 0xa19d50a87c4c50131b320e905327b71d22b7d7e4 | |
Sold: 70612437.42 tokens for 4.13 ETH, (32 blocks later) | |
------------------------------------------------------- | |
29 0xa8d7e9930b8afe024189976eaba5a54b6fef9db9 | |
Sold: 70610691.77 tokens for 4.11 ETH, (15 blocks later) | |
------------------------------------------------------- | |
30 0xbaaa383463a057cc95d60ddf7b40230d819e2e96 | |
Sold: 70609336.94 tokens for 4.13 ETH, (6 blocks later) | |
------------------------------------------------------- | |
31 0xcdef6ce0abbad6426b32a785cb8604317fc91070 | |
Sold: 70609417.76 tokens for 4.02 ETH, (6 blocks later) | |
------------------------------------------------------- | |
32 0xcdfb3337d1e4b1865c8cecd5668af79fb82a375a | |
Sold: 70611222.61 tokens for 3.59 ETH, (20 blocks later) | |
------------------------------------------------------- | |
33 0xde4e8e8a9541aa7050c1a6b7480bd728508b5da9 | |
Sold: 70611334.42 tokens for 3.69 ETH, (20 blocks later) | |
------------------------------------------------------- | |
34 0xe96e6267c73378754709600130fdfd9b5f2892e7 | |
Sold: 70611448.22 tokens for 3.50 ETH, (20 blocks later) | |
------------------------------------------------------- | |
35 0xe9757e2660a89a811b25fe2aff3cf995c88e7934 | |
Sold: 70609583.09 tokens for 4.48 ETH, (10 blocks later) | |
------------------------------------------------------- | |
36 0xec2347d9c64922da279c5ee02ae71b949af6b924 | |
Sold: 70610590.91 tokens for 4.02 ETH, (14 blocks later) | |
------------------------------------------------------- | |
37 0xeed804b484c9a27875b601445e12e34a625396f4 | |
Sold: 70611924.50 tokens for 4.31 ETH, (31 blocks later) | |
------------------------------------------------------- | |
38 0xf7e522b8fd87096ae0db2dba4cc3b25d239e6c0c | |
Sold: 70609753.54 tokens for 4.23 ETH, (10 blocks later) | |
------------------------------------------------------- | |
39 0xf9de78b65bf0835a2634862aeae60f567ab9097f | |
Sold: 70609257.32 tokens for 4.25 ETH, (6 blocks later) | |
------------------------------------------------------- | |
TOTAL TOKENS SOLD: 2737458141.86 | |
TOTAL ETH MADE: 157.44 | |
TOTAL PROFIT: 85.416 | |
**/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment