All files / src/parsers opensea.wyvern.parser.ts

100% Statements 19/19
100% Branches 4/4
100% Functions 7/7
100% Lines 18/18

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 311x   1x 1x   1x   1x   1x     49x 851x 2x 2x 2x 8x   2x   2x   2x   851x 49x 47x      
import { Log, TransactionResponse, ethers } from "ethers";
import { LogParser } from "./parser.definition";
import { config } from "../config";
import openseaWyvernABI from '../abi/opensea_wyvern.json';
 
const openseaWyvernInterface = new ethers.Interface(openseaWyvernABI);
 
export class OpenSeaWyvernParser implements LogParser {
    
    platform: string = 'opensea';
    
    parseLogs(transaction:TransactionResponse, logs: Log[], tokenId: string): number {
        const result = logs.map((log: any) => {
            if (log.topics[0].toLowerCase() === '0xc4109843e0b7d514e4c093114b863f8e7d8d9a458c372cd51bfe526b588006c9') {
              const logDescription = openseaWyvernInterface.parseLog(log);
              const price = logDescription.args.price
              const 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 ethers.formatEther(price / BigInt(tokenCount));
            }
          }).filter(n => n !== undefined)
        if (result.length) return parseFloat(result[0])
        return undefined
    }
 
}