async ContractEvents({contractAddress, abi, fromBlock=0, toBlock, includeTransaction=false}) {
    const contractLogs = await this.MakeProviderCall({
      methodName: "getLogs",
      args: [{
        address: contractAddress,
        fromBlock,
        toBlock
      }]
    });

    let blocks = {};
    await contractLogs.limitedMap(
      5,
      async log => {
        const eventInterface = new Ethers.utils.Interface(abi);
        let parsedLog = {
          ...log,
          ...(eventInterface.parseLog(log))
        };

        if(includeTransaction) {
          parsedLog = {
            ...parsedLog,
            ...(await this.MakeProviderCall({methodName: "getTransaction", args: [log.transactionHash]}))
          };
        }

        blocks[log.blockNumber] = [parsedLog].concat((blocks[log.blockNumber] || []));
      }
    );

    return Object.values(blocks).sort((a, b) => a[0].blockNumber < b[0].blockNumber ? 1 : -1);
  }
// Get all logs for the specified contract in the specified range
Get all logs for the specified contract in the specified range
Get all logs for the specified contract in the specified range
async ContractEvents({contractAddress, abi, fromBlock=0, toBlock, includeTransaction=false}) {
    const contractLogs = await this.MakeProviderCall({
      methodName: "getLogs",
      args: [{
        address: contractAddress,
        fromBlock,
        toBlock
      }]
    });
    let blocks = {};
    await contractLogs.limitedMap(
      5,
      async log => {
        const eventInterface = new Ethers.utils.Interface(abi);
        let parsedLog = {
          ...log,
          ...(eventInterface.parseLog(log))
        };
        if(includeTransaction) {
          parsedLog = {
            ...parsedLog,
            ...(await this.MakeProviderCall({methodName: "getTransaction", args: [log.transactionHash]}))
          };
        }
        blocks[log.blockNumber] = [parsedLog].concat((blocks[log.blockNumber] || []));
      }
    );
    return Object.values(blocks).sort((a, b) => a[0].blockNumber < b[0].blockNumber ? 1 : -1);
  }
async ContractEvents ( { contractAddress , abi , fromBlock = 0 , toBlock , includeTransaction = false } ) { const contractLogs = await this . MakeProviderCall ( { methodName : "getLogs" , args : [ { address : contractAddress , fromBlock , toBlock } ] } ) ; let blocks = { } ; await contractLogs . limitedMap ( 5 , async log => { const eventInterface = new Ethers . utils . Interface ( abi ) ; let parsedLog = { ... log , ... ( eventInterface . parseLog ( log ) ) } ; if ( includeTransaction ) { parsedLog = { ... parsedLog , ... ( await this . MakeProviderCall ( { methodName : "getTransaction" , args : [ log . transactionHash ] } ) ) } ; } blocks [ log . blockNumber ] = [ parsedLog ] . concat ( ( blocks [ log . blockNumber ] || [ ] ) ) ; } ) ; return Object . values ( blocks ) . sort ( ( a , b ) => a [ 0 ] . blockNumber < b [ 0 ] . blockNumber ? 1 : - 1 ) ; }
Get all logs for the specified contract in the specified range
Get all logs for the specified contract in the specified range