public void SetDbShrinkDepth(ulong depth) { var prefix = EntryPrefix.DbShrinkDepth.BuildPrefix(); Save(prefix, UInt64Utils.ToBytes(depth), false); Commit(); }
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)); }
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(); }
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"); }
public void SetOldestSnapshotInDb(ulong block) { var prefix = EntryPrefix.OldestSnapshotInDb.BuildPrefix(); Save(prefix, UInt64Utils.ToBytes(block)); }
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(); }