Esempio n. 1
0
        public RocksDbProvider(string basePath, IDbConfig dbConfig, ILogManager logManager, bool useTraceDb, bool useReceiptsDb)
        {
            BlocksDb      = new BlocksRocksDb(basePath, dbConfig, logManager);
            HeadersDb     = new HeadersRocksDb(basePath, dbConfig, logManager);
            BlockInfosDb  = new BlockInfosRocksDb(basePath, dbConfig, logManager);
            StateDb       = new StateDb(new StateRocksDb(basePath, dbConfig, logManager));
            CodeDb        = new StateDb(new CodeRocksDb(basePath, dbConfig, logManager));
            PendingTxsDb  = new PendingTxsRocksDb(basePath, dbConfig, logManager);
            ConfigsDb     = new ConfigsRocksDb(basePath, dbConfig, logManager);
            EthRequestsDb = new EthRequestsRocksDb(basePath, dbConfig, logManager);

            if (useReceiptsDb)
            {
                ReceiptsDb = new ReceiptsRocksDb(basePath, dbConfig, logManager);
            }
            else
            {
                ReceiptsDb = new ReadOnlyDb(new MemDb(), false);
            }

            if (useTraceDb)
            {
                TraceDb = new TraceRocksDb(basePath, dbConfig, logManager);
            }
            else
            {
                TraceDb = new ReadOnlyDb(new MemDb(), false);
            }
        }
Esempio n. 2
0
        public void Smoke_test()
        {
            IDbConfig    config = new DbConfig();
            DbOnTheRocks db     = new BlocksRocksDb("blocks", config);

            db[new byte[] { 1, 2, 3 }] = new byte[] { 4, 5, 6 };
            Assert.AreEqual(new byte[] { 4, 5, 6 }, db[new byte[] { 1, 2, 3 }]);
        }
Esempio n. 3
0
        public void Can_get_all_on_empty()
        {
            IDbConfig    config = new DbConfig();
            DbOnTheRocks db     = new BlocksRocksDb("testIterator", config);

            try
            {
                db.GetAll().ToList();
            }
            finally
            {
                db.Clear();
                db.Dispose();
            }
        }
Esempio n. 4
0
        public void Init(string path)
        {
            var dbOnTheRocks = new BlocksRocksDb(path, new DbConfig(), LimboLogs.Instance);
            var blocksBytes  = dbOnTheRocks.GetAll();
            var blockDecoder = new BlockDecoder();
            var blocks       = blocksBytes
                               .Select(b => blockDecoder.Decode(b.Value.AsRlpStream()))
                               .OrderBy(b => b.Number)
                               .ToList();

            var window = new Window("Blocks")
            {
                X = 0, Y = 10, Width = Dim.Fill(), Height = Dim.Fill()
            };

            if (!blocks.Any())
            {
                MessageBox.Query(40, 7, "Info", "No data.");
                window.FocusPrev();
                return;
            }

            var y = 1;

            foreach (var block in blocks)
            {
                var blockBtn = new Button(1, y++, $"Number: {block.Number}, Hash: {block.Hash}");


                blockBtn.Clicked = () =>
                {
                    var blockDetailsWindow = new Window("Block details")
                    {
                        X = 0, Y = 10, Width = Dim.Fill(), Height = Dim.Fill()
                    };
                    Application.Top.Add(blockDetailsWindow);
                    var serializer = new EthereumJsonSerializer();
                    var blockLbl   = new Label(1, 1, serializer.Serialize(block, true));
                    blockDetailsWindow.Add(blockLbl);
                    Application.Run(blockDetailsWindow);
                };
                window.Add(blockBtn);
            }

            Application.Top.Add(window);
            Application.Run(window);
        }
Esempio n. 5
0
        public async Task Dispose_while_writing_does_not_cause_access_violation_exception()
        {
            IDbConfig    config = new DbConfig();
            DbOnTheRocks db     = new BlocksRocksDb("testDispose1", config);

            Task task = new Task(() =>
            {
                while (true)
                {
                    db.Set(Keccak.Zero, new byte[] { 1, 2, 3 });
                }
            });

            task.Start();

            await Task.Delay(100);

            db.Dispose();

            await Task.Delay(100);

            task.Dispose();
        }