コード例 #1
0
 public async Task <ConcurrentChain> GetMainChainAsync()
 {
     return(_indexerClient.GetMainChain());
 }
コード例 #2
0
        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);
        }