public async Task <BlockHeaderData> GetHeader(uint256 headerHash, uint?heightHint = null, CancellationToken ct = default) { if (_headerCache.TryGetValue(headerHash, out var headerData)) { return(headerData); } if (heightHint != null) { var header = await _client.GetBlockHeaderAsync(headerHash); headerData = new BlockHeaderData(heightHint.Value, header); } else { var blockInfo = await _client.GetBlockAsync(headerHash, GetBlockVerbosity.WithOnlyTxId); headerData = new BlockHeaderData((uint)blockInfo.Height, blockInfo.Header); } _headerCache.TryAdd(headerHash, headerData); return(headerData); }
internal ForkStep(ForkStepKind kind, BlockHeaderData header) { Kind = kind; HeaderData = header ?? throw new ArgumentNullException(nameof(header)); }