示例#1
0
        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());
        }
示例#2
0
        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);
        }