Beispiel #1
0
        ////II.增量处理
        public void restart(bool opreturnStore)
        {
            if (!Directory.Exists(utxoSliceFileLocationPath))
            {
                Console.WriteLine("切片文件保存路径不存在");
            }
            Console.WriteLine("程序正在重启.......");
            Block_Pooling_Manager_Class bpmc = new Block_Pooling_Manager_Class();
            Stopwatch timer = new Stopwatch();

            timer.Start();
            if (restore_StatusForProgram(bpmc) == true)
            {
                timer.Stop();
                Console.WriteLine("程序重启成功.......");
                Console.WriteLine("程序重启用时:" + timer.Elapsed);
                Block     readyBlock;
                Stopwatch timer1 = new Stopwatch();
                timer1.Start();
                while ((readyBlock = bpmc.dequeue_FromBlockQueuePooling()) != null)
                {
                    execute_TransactionsOfOneBlock(readyBlock, opreturnStore);
                    processedBlockAmount++;
                    bool successMark = bpmc.enqueue_ToBlockQueuePooling();
                    if (!successMark)
                    {
                        //执行结束
                        Console.WriteLine("执行结束");
                        break;
                    }
                    if (processedBlockAmount % Configuration_Class.UTXOSliceLength == 0)
                    {
                        sliceFileAmount++;
                        //保存UTXO切片
                        Console.WriteLine("正在保存第" + (int)(processedBlockAmount / Configuration_Class.UTXOSliceLength) + "个切片状态,请勿现在终止程序..........");
                        save_SliceFile(utxoSliceFileLocationPath + "\\" + processedBlockAmount + "_" + readyBlock.BlockHeader.BlockTimestamp.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".txt", bpmc, processedBlockAmount, sliceFileAmount);
                        Console.WriteLine("切片保存完成");
                        if (opreturnStore)
                        {
                            //保存opreturn切片
                            Console.WriteLine("正在保存第" + (int)(processedBlockAmount / Configuration_Class.UTXOSliceLength) + "个opreturn切片状态,请勿现在终止程序..........");
                            save_opreturnOutputsFile(opreturnOutputsFileFileLocationPath + "\\" + processedBlockAmount + "_" + readyBlock.BlockHeader.BlockTimestamp.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".txt");
                            Console.WriteLine("opreturn切片保存完成");
                        }
                    }
                    if (processedBlockAmount % 100 == 0)
                    {
                        Console.WriteLine("已处理" + processedBlockAmount + "个区块");
                        Console.WriteLine("相同交易出现次数:" + sameTransactionCount);
                    }
                }
                timer1.Stop();
                Console.WriteLine("执行结束:" + timer1.Elapsed);
            }
            else
            {
                Console.WriteLine("程序重启失败.......");
            }
        }
Beispiel #2
0
        ////I.初次启动
        public void initial_Run(bool opreturnStore)
        {
            if (!Directory.Exists(utxoSliceFileLocationPath))
            {
                Directory.CreateDirectory(utxoSliceFileLocationPath);
            }
            Console.WriteLine("初次启动.........");
            //获取创世块
            Block genesisBlock = get_GenesisBlock();
            //计时
            Stopwatch timer = new Stopwatch();

            timer.Start();
            Block_Pooling_Manager_Class bpmc = new Block_Pooling_Manager_Class();

            bpmc.initialize_BlockQueuePooling(genesisBlock);
            processedBlockAmount = 0;
            sliceFileAmount      = 0;
            Block readyBlock;

            while ((readyBlock = bpmc.dequeue_FromBlockQueuePooling()) != null)
            {
                execute_TransactionsOfOneBlock(readyBlock, opreturnStore);
                processedBlockAmount++;
                bool successMark = bpmc.enqueue_ToBlockQueuePooling();
                if (!successMark)
                {
                    //执行结束
                    break;
                }
                if (processedBlockAmount % Configuration_Class.UTXOSliceLength == 0)
                {
                    sliceFileAmount++;
                    //保存UTXO切片
                    Console.WriteLine("正在保存第" + (int)(processedBlockAmount / Configuration_Class.UTXOSliceLength) + "个切片状态,请勿现在终止程序..........");
                    save_SliceFile(utxoSliceFileLocationPath + "\\" + processedBlockAmount + "_" + readyBlock.BlockHeader.BlockTimestamp.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".txt", bpmc, processedBlockAmount, sliceFileAmount);
                    Console.WriteLine("UTXO切片保存完成");
                    if (opreturnStore)
                    {
                        //保存opreturn切片
                        Console.WriteLine("正在保存第" + (int)(processedBlockAmount / Configuration_Class.UTXOSliceLength) + "个opreturn切片状态,请勿现在终止程序..........");
                        save_opreturnOutputsFile(opreturnOutputsFileFileLocationPath + "\\" + processedBlockAmount + "_" + readyBlock.BlockHeader.BlockTimestamp.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".txt");
                        Console.WriteLine("opreturn切片保存完成");
                    }
                }
                if (processedBlockAmount % 100 == 0)
                {
                    Console.WriteLine("已处理" + processedBlockAmount + "个区块");
                    Console.WriteLine("相同交易出现次数:" + sameTransactionCount);
                }
            }
            timer.Stop();
            Console.WriteLine("执行结束:" + timer.Elapsed);
        }