// This method will check all blocks for new Events.
        private async Task <Dictionary <string, ChangeRequest> > checkCREvents(string contractAdress)
        {
            ChangeManagerService changeManagerService = new ChangeManagerService(new Web3(), contractAddress);
            Event newVoteEventLog          = changeManagerService.ContractHandler.GetEvent <NewVoteEventDTO>();
            Event newChangeRequestEventLog = changeManagerService.ContractHandler.GetEvent <NewChangeRequestEventDTO>();

            Dictionary <string, ChangeRequest> result = new Dictionary <string, ChangeRequest>();

            BlockParameter firstBlock = BlockParameter.CreateEarliest();
            BlockParameter lastBlock  = BlockParameter.CreateLatest();
            NewFilterInput filterCR   = newChangeRequestEventLog.CreateFilterInput(firstBlock, lastBlock);
            NewFilterInput filterVote = newVoteEventLog.CreateFilterInput(firstBlock, lastBlock);

            List <EventLog <NewChangeRequestEventDTO> > logCR = await newChangeRequestEventLog.GetAllChanges <NewChangeRequestEventDTO>(filterCR);

            List <EventLog <NewVoteEventDTO> > logVote = await newVoteEventLog.GetAllChanges <NewVoteEventDTO>(filterVote);

            // Get confirmation for CR creation. Then add CR to table and combobox for management vote.
            Debug.WriteLine("Checking for CR Events: " + logCR.Count);
            foreach (EventLog <NewChangeRequestEventDTO> cr in logCR)
            {
                ChangeRequest changeRequest;
                String        gitHash = Converter.ByteArrayToBinHex(cr.Event.GitHash);

                HexBigInteger blocknumber = cr.Log.BlockNumber;
                Block         block       = await web3.Eth.Blocks.GetBlockWithTransactionsHashesByNumber.SendRequestAsync(blocknumber);

                if (result.ContainsKey(gitHash))
                {
                    changeRequest = result[gitHash];
                }
                else
                {
                    changeRequest = new ChangeRequest(this.contractAddress);
                    result.Add(gitHash, changeRequest);
                }
                changeRequest.updateChangeRequest(gitHash, cr.Event.AdditionalInformation, cr.Event.Costs, cr.Event.Estimation, block.Timestamp.Value);
            }

            // Get vote confirmation. Then update State of the vote.
            Debug.WriteLine("Checking for Vote Events: " + logVote.Count);
            foreach (EventLog <NewVoteEventDTO> vote in logVote)
            {
                String        gitHash       = Converter.ByteArrayToBinHex(vote.Event.GitHash);
                ChangeRequest changeRequest = result[gitHash];

                HexBigInteger blocknumber = vote.Log.BlockNumber;
                Block         block       = await web3.Eth.Blocks.GetBlockWithTransactionsHashesByNumber.SendRequestAsync(blocknumber);

                if (!changeRequest.votes.ContainsKey(vote.Event.Voter))
                {
                    changeRequest.updateVotes((State)vote.Event.CurrentState, vote.Event.VoteInfo, vote.Event.VotesLeft, vote.Event.Voter, vote.Event.Vote, block.Timestamp.Value);
                }
            }

            return(result);
        }
        // This method only checks the yet unchecked blocks for new Events and updates the CR and vote tables.
        private async void checkEventsAndUpdateTable(object sender, EventArgs e)
        {
            lastBlock = BlockParameter.CreateLatest();
            NewFilterInput filterCR   = newChangeRequestEventLog.CreateFilterInput(firstBlock, lastBlock);
            NewFilterInput filterVote = newVoteEventLog.CreateFilterInput(firstBlock, lastBlock);

            firstBlock = lastBlock;

            List <EventLog <NewChangeRequestEventDTO> > logCR = await newChangeRequestEventLog.GetAllChanges <NewChangeRequestEventDTO>(filterCR);

            List <EventLog <NewVoteEventDTO> > logVote = await newVoteEventLog.GetAllChanges <NewVoteEventDTO>(filterVote);

            // Get confirmation for CR creation. Then add CR to table and combobox for management vote.
            Debug.WriteLine("Checking for CR Events: " + logCR.Count);
            foreach (EventLog <NewChangeRequestEventDTO> cr in logCR)
            {
                ChangeRequest changeRequest;
                String        gitHash = Converter.ByteArrayToBinHex(cr.Event.GitHash);

                HexBigInteger blocknumber = cr.Log.BlockNumber;
                Block         block       = await web3.Eth.Blocks.GetBlockWithTransactionsHashesByNumber.SendRequestAsync(blocknumber);

                if (changeRequests.ContainsKey(gitHash))
                {
                    changeRequest = changeRequests[gitHash];
                }
                else
                {
                    changeRequest = new ChangeRequest(this.contractAddress);
                    changeRequests.Add(gitHash, changeRequest);
                }
                changeRequest.updateChangeRequest(gitHash, cr.Event.AdditionalInformation, cr.Event.Costs, cr.Event.Estimation, block.Timestamp.Value);
            }

            // Get vote confirmation. Then update State of the vote.
            Debug.WriteLine("Checking for Vote Events: " + logVote.Count);
            foreach (EventLog <NewVoteEventDTO> vote in logVote)
            {
                String        gitHash       = Converter.ByteArrayToBinHex(vote.Event.GitHash);
                ChangeRequest changeRequest = changeRequests[gitHash];

                HexBigInteger blocknumber = vote.Log.BlockNumber;
                Block         block       = await web3.Eth.Blocks.GetBlockWithTransactionsHashesByNumber.SendRequestAsync(blocknumber);

                if (!changeRequest.votes.ContainsKey(vote.Event.Voter))
                {
                    changeRequest.updateVotes((State)vote.Event.CurrentState, vote.Event.VoteInfo, vote.Event.VotesLeft, vote.Event.Voter, vote.Event.Vote, block.Timestamp.Value);
                }
            }
            updateVoteTableAndTabs();
            this.changeRequestsTable.ItemsSource = changeRequests.Values.ToList();
        }