private void SaveLastBlockNumber(Transaction transaction, ulong block_number)
        {
            var bids_helper = new LoanBidsHelper();
            var bid         = CreateBid(0, null, null, transaction, block_number, -1);

            bids_helper.CreateOrUpdateLastBlock(bid);
        }
        public void processBackersFromTransactions(Dictionary <string, List <Transaction> > transactions, HashSet <string> addresses, ulong block_number)
        {
            var all_transactions = transactions.Values.ToList().SelectMany(x => x).ToList();

            Print("transactions: " + all_transactions.ToList().Count + ", addresses: " + addresses.Count + ", block number: " + block_number);
            var projects_helper   = new LoansHelper();
            var bids_helper       = new LoanBidsHelper();
            var all_bids          = new List <LoanBids>();
            var no_backer_bids    = new Dictionary <string, List <LoanBids> >();
            var backer_addressess = new HashSet <string>();
            var projects          = projects_helper.FindProjects(addresses.ToList());
            var notifications     = new List <NotificationData>();
            int backers_counter   = 0;

            if (projects == null || projects.Count == 0)
            {
                Print("no any backer transactions");
                if (all_transactions.Count > 0)
                {
                    SaveLastBlockNumber(all_transactions[0], block_number);
                    Print("Sync block updated: " + block_number);
                }
                return;
            }

            Print("found projects: " + projects.Count);
            processProjects(projects, transactions, all_bids, no_backer_bids,
                            backer_addressess, notifications, block_number, ref backers_counter);

            all_bids.AddRange(searchBackers(no_backer_bids, backer_addressess, notifications, ref backers_counter));
            if (bids_helper.PopulateBackersFundingTransactions(all_bids))
            {
                SendNotifications(notifications);
            }
            Print("identified backer transactions: " + backers_counter +
                  ", " + "unidentified backer transactions: " + (all_bids.Count - backers_counter));
        }
示例#3
0
        private static bool processPastBlocks(string[] args)
        {
            var bids_helper  = new LoanBidsHelper();
            var latest_block = bids_helper.getLatestBlock();

            PrePrint("latest block: " + ((latest_block.HasValue) ? latest_block.Value.ToString() : "none"));

            if (args.Length > 0)
            {
                foreach (var block_hash in args)
                {
                    PrePrint("recover block " + block_hash);
                    var block_details   = Ethereum.GetBlockDetails(block_hash);
                    var block_processor = new BlockProcessor();
                    block_processor.onTransactionsTo = processTransactionsTo;
                    block_processor.processBlockDetails(block_details, block_callback: false);
                }
                return(false);
            }
            else if (latest_block.HasValue)
            {
                var block_details = Ethereum.GetBlockDetails((ulong)latest_block.Value);
                while (block_details != null)
                {
                    PrePrint("recover block " + block_details.hash);
                    var block_processor = new BlockProcessor();
                    block_processor.onTransactionsTo = processTransactionsTo;
                    block_processor.processBlockDetails(block_details, block_callback: false);
                    latest_block++;
                    block_details = Ethereum.GetBlockDetails((ulong)latest_block.Value);
                }
                PrePrint("recovering finished on block " + (latest_block - 1));
            }

            return(true);
        }