Example #1
0
        public void SetDbShrinkDepth(ulong depth)
        {
            var prefix = EntryPrefix.DbShrinkDepth.BuildPrefix();

            Save(prefix, UInt64Utils.ToBytes(depth), false);
            Commit();
        }
Example #2
0
        public void WriteNodeToBatch(ulong id, IHashTrieNode node, RocksDbAtomicWrite tx)
        {
            var prefix = EntryPrefix.PersistentHashMap.BuildPrefix(id);

            tx.Put(prefix, NodeSerializer.ToBytes(node));
            var hashPrefix = EntryPrefix.VersionByHash.BuildPrefix(node.Hash);

            tx.Put(hashPrefix, UInt64Utils.ToBytes(id));
        }
Example #3
0
        public void CommitNodes()
        {
            RocksDbAtomicWrite tx = new RocksDbAtomicWrite(_dbContext);

            foreach (var item in _nodeCache)
            {
                tx.Put(EntryPrefix.PersistentHashMap.BuildPrefix(item.Key), NodeSerializer.ToBytes(item.Value));
                Console.WriteLine("Adding node to DB : " + item.Key);
            }
            ulong nodesCnt = UInt64Utils.FromBytes(_dbContext.Get(EntryPrefix.NodesDownloadedTillNow.BuildPrefix()));

            nodesCnt += (ulong)_nodeCache.Count;
            tx.Put(EntryPrefix.NodesDownloadedTillNow.BuildPrefix(), UInt64Utils.ToBytes(nodesCnt));
            tx.Commit();
            _nodeCache.Clear();
        }
Example #4
0
        public static void StartSync(IStateManager stateManager,
                                     IRocksDbContext dbContext,
                                     ISnapshotIndexRepository snapshotIndexRepository,
                                     VersionFactory versionFactory,
                                     ulong blockNumber)
        {
            dbContext.Save(EntryPrefix.NodesDownloadedTillNow.BuildPrefix(), UInt64Utils.ToBytes(0));
            List <string> devnetNodes = new List <string>
            {
                "http://157.245.160.201:7070",
                "http://95.217.6.171:7070",
                "http://88.99.190.191:7070",
                "http://94.130.78.183:7070",
                "http://94.130.24.163:7070",
                "http://94.130.110.127:7070",
                "http://94.130.110.95:7070",
                "http://94.130.58.63:7070",
                "http://88.99.86.166:7070",
                "http://88.198.78.106:7070",
                "http://88.198.78.141:7070",
                "http://88.99.126.144:7070",
                "http://88.99.87.58:7070",
                "http://95.217.6.234:7070"
            };
//            List <string> onlyonenode = new List<string>
            List <string> localnetNodes = new List <string>
            {
                "http://127.0.0.1:7070",
                "http://127.0.0.1:7071",
                "http://127.0.0.1:7072"
            };

            var snapshot = stateManager.NewSnapshot();

            ISnapshot[] snapshots = new ISnapshot[] { snapshot.Balances,
                                                      snapshot.Contracts,
                                                      snapshot.Storage,
                                                      snapshot.Transactions,
                                                      snapshot.Events,
                                                      snapshot.Validators, };

            List <string>  urls           = devnetNodes;
            HybridQueue    hybridQueue    = new HybridQueue(dbContext);
            PeerManager    peerManager    = new PeerManager(urls);
            NodeStorage    nodeStorage    = new NodeStorage(dbContext, versionFactory);
            RequestManager requestManager = new RequestManager(nodeStorage, hybridQueue);
            Downloader     downloader     = new Downloader(peerManager, requestManager, blockNumber);

            string[] trieNames = new string[]
            {
                "Balances", "Contracts", "Storage", "Transactions", "Events", "Validators"
            };


            downloader.DownloadBlocks(nodeStorage, snapshot.Blocks);

            for (int i = 0; i < trieNames.Length; i++)
            {
                Logger.LogWarning($"Starting trie {trieNames[i]}");
                string rootHash  = downloader.GetTrie(trieNames[i], nodeStorage);
                bool   foundRoot = nodeStorage.GetIdByHash(rootHash, out ulong curTrieRoot);
                snapshots[i].SetCurrentVersion(curTrieRoot);
                Logger.LogWarning($"Ending trie {trieNames[i]} : {curTrieRoot}");
                Logger.LogWarning($"Max Queue Size {requestManager.maxQueueSize}");
                Logger.LogWarning($"Total Nodes downloaded: {versionFactory.CurrentVersion}");
            }

            blockNumber = Convert.ToUInt64(downloader.GetBlockNumber(), 16);
            stateManager.Approve();
            stateManager.Commit();
            snapshotIndexRepository.SaveSnapshotForBlock(blockNumber, snapshot);
            Logger.LogWarning($"Set state to block {blockNumber} complete");
        }
Example #5
0
        public void SetOldestSnapshotInDb(ulong block)
        {
            var prefix = EntryPrefix.OldestSnapshotInDb.BuildPrefix();

            Save(prefix, UInt64Utils.ToBytes(block));
        }
Example #6
0
        public void CommitIds()
        {
            RocksDbAtomicWrite tx = new RocksDbAtomicWrite(_dbContext);

            foreach (var item in _idCache)
            {
                tx.Put(EntryPrefix.VersionByHash.BuildPrefix(HexUtils.HexToBytes(item.Key)), UInt64Utils.ToBytes(item.Value));
            }
            tx.Commit();
            _idCache.Clear();
        }