public static SortedList <long, TransactionSliceInfo> GetTransactionSlices(Base.Storage storage, ChainType chainType, int chainId, uint chainIndex, bool finalizedOnly) { var chainPath = GetTransactionStoragePath(chainType, chainId, chainIndex); var discSlices = storage.GetFiles(chainPath, "*.header"); var result = new SortedList <long, TransactionSliceInfo>(); foreach (var slice in discSlices) { var sliceId = int.Parse(slice.Name.Split('.')[0]); var info = DiscStorage.GetHeader(storage, Path.Combine(chainPath, sliceId.ToString())); var userData = new Unpacker(info.UserData); var firstBlockId = Protocol.InvalidBlockId; var blockId = Protocol.InvalidBlockId; var split = false; if (userData.UnpackBool()) { firstBlockId = userData.UnpackLong(); blockId = userData.UnpackLong(); split = userData.UnpackBool(); } if (!finalizedOnly || split) { result.Add(sliceId, new TransactionSliceInfo(sliceId, firstBlockId, blockId, split, info.Count, info.StartIndex, info.EndIndex)); } } return(result); }
public static SortedList <long, BlockSliceInfo> GetBlockSlices(Base.Storage storage, ChainType chainType, int chainId, uint chainIndex, bool finalizedOnly) { var result = new SortedList <long, BlockSliceInfo>(); var path = GetBlockStoragePath(chainType, chainId, chainIndex); var blockStorages = storage.GetFiles(path, "*.header"); foreach (var blockStorage in blockStorages) { var sliceIndex = long.Parse(blockStorage.Name.Split('.')[0]); var blockInfo = new BlockSliceInfo(sliceIndex); var header = DiscStorage.GetHeader(storage, Path.Combine(path, sliceIndex.ToString())); if (header.Count > 0) { blockInfo.FirstBlockId = header.StartIndex; blockInfo.LastBlockId = header.EndIndex; } if (finalizedOnly) { if (blockInfo.Finalized) { result.Add(sliceIndex, blockInfo); } } else { result.Add(sliceIndex, blockInfo); } } return(result); }