public async Task <List <DltBlock> > GetRecentBlocks(int numberOfBlocks) { ulong blockCount = (ulong)numberOfBlocks; var web3 = new Nethereum.Geth.Web3Geth(); ulong startBlockNumber = 0; ulong endBlockNumber = startBlockNumber + blockCount; var maxBlockNumber = await this.GetLatestBlockNumber(); startBlockNumber = maxBlockNumber < blockCount ? 1 : maxBlockNumber - blockCount; endBlockNumber = maxBlockNumber; List <DltBlock> dltBlocks = new List <DltBlock>(); Dictionary <string, SmartContractTransaction> databaseDataDict = new Dictionary <string, SmartContractTransaction>(); List <string> transactionHashesList = new List <string>(); for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++) { var blockParameter = new BlockParameter(blockNumber); var blockEth = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter); var trans = blockEth.Transactions; int txCount = trans.Length; DltBlock block = null; DateTime blockDatetime = Helper.UnixTimeStampToDateTime((double)blockEth.Timestamp.Value); block = new DltBlock { BlockNumber = blockNumber, TransactionCount = txCount, BlockDatetime = blockDatetime, BlockHash = blockEth.BlockHash, Difficulty = (ulong)blockEth.Difficulty.Value, GasLimit = (ulong)blockEth.GasLimit.Value, GasUsed = (ulong)blockEth.GasUsed.Value, Size = (ulong)blockEth.Size.Value }; if (block.TransactionCount > 0) { block.DltTransactions = new List <DltBlockTransaction>(); foreach (var transaction in blockEth.Transactions) { DltBlockTransaction dltTransaction = new DltBlockTransaction() { From = transaction.From, To = transaction.To, Gas = (ulong)transaction.Gas.Value, GasPrice = (ulong)transaction.GasPrice.Value, Nonce = (ulong)transaction.Nonce.Value, Value = (ulong)transaction.Value.Value, TransactionHash = transaction.TransactionHash }; block.DltTransactions.Add(dltTransaction); transactionHashesList.Add(transaction.TransactionHash); } } dltBlocks.Add(block); } dltBlocks = await AddDatabaseDataToDltBlock(dltBlocks, transactionHashesList); return(dltBlocks.OrderByDescending(block => block.BlockNumber).ToList()); }
public async Task <DltBlock> GetLatestBlock() { var web3 = new Nethereum.Geth.Web3Geth(); ulong blockNumber = await this.GetLatestBlockNumber(); var blockParameter = new BlockParameter(blockNumber); var blockEth = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter); var trans = blockEth.Transactions; int txCount = trans.Length; DltBlock block = null; DateTime blockDatetime = Helper.UnixTimeStampToDateTime((double)blockEth.Timestamp.Value); block = new DltBlock { BlockNumber = blockNumber, TransactionCount = txCount, BlockDatetime = blockDatetime, BlockHash = blockEth.BlockHash, Difficulty = (ulong)blockEth.Difficulty.Value, GasLimit = (ulong)blockEth.GasLimit.Value, GasUsed = (ulong)blockEth.GasUsed.Value, Size = (ulong)blockEth.Size.Value }; if (block.TransactionCount > 0) { block.DltTransactions = new List <DltBlockTransaction>(); foreach (var transaction in blockEth.Transactions) { DltBlockTransaction dltTransaction = new DltBlockTransaction() { From = transaction.From, To = transaction.To, Gas = (ulong)transaction.Gas.Value, GasPrice = (ulong)transaction.GasPrice.Value, Nonce = (ulong)transaction.Nonce.Value, Value = (ulong)transaction.Value.Value, TransactionHash = transaction.TransactionHash }; block.DltTransactions.Add(dltTransaction); } } return(block); }