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);
        }
Beispiel #2
0
        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);
        }