public async Task <ConcurrentChain> GetMainChainAsync() { return(_indexerClient.GetMainChain()); }
public async Task <Core.Domain.Block> GetBlock(string id) { var blockId = NBitcoin.uint256.Parse(id); var blockRecord = await Task.Run <NBitcoin.Block>(() => _client.GetBlock(blockId)); ConcurrentChain chain; if (_chain == null) { _chain = _client.GetMainChain(); } chain = _chain; var confirmed = chain.GetBlock(blockId); if (blockRecord == null) { return(null); } var blockInformation = new BlockInformation { BlockId = confirmed.HashBlock, BlockHeader = confirmed.Header, Confirmations = chain.Tip.Height - confirmed.Height + 1, Height = confirmed.Height, MedianTimePast = confirmed.GetMedianTimePast(), BlockTime = confirmed.Header.BlockTime }; var transactionList = new List <Core.Domain.Transaction>(); foreach (var t in blockRecord.Transactions) { var transInfo = _client.GetTransaction(t.GetHash()); var colored = NBitcoin.OpenAsset.Extensions.HasValidColoredMarker(t); var tranExtraInfo = GetTransactionInfo(transInfo, colored, blockInformation); var transJson = Serializer.ToString <GetTransactionResponse>(tranExtraInfo, NBitcoin.Network.TestNet); var model = Serializer.ToObject <TransactionNinjaModel>(transJson, NBitcoin.Network.TestNet); if (colored) { var colorMarker = ColorMarker.Get(t); model.TransactionUrl = colorMarker.GetMetadataUrl(); } model.CalculateInputsWithReturnedChange(); var transaction = GetTransaction(model); transactionList.Add(transaction); } var block = new Core.Domain.Block() { Hash = id, Height = confirmed.Height, Time = confirmed.Header.BlockTime.UtcDateTime, Confirmations = chain.Tip.Height - confirmed.Height + 1, Difficulty = confirmed.Header.Bits.Difficulty, MerkleRoot = confirmed.Header.HashMerkleRoot.ToString(), Nonce = confirmed.Header.Nonce, PreviousBlock = confirmed.Header.HashPrevBlock.ToString(), Transactions = transactionList, TotalTransactions = transactionList.Count }; return(block); }