Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 1x 1x 1x 1x 1x 1x 29x 490x 4x 4x 4x 486x 6x 18x 168x 6x 6x 6x 6x 6x 6x 6x 490x 29x 266x 10x 10x 6x 6x 4x 98x 8x 8x 10x 19x | import { Log, TransactionResponse, ethers } from "ethers"; import { LogParser } from "./parser.definition"; import nftxABI from '../abi/nftxABI.json'; import { config } from "../config"; const nftxInterface = new ethers.Interface(nftxABI); export class NFTXParser implements LogParser { platform: string = 'nftx'; parseLogs(transaction:TransactionResponse, logs: Log[], tokenId: string): number { const result = logs.map((log: any) => { // direct buy from vault if (log.topics[0].toLowerCase() === '0x1cdb5ee3c47e1a706ac452b89698e5e3f2ff4f835ca72dde8936d0f4fcf37d81') { const relevantData = log.data.substring(2); const relevantDataSlice = relevantData.match(/.{1,64}/g); return BigInt(`0x${relevantDataSlice[1]}`) / BigInt('1000000000000000'); } else if (log.topics[0].toLowerCase() === '0x63b13f6307f284441e029836b0c22eb91eb62a7ad555670061157930ce884f4e') { const parsedLog = nftxInterface.parseLog(log) // check that the current transfer is NFTX related Iif (!parsedLog.args.nftIds.filter(n => BigInt(n).toString() === tokenId).length) { return } // redeem, find corresponding token bought const swaps = logs.filter((log2: any) => log2.topics[0].toLowerCase() === '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822') .map(b => { const relevantData = b.data.substring(2); const relevantDataSlice = relevantData.match(/.{1,64}/g); const moneyIn = BigInt(`0x${relevantDataSlice[0]}`) Iif (moneyIn > BigInt(0)) return moneyIn / BigInt('1000000000000000'); else { const moneyIn2 = BigInt(`0x${relevantDataSlice[1]}`) return moneyIn2 / BigInt('1000000000000000'); } }) if (swaps.length) return swaps.reduce((previous, current) => previous + current, BigInt(0)) } }).filter(n => n !== undefined) if (result.length) { // find the number of token transferred to adjust amount per token const redeemLog = logs.filter((log: any) => log.topics[0].toLowerCase() === '0x63b13f6307f284441e029836b0c22eb91eb62a7ad555670061157930ce884f4e')[0] as any let tokenCount = 1 if (redeemLog) { const parsedLog = nftxInterface.parseLog(redeemLog) tokenCount = Math.max(parsedLog.args.nftIds.length, 1) } else { // count the number of tokens transfered tokenCount = logs .filter(l => l.address.toLowerCase() === config.contract_address.toLowerCase() && l.topics[0].toLowerCase() === '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef') .map(l => l.topics[3]) // take unique value .filter((value, index, array) => array.indexOf(value) === index) .length } return parseFloat(result[0].toString())/tokenCount/1000; } return undefined } } |