Exemplo n.º 1
0
        public void GetBlockInfo(long startBlockNumber = 1, long stopBlockNumber = 1, string contractAddress = "", Action <BlockByNumberDto> callBack = null)
        {
            new ThreadPoolWorkUtils().ThreadPoolWork(x =>
            {
                while (true)
                {
                    long newestBlockNumber = _rpcApiService.GetBlockNumber();//获取最新区块高度
                    if (stopBlockNumber > newestBlockNumber)
                    {
                        stopBlockNumber = newestBlockNumber;
                    }

                    if (startBlockNumber <= newestBlockNumber && startBlockNumber <= stopBlockNumber)
                    {
                        HexBigInteger blockNumber = new HexBigInteger(startBlockNumber);
                        bool state = true;
                        var result = _rpcApiService.SendQuery <BlockByNumberDto>(JsonRPCAPIConfig.GetBlockByNumber, new object[] { _groupId, blockNumber.ToString(), state });
                        if (!string.IsNullOrWhiteSpace(contractAddress))
                        {//获取指定的合约交易区块链数据
                            result.Transactions = result.Transactions.Where(x => x.To == contractAddress).ToList();
                        }
                        callBack?.Invoke(result);//指定回调进行操作
                        startBlockNumber++;
                    }
                }
            });
        }