예제 #1
0
        public async Task <Block> GetBlock(string id)
        {
            var b = await _client.GetInformationBlockAsync(id);

            var transactionList = new List <Core.Domain.Transaction>();
            var transactionIds  = b.Transactions.Select(p => p.TxId).ToList();

            foreach (var transactionId in transactionIds)
            {
                transactionList.Add(await _transactionProvider.GetTransaction(transactionId));
            }

            var block = new Block()
            {
                Hash              = b.Hash,
                Height            = b.Height,
                Time              = b.Time,
                Confirmations     = b.Confirmations,
                Difficulty        = b.Difficulty,
                MerkleRoot        = b.MerkleRoot,
                Nonce             = b.Nonce,
                TotalTransactions = b.TotalTransactions,
                PreviousBlock     = b.PreviousBlock,
                Transactions      = transactionList
            };

            return(block);
        }
예제 #2
0
        private static async Task <bool> IndexBlock(Model.BCExplorerContext context, string blockHash)
        {
            _logger.LogInformation($"Processing block at height {_currentBlockHeight}: {blockHash}");

            BlockResult blockResult = await _client.GetBlockAsync(blockHash);

            if (blockResult == null)
            {
                _logger.LogWarning($"Warning - could not retrieve block at height {_currentBlockHeight}: {blockHash}");
                return(false);
            }

            var block = new Model.Block
            {
                Id        = _currentBlockNumber,
                Height    = _currentBlockHeight,
                BlockHash = blockHash,
                BlockData = blockResult.OriginalJson
            };

            context.Blocks.Add(block);

            if (_currentBlockHeight == 0)
            {
                // for the transaction in the genesis block, we can't pull transaction data, so this is all we know
                var genesisBlockTransaction = new Model.Transaction {
                    Block = block, Id = blockResult.Transactions[0]
                };
                context.Transactions.Add(genesisBlockTransaction);
                _currentBlockHeight++;
                _currentBlockNumber++;
                context.SaveChanges();
                return(true);
            }

            List <BCExplorer.Network.Models.Transaction> blockTransactions = new List <BCExplorer.Network.Models.Transaction>();

            foreach (var txid in blockResult.Transactions)
            {
                var transaction = await _transactionProvider.GetTransaction(txid);

                transaction.Block = new BCExplorer.Network.Models.Block {
                    Height = _currentBlockHeight
                };
                blockTransactions.Add(transaction);
            }

            foreach (var blockTx in blockTransactions)
            {
                ProcessTransaction(blockTx, context);
            }

            context.SaveChanges();
            _currentBlockHeight++;
            _currentBlockNumber++;
            return(true);
        }
        public async Task <IActionResult> Get(string customerId, int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var item = await _transactionProvider.GetTransaction(customerId, id);

            if (item == null)
            {
                return(NotFound()); //404 Not Found (Client Error Status Code)
            }
            return(Ok(item));       //Get Successfull (Success Status Code)
        }
예제 #4
0
 public async Task <Transaction> GetTransaction(string id)
 {
     return(await _transactionProvider.GetTransaction(id));
 }