コード例 #1
0
        public BaselineTree CreateHistoricalTree(Address address, long blockNumber)
        {
            if (_logger.IsWarn)
            {
                _logger.Warn($"Building historical tree at {address} for block {blockNumber}");
            }
            var readOnlyMain     = new ReadOnlyDb(_mainDb, true);
            var readOnlyMetadata = new ReadOnlyDb(_metadataBaselineDb, true);
            var historicalTree   = new ShaBaselineTree(readOnlyMain, readOnlyMetadata, address.Bytes, BaselineModule.TruncationLength, _logger);
            var endIndex         = historicalTree.Count;
            var historicalCount  = historicalTree.GetBlockCount(blockNumber);

            if (_logger.IsWarn)
            {
                _logger.Warn($"Historical count of {historicalTree} for block {blockNumber} is {historicalCount}");
            }

            if (endIndex - historicalCount > 0)
            {
                if (_logger.IsWarn)
                {
                    _logger.Warn($"Deleting {endIndex - historicalCount} from {historicalTree}");
                }
                historicalTree.Delete(endIndex - historicalCount, false);
                historicalTree.CalculateHashes(historicalCount, endIndex);
                if (_logger.IsWarn)
                {
                    _logger.Warn($"After deleting from {historicalTree} root is {historicalTree.Root}");
                }
            }

            return(historicalTree);
        }
コード例 #2
0
        public BaselineTree RebuildEntireTree(Address treeAddress, Keccak blockHash)
        {
            if (_logger.IsWarn)
            {
                _logger.Warn($"Rebuilding entire tree from {treeAddress} at {blockHash}");
            }

            BaselineTree baselineTree = new ShaBaselineTree(_mainDb, _metadataBaselineDb, treeAddress.Bytes, BaselineModule.TruncationLength, _logger);
            var          trie         = BuildTree(baselineTree, treeAddress, new BlockParameter(0L), new BlockParameter(blockHash));

            return(trie);
        }