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);
        }
Exemplo n.º 2
0
 internal ForkStep(ForkStepKind kind, BlockHeaderData header)
 {
     Kind       = kind;
     HeaderData = header ?? throw new ArgumentNullException(nameof(header));
 }