Skip to content

Commit

Permalink
improved nftx swap ignore (we now only ignore swaps that aren't inclu…
Browse files Browse the repository at this point in the history
…ding weth buy of the vault token)
  • Loading branch information
tat2bu committed Sep 13, 2023
1 parent e77bac6 commit fa1c17d
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 47 deletions.
1 change: 1 addition & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { X2Y2Parser } from "./parsers/x2y2.parser";
export const config = {
// Contract Address ======================================== //
contract_address: '0xf07468eAd8cf26c752C676E43C814FEe9c8CF402',
nftx_vault_contract_address: '0xB39185e33E8c28e0BB3DbBCe24DA5dEA6379Ae91',
// Enter the block where your contract has been created
statistic_initial_block: 12674389,
//
Expand Down
108 changes: 64 additions & 44 deletions src/erc721sales.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,70 @@ describe('Erc721SalesService', () => {
expect(service).toBeDefined()
});


it('0xa13c09a4b0dc88f5e1914aca92675a2f19498d173d0ea2ada5df4652467b9e5b - nftx transaction involving swap', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
config.contract_address = '0xf07468eAd8cf26c752C676E43C814FEe9c8CF402'
const tokenContract = new ethers.Contract('0xf07468eAd8cf26c752C676E43C814FEe9c8CF402', erc721abi, provider);
let filter = tokenContract.filters.Transfer();
const startingBlock = 18124761
const events = await tokenContract.queryFilter(filter,
startingBlock,
startingBlock+1)
const results = await Promise.all(events.map(async (e) => await service.getTransactionDetails(e)))
//expect(results[0].alternateValue).toBe(0.31)
let logs = ''
const tweets = results.filter(t => t !== undefined)
expect(tweets.length).toBe(0)

console.log(logs)
})

it('0xa13c09a4b0dc88f5e1914aca92675a2f19498d173d0ea2ada5df4652467b9e5b - nftx transaction involving swap', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
config.contract_address = '0xf07468eAd8cf26c752C676E43C814FEe9c8CF402'
const tokenContract = new ethers.Contract('0xf07468eAd8cf26c752C676E43C814FEe9c8CF402', erc721abi, provider);
let filter = tokenContract.filters.Transfer();
const startingBlock = 17968015
const events = await tokenContract.queryFilter(filter,
startingBlock,
startingBlock+1)
const results = await Promise.all(events.map(async (e) => await service.getTransactionDetails(e)))
//expect(results[0].alternateValue).toBe(0.31)
let logs = ''
results.forEach(r => {
console.log(r)
logs += `${r.tokenId} sold for ${r.alternateValue}\n`
expect(r.alternateValue).toBe(0.3205)
})

console.log(logs)
})

it('0x5464119779617b8b270bd0defa3cc4aa69661afb71d9360b82ae7247d56aa231 - NFTX sale to vault', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
config.contract_address = '0xf07468eAd8cf26c752C676E43C814FEe9c8CF402'
const tokenContract = new ethers.Contract('0xf07468eAd8cf26c752C676E43C814FEe9c8CF402', erc721abi, provider);
let filter = tokenContract.filters.Transfer();
const startingBlock = 17994239
const events = await tokenContract.queryFilter(filter,
startingBlock,
startingBlock+1)
const results = (await Promise.all(events.map(async (e) => await service.getTransactionDetails(e)))).filter(r => r !== undefined)

let logs = ''
results.forEach(r => {
logs += `${r.tokenId} sold for ${r.alternateValue} to ${r.to}\n`
expect(r.alternateValue).toBe(0.265)
})
expect(results.length).toBe(1)

console.log(logs)
})

it('0x28b859639993604a9b6c060deddede3e63c396134640cd03a6373fdc6bb8a6eb - single bid on blurio', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
Expand Down Expand Up @@ -241,50 +305,6 @@ describe('Erc721SalesService', () => {
console.log(logs)
})

it('0xa13c09a4b0dc88f5e1914aca92675a2f19498d173d0ea2ada5df4652467b9e5b - nftx transaction involving swap', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
config.contract_address = '0xf07468eAd8cf26c752C676E43C814FEe9c8CF402'
const tokenContract = new ethers.Contract('0xf07468eAd8cf26c752C676E43C814FEe9c8CF402', erc721abi, provider);
let filter = tokenContract.filters.Transfer();
const startingBlock = 17968015
const events = await tokenContract.queryFilter(filter,
startingBlock,
startingBlock+1)
const results = await Promise.all(events.map(async (e) => await service.getTransactionDetails(e)))
//expect(results[0].alternateValue).toBe(0.31)
let logs = ''
results.forEach(r => {
console.log(r)
logs += `${r.tokenId} sold for ${r.alternateValue}\n`
expect(r.alternateValue).toBe(0.3205)
})

console.log(logs)
})

it('0x5464119779617b8b270bd0defa3cc4aa69661afb71d9360b82ae7247d56aa231 - NFTX sale to vault', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
config.contract_address = '0xf07468eAd8cf26c752C676E43C814FEe9c8CF402'
const tokenContract = new ethers.Contract('0xf07468eAd8cf26c752C676E43C814FEe9c8CF402', erc721abi, provider);
let filter = tokenContract.filters.Transfer();
const startingBlock = 17994239
const events = await tokenContract.queryFilter(filter,
startingBlock,
startingBlock+1)
const results = (await Promise.all(events.map(async (e) => await service.getTransactionDetails(e)))).filter(r => r !== undefined)

let logs = ''
results.forEach(r => {
logs += `${r.tokenId} sold for ${r.alternateValue} to ${r.to}\n`
expect(r.alternateValue).toBe(0.265)
})
expect(results.length).toBe(1)

console.log(logs)
})

it('0xc4ac7389ff1f636c523cafb395629c7a897d1ab8895f7871ef2a4ec9c6700f89 - multiple nftx swaps', async () => {
await delay(COOLDOWN_BETWEEN_TESTS)
const provider = service.getWeb3Provider()
Expand Down
10 changes: 7 additions & 3 deletions src/erc721sales.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import { createLogger } from './logging.utils';
const logger = createLogger('erc721sales.service')

const botMevAddress = '0x00000000000A6D473a66abe3DBAab9E1388223Bd'
const nftxVaultBeaconProxyAddress = '0xB39185e33E8c28e0BB3DbBCe24DA5dEA6379Ae91'


// This can be an array if you want to filter by multiple topics
Expand Down Expand Up @@ -67,7 +66,7 @@ export class Erc721SalesService extends BaseService {
const code = await this.provider.getCode(to)
// the ignoreContracts flag make the MEV bots like transaction ignored by the twitter
// bot, but not for statistics
if (to !== nftxVaultBeaconProxyAddress && code !== '0x' && ignoreContracts) {
if (to !== config.nftx_vault_contract_address && code !== '0x' && ignoreContracts) {
logger.info(`contract detected for ${tx.transactionHash} event index ${tx.index}`)
return
}
Expand Down Expand Up @@ -141,7 +140,12 @@ export class Erc721SalesService extends BaseService {
break
}
}


if (transaction.to === '0x941A6d105802CCCaa06DE58a13a6F49ebDCD481C' && !tweetRequest.alternateValue) {
// nftx swap of "inner token" that weren't bought in the same transaction ignore this
logger.info(`nftx swap detected without ETH buy, ignoring ${tx.transactionHash} event index ${tx.index}`)
return
}
return tweetRequest

} catch (err) {
Expand Down
10 changes: 10 additions & 0 deletions src/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { JsonRpcProvider, Network, ethers } from "ethers";

process.env['NODE_TLS_REJECT_UNAUTHORIZED']='0'
const provider = ethers.getDefaultProvider("https://geth.ef3aaeddd3281ebe.dyndns.dappnode.io") as JsonRpcProvider;


provider.send("debug_traceTransaction",
['0x28b859639993604a9b6c060deddede3e63c396134640cd03a6373fdc6bb8a6eb', {
tracer: 'callTracer'
}]).then(r => console.log(r))

0 comments on commit fa1c17d

Please sign in to comment.