/// <summary>
        /// An Enhanced Packet Block is the standard container for storing the packets coming from the network. The Enhanced Packet Block
        /// is optional because packets can be stored either by means of this block or the Simple Packet Block, which can be used to speed
        /// up dump generation.
        /// The Enhanced Packet Block is an improvement over the original Packet Block:
        /// it stores the Interface Identifier as a 32bit integer value. This is a requirement when a capture stores packets coming from
        /// a large number of interfaces differently from the Packet Block, the number of packets dropped by the capture system between
        /// this packet and the previous one is not stored in the header, but rather in an option of the block itself.
        /// </summary>
        public EnchantedPacketBlock(int InterfaceID, TimestampHelper Timestamp, int PacketLength, byte[] Data, EnchantedPacketOption Options, long PositionInStream = 0)
        {
            Contract.Requires <ArgumentNullException>(Timestamp != null, "Timestamp cannot be null");
            Contract.Requires <ArgumentNullException>(Options != null, "Options cannot be null");
            Contract.Requires <ArgumentNullException>(Data != null, "Data cannot be null");

            this.InterfaceID      = InterfaceID;
            this.Timestamp        = Timestamp;
            this.PacketLength     = PacketLength;
            this.data             = Data;
            this.options          = Options;
            this.PositionInStream = PositionInStream;
        }
Exemple #2
0
        public ActionResult <Dictionary <string, object> > QueryVerifyCode()
        {
            RspMsg rspMsg = new RspMsg(RspType.OK);
            string code   = string.Empty;

            rspMsg.Add("VerifyBase64Str", VerifyCodeHelper.GetVerifyCodeBase64String(out code));
            rspMsg.Add("VerifyToken", DBCenter.JwtImage.SetJwtEncode(new Dictionary <string, object>
            {
                { "CheckCode", code },
                { "exp", TimestampHelper.GetTimestampSecond() + 300 }
            }));
            return(rspMsg.GetKeyValues());
        }
        public async Task PrepareExtraDataForNextMiningAsync_Expired_Test()
        {
            var sideChainId             = 123;
            var sideChainBlockInfoCache = new List <SideChainBlockData>();
            var cachingCount            = 5;

            for (int i = 0; i < cachingCount + CrossChainConstants.DefaultBlockCacheEntityCount; i++)
            {
                sideChainBlockInfoCache.Add(new SideChainBlockData()
                {
                    ChainId = sideChainId,
                    Height  = (i + 1),
                    TransactionStatusMerkleTreeRoot = Hash.FromString((sideChainId + 1).ToString())
                });
            }

            _crossChainTestHelper.AddFakeSideChainIdHeight(sideChainId, 1);
            var fakeCache = new Dictionary <int, List <IBlockCacheEntity> >
            {
                { sideChainId, sideChainBlockInfoCache.ToList <IBlockCacheEntity>() }
            };

            AddFakeCacheData(fakeCache);

            var crossChainBlockData = new CrossChainBlockData
            {
                SideChainBlockDataList = { sideChainBlockInfoCache }
            };

            _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal(
                new GetPendingCrossChainIndexingProposalOutput
            {
                Proposer   = SampleAddress.AddressList[0],
                ProposalId = Hash.FromString("ProposalId"),
                ProposedCrossChainBlockData = crossChainBlockData,
                ToBeReleased = true,
                ExpiredTime  = TimestampHelper.GetUtcNow().AddSeconds(-1)
            });

            var res = await _crossChainIndexingDataService.PrepareExtraDataForNextMiningAsync(Hash.Empty, 1);

            Assert.Empty(res);
            var crossChainTransactionInput =
                await _crossChainIndexingDataService.GetCrossChainTransactionInputForNextMiningAsync(Hash.Empty, 1);

            Assert.NotNull(crossChainTransactionInput);
            var crossChainBlockDataFromInput = CrossChainBlockData.Parser.ParseFrom(crossChainTransactionInput.Value);

            Assert.Equal(CrossChainConstants.DefaultBlockCacheEntityCount,
                         crossChainBlockDataFromInput.SideChainBlockDataList.Count);
        }
Exemple #4
0
        public async Task WrongParallelTest()
        {
            var chain = await _blockchainService.GetChainAsync();

            await _blockchainService.SetIrreversibleBlockAsync(chain, chain.BestChainHeight, chain.BestChainHash);

            var transactions =
                _parallelTestHelper.GenerateBasicFunctionWithParallelTransactions(_groupCount, _transactionCount);
            await _parallelTestHelper.BroadcastTransactions(transactions);

            var poolSize = await _txHub.GetTransactionPoolSizeAsync();

            poolSize.ShouldBe(transactions.Count);

            var groupedTransactions = await _grouper.GroupAsync(
                new ChainContext { BlockHash = chain.BestChainHash, BlockHeight = chain.BestChainHeight },
                transactions);

            groupedTransactions.Parallelizables.Count.ShouldBe(_transactionCount);
            groupedTransactions.NonParallelizables.Count.ShouldBe(0);

            var block = await _minerService.MineAsync(chain.BestChainHash, chain.BestChainHeight, TimestampHelper.GetUtcNow(),
                                                      TimestampHelper.DurationFromSeconds(4));

            block.TransactionIds.Count().ShouldBe(_groupCount);
            await _blockchainService.AddBlockAsync(block);

            await _blockAttachService.AttachBlockAsync(block);

            var codeRemarks =
                await _codeRemarksManager.GetCodeRemarksAsync(
                    Hash.FromRawBytes(_parallelTestHelper.BasicFunctionWithParallelContractCode));

            codeRemarks.ShouldNotBeNull();
            codeRemarks.NonParallelizable.ShouldBeTrue();

            groupedTransactions = await _grouper.GroupAsync(new ChainContext { BlockHash = block.GetHash(), BlockHeight = block.Height },
                                                            transactions);

            groupedTransactions.Parallelizables.Count.ShouldBe(0);
            groupedTransactions.NonParallelizables.Count.ShouldBe(_transactionCount);

            poolSize = await _txHub.GetTransactionPoolSizeAsync();

            poolSize.ShouldBe(transactions.Count - block.TransactionIds.Count());

            block = await _minerService.MineAsync(block.GetHash(), block.Height, TimestampHelper.GetUtcNow(),
                                                  TimestampHelper.DurationFromSeconds(4));

            block.TransactionIds.Count().ShouldBe(poolSize);
        }
        /// <summary>
        /// Basically update the consensus scheduler with latest consensus command.
        /// </summary>
        /// <param name="chainContext"></param>
        /// <returns></returns>
        public async Task TriggerConsensusAsync(ChainContext chainContext)
        {
            var now = TimestampHelper.GetUtcNow();

            _blockTimeProvider.SetBlockTime(now);

            Logger.LogDebug($"Set block time to utc now: {now.ToDateTime():hh:mm:ss.ffffff}. Trigger.");

            var triggerInformation =
                _triggerInformationProvider.GetTriggerInformationForConsensusCommand(new BytesValue());

            Logger.LogDebug($"Mining triggered, chain context: {chainContext.BlockHeight} - {chainContext.BlockHash}");

            // Upload the consensus command.
            var contractReaderContext =
                await _consensusReaderContextService.GetContractReaderContextAsync(chainContext);

            _consensusCommand = await _contractReaderFactory
                                .Create(contractReaderContext).GetConsensusCommand
                                .CallAsync(triggerInformation);

            if (_consensusCommand == null)
            {
                Logger.LogWarning("Consensus command is null.");
                return;
            }

            Logger.LogDebug($"Updated consensus command: {_consensusCommand}");

            // Update next mining time, also block time of both getting consensus extra data and txs.
            _nextMiningTime = _consensusCommand.ArrangedMiningTime;
            var leftMilliseconds = _consensusCommand.ArrangedMiningTime - TimestampHelper.GetUtcNow();

            leftMilliseconds = leftMilliseconds.Seconds > ConsensusConstants.MaximumLeftMillisecondsForNextBlock
                ? new Duration {
                Seconds = ConsensusConstants.MaximumLeftMillisecondsForNextBlock
            }
                : leftMilliseconds;

            // Update consensus scheduler.
            var blockMiningEventData = new ConsensusRequestMiningEventData(chainContext.BlockHash,
                                                                           chainContext.BlockHeight,
                                                                           _nextMiningTime,
                                                                           TimestampHelper.DurationFromMilliseconds(_consensusCommand.LimitMillisecondsOfMiningBlock),
                                                                           _consensusCommand.MiningDueTime);

            _consensusScheduler.CancelCurrentEvent();
            _consensusScheduler.NewEvent(leftMilliseconds.Milliseconds(), blockMiningEventData);

            Logger.LogDebug($"Set next mining time to: {_nextMiningTime.ToDateTime():hh:mm:ss.ffffff}");
        }
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            context.Services.Replace(ServiceDescriptor.Singleton <INetworkService, NetworkService>());

            context.Services.Replace(ServiceDescriptor.Singleton <IAElfNetworkServer>(o =>
            {
                var pool       = o.GetService <IPeerPool>();
                var serverMock = new Mock <IAElfNetworkServer>();

                serverMock.Setup(p => p.DisconnectAsync(It.IsAny <IPeer>(), It.IsAny <bool>()))
                .Returns(Task.CompletedTask)
                .Callback <IPeer, bool>((peer, disc) => pool.RemovePeer(peer.Info.Pubkey));

                return(serverMock.Object);
            }));

            context.Services.AddSingleton(provider =>
            {
                var mockService = new Mock <IBlockExtraDataService>();
                mockService.Setup(m => m.GetExtraDataFromBlockHeader(It.IsAny <string>(), It.IsAny <BlockHeader>()))
                .Returns(ByteString.CopyFrom(new AElfConsensusHeaderInformation
                {
                    Behaviour = AElfConsensusBehaviour.NextRound,
                    Round     = new Round
                    {
                        RoundNumber   = 12,
                        TermNumber    = 1,
                        BlockchainAge = 3,
                        ExtraBlockProducerOfPreviousRound = "bp2-pubkey",
                        MainChainMinersRoundNumber        = 3,
                        RealTimeMinersInformation         =
                        {
                            {
                                "bp1-pubkey", new MinerInRound
                                {
                                    Order              = 2,
                                    ProducedBlocks     = 3,
                                    ExpectedMiningTime = TimestampHelper.GetUtcNow().AddSeconds(3),
                                    ActualMiningTimes  = { },
                                    MissedTimeSlots    = 1
                                }
                            }
                        }
                    },
                    SenderPubkey = ByteString.CopyFromUtf8("pubkey")
                }.ToByteArray()));

                return(mockService.Object);
            });
        }
Exemple #7
0
        public void ValidateQueueAvailabilityBeforeDownload_Test()
        {
            _blockDownloadService.ValidateQueueAvailabilityBeforeDownload().ShouldBeTrue();

            _blockSyncStateProvider.SetEnqueueTime(OSConstants.BlockSyncAttachQueueName,
                                                   TimestampHelper.GetUtcNow()
                                                   .AddMilliseconds(-BlockSyncConstants.BlockSyncAttachBlockAgeLimit - 1000));
            _blockDownloadService.ValidateQueueAvailabilityBeforeDownload().ShouldBeFalse();

            _blockSyncStateProvider.SetEnqueueTime(KernelConstants.UpdateChainQueueName,
                                                   TimestampHelper.GetUtcNow()
                                                   .AddMilliseconds(-BlockSyncConstants.BlockSyncAttachAndExecuteBlockAgeLimit - 1000));
            _blockDownloadService.ValidateQueueAvailabilityBeforeDownload().ShouldBeFalse();
        }
Exemple #8
0
        public Task <bool> ValidateBeforeAttachAsync(IBlock block)
        {
            if (block?.Header == null || block.Body == null)
            {
                Logger.LogWarning("Block header or body is null.");
                return(Task.FromResult(false));
            }

            if (block.Body.TransactionsCount == 0)
            {
                Logger.LogWarning("Block transactions is empty");
                return(Task.FromResult(false));
            }

            var hashSet = new HashSet <Hash>();

            if (block.Body.TransactionIds.Select(item => hashSet.Add(item)).Any(addResult => !addResult))
            {
                Logger.LogWarning("Block contains duplicates transaction");
                return(Task.FromResult(false));
            }

            if (_blockchainService.GetChainId() != block.Header.ChainId)
            {
                Logger.LogWarning($"Block chain id mismatch {block.Header.ChainId}");
                return(Task.FromResult(false));
            }

            if (block.Header.Height != AElfConstants.GenesisBlockHeight && !block.VerifySignature())
            {
                Logger.LogWarning("Block verify signature failed.");
                return(Task.FromResult(false));
            }

            if (block.Body.CalculateMerkleTreeRoot() != block.Header.MerkleTreeRootOfTransactions)
            {
                Logger.LogWarning("Block merkle tree root mismatch.");
                return(Task.FromResult(false));
            }

            if (block.Header.Height != AElfConstants.GenesisBlockHeight &&
                block.Header.Time.ToDateTime() - TimestampHelper.GetUtcNow().ToDateTime() >
                KernelConstants.AllowedFutureBlockTimeSpan.ToTimeSpan())
            {
                Logger.LogWarning($"Future block received {block}, {block.Header.Time.ToDateTime()}");
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
Exemple #9
0
 private BlockHeader GenerateBlockHeader()
 {
     return(new BlockHeader
     {
         ChainId = 1234,
         Height = 10,
         PreviousBlockHash = HashHelper.ComputeFrom("hash3"),
         MerkleTreeRootOfTransactions = Hash.Empty,
         MerkleTreeRootOfWorldState = Hash.Empty,
         Time = TimestampHelper.GetUtcNow(),
         MerkleTreeRootOfTransactionStatus = Hash.Empty,
         SignerPubkey = ByteString.CopyFromUtf8("SignerPubkey")
     });
 }
Exemple #10
0
        public async Task CheckExtraDataIsNeeded_NotToBeReleased_Test()
        {
            var sideChainId = 123;

            var utcNow = TimestampHelper.GetUtcNow();

            _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal(sideChainId,
                                                                           CreatePendingChainIndexingProposalStatus(SampleAddress.AddressList[0],
                                                                                                                    HashHelper.ComputeFrom("ProposalId"),
                                                                                                                    new CrossChainBlockData(), false));
            var res = await _crossChainIndexingDataService.CheckExtraDataIsNeededAsync(Hash.Empty, 1, utcNow);

            res.ShouldBe(false);
        }
        public void EnqueueTime_Test()
        {
            var testQueueName   = "TestQueue";
            var testEnqueueTime = TimestampHelper.GetUtcNow();

            var enqueueTime = _blockSyncStateProvider.GetEnqueueTime(testQueueName);

            enqueueTime.ShouldBeNull();

            _blockSyncStateProvider.SetEnqueueTime(testQueueName, testEnqueueTime);

            enqueueTime = _blockSyncStateProvider.GetEnqueueTime(testQueueName);
            enqueueTime.ShouldBe(testEnqueueTime);
        }
        public async Task <SmartContractRegistration> GetSmartContractRegistrationAsync(IChainContext chainContext, Address address)
        {
            var zeroAddress = _defaultContractZeroCodeProvider.ContractZeroAddress;
            var tx          = new Transaction
            {
                From       = zeroAddress,
                To         = zeroAddress,
                MethodName = nameof(ACS0Container.ACS0Stub.GetSmartContractRegistrationByAddress),
                Params     = address.ToByteString()
            };

            return(await _transactionReadOnlyExecutionService.ExecuteAsync <SmartContractRegistration>(
                       chainContext, tx, TimestampHelper.GetUtcNow(), false));
        }
 public static BlockHeader CreateFakeBlockHeader(int chainId, long height, ECKeyPair producer)
 {
     return(new BlockHeader
     {
         ChainId = chainId,
         Height = height,
         PreviousBlockHash = HashHelper.ComputeFrom(new byte[] { 1, 2, 3 }),
         Time = TimestampHelper.GetUtcNow(),
         MerkleTreeRootOfTransactions = Hash.Empty,
         MerkleTreeRootOfWorldState = Hash.Empty,
         MerkleTreeRootOfTransactionStatus = Hash.Empty,
         SignerPubkey = ByteString.CopyFrom(producer.PublicKey)
     });
 }
Exemple #14
0
        public async Task RunPriceListSynchronizationAsync()
        {
            var statistics = new PriceListSynchronizationStatistics();

            try
            {
                await _ekSearchManagementClient.CreateProductIndexIfNotExistAsync();

                var       from  = 0;
                const int count = 1_000;

                using (var searchIndexClient = _ekSearchManagementClient.CreateSearchIndexClient())
                {
                    searchIndexClient.IndexName = _ekSearchManagementClient.ProductsIndexName;
                    var updateUtcTimestamp = TimestampHelper.GetCurrentUtcTotalMinutes();

                    while (true)
                    {
                        var isFinalPage = await RequestAndIndexPriceListPageAsync(searchIndexClient, from, count, updateUtcTimestamp, statistics);

                        if (isFinalPage)
                        {
                            break;
                        }

                        from += count;
                    }

                    // wait half of minute until changes are applied
                    await Task.Delay(TimeSpan.FromSeconds(30));

                    await PriceListHelper.CleanExpiredRecordsAsync(
                        searchIndexClient,
                        EkProductSourceEnum.OmegaAutoBiz,
                        updateUtcTimestamp,
                        statistics,
                        _logger);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(LoggingEvents.UnhandledException, ex, "Omega price list synchronization failed.");
                await _notificationManager.SendWorkerMessageAsync($"ERROR! Omega price list synchronization failed, {statistics}: {ex.Message}");

                throw;
            }

            await _notificationManager.SendWorkerMessageAsync($"Omega price list synchronization succeed, {statistics}.");
        }
Exemple #15
0
        public Task BroadcastAnnounceAsync(BlockHeader blockHeader, bool hasFork)
        {
            var blockHash = blockHeader.GetHash();

            if (!TryAddKnownBlock(blockHeader))
            {
                return(Task.CompletedTask);
            }

            if (IsOldBlock(blockHeader))
            {
                return(Task.CompletedTask);
            }

            var announce = new BlockAnnouncement
            {
                BlockHash   = blockHash,
                BlockHeight = blockHeader.Height,
                HasFork     = hasFork
            };

            var beforeEnqueue = TimestampHelper.GetUtcNow();

            _taskQueueManager.Enqueue(async() =>
            {
                var execTime = TimestampHelper.GetUtcNow();
                if (execTime > beforeEnqueue +
                    TimestampHelper.DurationFromMilliseconds(NetworkConstants.AnnouncementQueueJobTimeout))
                {
                    Logger.LogWarning($"Announcement too old: {execTime - beforeEnqueue}");
                    return;
                }

                foreach (var peer in _peerPool.GetPeers())
                {
                    try
                    {
                        await peer.SendAnnouncementAsync(announce);
                    }
                    catch (NetworkException ex)
                    {
                        Logger.LogError(ex, $"Error while announcing to {peer}.");
                        await HandleNetworkException(peer, ex);
                    }
                }
            }, NetworkConstants.AnnouncementBroadcastQueueName);

            return(Task.CompletedTask);
        }
        public async Task PrepareExtraDataForNextMiningAsync_AlmostExpired_Test()
        {
            var sideChainId             = 123;
            var sideChainBlockInfoCache = new List <SideChainBlockData>();
            var cachingCount            = 5;

            for (int i = 0; i < cachingCount + CrossChainConstants.DefaultBlockCacheEntityCount; i++)
            {
                sideChainBlockInfoCache.Add(new SideChainBlockData()
                {
                    ChainId = sideChainId,
                    Height  = (i + 1),
                    TransactionStatusMerkleTreeRoot = Hash.FromString((sideChainId + 1).ToString())
                });
            }

            _crossChainTestHelper.AddFakeSideChainIdHeight(sideChainId, 1);
            var fakeCache = new Dictionary <int, List <IBlockCacheEntity> >
            {
                { sideChainId, sideChainBlockInfoCache.ToList <IBlockCacheEntity>() }
            };

            AddFakeCacheData(fakeCache);

            var crossChainBlockData = new CrossChainBlockData
            {
                SideChainBlockDataList = { sideChainBlockInfoCache }
            };

            _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal(
                new GetPendingCrossChainIndexingProposalOutput
            {
                Proposer   = SampleAddress.AddressList[0],
                ProposalId = Hash.FromString("ProposalId"),
                ProposedCrossChainBlockData = crossChainBlockData,
                ToBeReleased = true,
                ExpiredTime  = TimestampHelper.GetUtcNow().AddMilliseconds(500)
            });

            var res = await _crossChainIndexingDataService.PrepareExtraDataForNextMiningAsync(Hash.Empty, 1);

            var crossChainExtraData    = CrossChainExtraData.Parser.ParseFrom(res);
            var expectedMerkleTreeRoot = BinaryMerkleTree
                                         .FromLeafNodes(sideChainBlockInfoCache.Select(s => s.TransactionStatusMerkleTreeRoot)).Root;

            Assert.Equal(expectedMerkleTreeRoot, crossChainExtraData.TransactionStatusMerkleTreeRoot);
            Assert.Equal(res,
                         _crossChainIndexingDataService.ExtractCrossChainExtraDataFromCrossChainBlockData(crossChainBlockData));
        }
Exemple #17
0
        private async Task <Address> GetSmartContractAddressFromStateAsync(IChainContext chainContext, string name)
        {
            var zeroAddress = _defaultContractZeroCodeProvider.ContractZeroAddress;
            var tx          = new Transaction
            {
                From       = zeroAddress,
                To         = zeroAddress,
                MethodName = nameof(ACS0Container.ACS0Stub.GetContractAddressByName),
                Params     = Hash.LoadFromBase64(name).ToByteString()
            };
            var address = await _transactionReadOnlyExecutionService.ExecuteAsync <Address>(
                chainContext, tx, TimestampHelper.GetUtcNow(), false);

            return(address == null || address.Value.IsEmpty ? null : address);
        }
 public void CleanIdleExecutive()
 {
     foreach (var executivePool in _smartContractExecutiveProvider.GetExecutivePools())
     {
         var executiveBag = executivePool.Value;
         if (executiveBag.Count > ExecutiveClearLimit && executiveBag.Min(o => o.LastUsedTime) <
             TimestampHelper.GetUtcNow() - TimestampHelper.DurationFromSeconds(ExecutiveExpirationTime))
         {
             if (executiveBag.TryTake(out _))
             {
                 Logger.LogDebug($"Cleaned an idle executive for address {executivePool.Key}.");
             }
         }
     }
 }
Exemple #19
0
        public void RemoveReconnectionPeer_Test()
        {
            var endpoint = "127.0.0.1:5677";
            var utcNow   = TimestampHelper.GetUtcNow();

            _reconnectionProvider.AddReconnectingPeer(endpoint, new ReconnectingPeer {
                Endpoint = endpoint, NextAttempt = utcNow
            });
            _reconnectionProvider.RemoveReconnectionPeer(endpoint).ShouldBeTrue();

            _reconnectionProvider.GetReconnectingPeer(endpoint).ShouldBeNull();
            _reconnectionProvider.GetPeersReadyForReconnection(utcNow.AddSeconds(1)).Count.ShouldBe(0);

            _reconnectionProvider.RemoveReconnectionPeer(endpoint).ShouldBeFalse();
        }
Exemple #20
0
        public async Task <List <ChatMessageDto> > SeekHistory(string channel, string dateStart, string dateEnd)
        {
            List <ChatMessage>    messagesData = new List <ChatMessage>();
            List <ChatMessageDto> result       = new List <ChatMessageDto>();

            try
            {
                DateTime start = DateTime.ParseExact(dateStart, "ddMMyyyyHH:mm:ss", CultureInfo.InvariantCulture);
                DateTime end   = DateTime.ParseExact(dateEnd, "ddMMyyyyHH:mm:ss", CultureInfo.InvariantCulture);
                messagesData = await _chatRepository.SeekHistoryMessage(channel, start, end);
            }
            catch (ArgumentNullException argumentEx)
            {
                throw HttpHelper.HttpError(System.Net.HttpStatusCode.BadRequest, "Some argument are null");
            }
            catch (FormatException formatEx)
            {
                throw HttpHelper.HttpError(System.Net.HttpStatusCode.BadRequest, "Date format not supported");
            }
            catch (Exception ex)
            {
                _logger.Log(LogLevel.Error, _logCategory, "An error occured when seek history in chat repository", ex.Message);
                throw HttpHelper.HttpError(System.Net.HttpStatusCode.InternalServerError, "Server Internal error(s)");
            }

            if (result.Count == 0)
            {
                throw HttpHelper.HttpError(System.Net.HttpStatusCode.NoContent, $"No data found in request date range DateStart={dateStart}, DateEnd={dateEnd}");
            }
            else
            {
                foreach (ChatMessage msg in messagesData)
                {
                    var message = new ChatMessageDto
                    {
                        Message   = msg.Message,
                        TimeStamp = TimestampHelper.DateTimeToUnixTimeStamp(msg.Date),
                        UserInfo  = new ChatUserInfoDto
                        {
                            UserId = msg.UserInfo.UserId,
                            Data   = msg.UserInfo.Data.ToString(),
                        }
                    };
                    result.Add(message);
                }
                return(result);
            }
        }
Exemple #21
0
        public async Task ChangeSymbolsToPayTXSizeFeeController_Success_Test()
        {
            var primaryToken = await TokenContractStub.GetPrimaryTokenSymbol.CallAsync(new Empty());

            var newSymbolList = new SymbolListToPayTxSizeFee();

            newSymbolList.SymbolsToPayTxSizeFee.Add(new SymbolToPayTxSizeFee
            {
                TokenSymbol      = primaryToken.Value,
                AddedTokenWeight = 1,
                BaseTokenWeight  = 1
            });

            // create a new organization to be replace the controller of SetSymbolsToPayTxSizeFee
            var newAuthority = await CreateNewParliamentAddressAsync();

            // get the default parliament that is the controller of SetSymbolsToPayTxSizeFee
            var defaultParliamentAddress = await GetDefaultParliamentAddressAsync();

            // create a proposal to replace the controller
            var createProposalInput = new CreateProposalInput
            {
                ToAddress           = TokenContractAddress,
                Params              = newAuthority.ToByteString(),
                OrganizationAddress = defaultParliamentAddress,
                ContractMethodName  = nameof(TokenContractImplContainer.TokenContractImplStub
                                             .ChangeSymbolsToPayTXSizeFeeController),
                ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1)
            };

            await MainChainTesterCreatApproveAndReleaseProposalForParliamentAsync(createProposalInput);

            // the new controller try to send SetSymbolsToPayTxSizeFee
            var updateInput = new CreateProposalInput
            {
                ToAddress           = TokenContractAddress,
                Params              = newSymbolList.ToByteString(),
                OrganizationAddress = newAuthority.OwnerAddress,
                ContractMethodName  = nameof(TokenContractImplContainer.TokenContractImplStub.SetSymbolsToPayTxSizeFee),
                ExpiredTime         = TimestampHelper.GetUtcNow().AddHours(1)
            };

            await MainChainTesterCreatApproveAndReleaseProposalForParliamentAsync(updateInput);

            var symbolSet = await TokenContractStub.GetSymbolsToPayTxSizeFee.CallAsync(new Empty());

            symbolSet.SymbolsToPayTxSizeFee.Count.ShouldBe(1);
        }
        public Task <GetHistoryResult> GetHistory(GetHistoryRequest body)
        {
            return(Task.Run(() =>
            {
                var request = FilterRequestForWPS(Request);
                if (!request.Status)
                {
                    return new GetHistoryResult {
                        code = request.code, msg = request.msg
                    };
                }
                // 从数据库查询用户、文件信息等......

                // 创建时间和修改时间默认全是现在
                var now = TimestampHelper.GetCurrentTimestamp();

                // 不需要使用历史版本功能的此处也请返回,如果此接口不通时,文档加载会报错:“GetFileInfoFailed”
                var result = new GetHistoryResult
                {
                    histories = new List <HistroyModel>
                    {
                        new HistroyModel
                        {
                            id = request.FileId,
                            name = "文件名",
                            size = 1024, // 单位B
                            version = 1,
                            download_url = "文件下载链接",
                            create_time = now,
                            modify_time = now,
                            creator = new UserModel
                            {
                                id = "创建者ID",
                                name = "创建者名",
                                avatar_url = "创建者头像url"
                            },
                            modifier = new UserModel
                            {
                                id = "修改者ID",
                                name = "修改者名",
                                avatar_url = "修改者头像url"
                            }
                        }
                    }
                };
                return result;
            }));
        }
        public JsonResult Version(int version)
        {
            _log.WriteInfo("开始请求接口【file/version】");
            GetFileByVersionResult result = new GetFileByVersionResult();

            try
            {
                var request = GetFilterRequest.GetParams(HttpContext.ApplicationInstance.Request);
                if (!request.Status)
                {
                    result.code    = request.code;
                    result.message = request.message;
                    result.details = request.details;
                    result.hint    = request.hint;
                }
                else
                {
                    // 从数据库查询文件信息......

                    // 创建时间和修改时间默认全是现在

                    var    now      = TimestampHelper.GetCurrentTimestamp();
                    var    fileName = version == 1 ? "TestFile_v1.docx" : (version == 2 ? "TestFile_v2.docx" : "TestFile.docx");
                    string filePath = Server.MapPath($"/Files/{fileName}");
                    result.file = new GetFileResult
                    {
                        id           = request.FileId,
                        name         = fileName,
                        version      = version,
                        size         = FileHelper.FileSize(filePath), // WPS单位是B,
                        create_time  = now,
                        creator      = "天玺",
                        modify_time  = now,
                        modifier     = "天玺",
                        download_url = $"{ConfigurationManager.AppSettings["WPSTokenUrl"]}/Files/{fileName}"
                    };
                }
            }
            catch (Exception ex)
            {
                _log.WriteError("【系统异常】-【" + ex.Message + "】", ex);
                result.code    = (int)Enumerator.ErrorCode.ServerError;
                result.message = Enumerator.ErrorCode.ServerError.ToString();
                result.details = result.hint = EnumExtension.GetDescription(Enumerator.ErrorCode.ServerError);
            }
            _log.WriteInfo("请求接口【file/version】完成,返回数据:" + JsonConvert.SerializeObject(result));
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Exemple #24
0
        public void Execute()
        {
            var s          = CurrentTransactionContext.Trace.StartTime = TimestampHelper.GetUtcNow().ToDateTime();
            var methodName = CurrentTransactionContext.Transaction.MethodName;
            var observer   = IsSystemContract ?
                             new ExecutionObserver(-1, -1) : // Counters are active but no threshold
                             new ExecutionObserver(CurrentTransactionContext.ExecutionCallThreshold,
                                                   CurrentTransactionContext.ExecutionBranchThreshold);

            try
            {
                if (!_callHandlers.TryGetValue(methodName, out var handler))
                {
                    throw new RuntimeException(
                              $"Failed to find handler for {methodName}. We have {_callHandlers.Count} handlers: " +
                              string.Join(", ", _callHandlers.Keys.OrderBy(k => k))
                              );
                }

                _smartContractProxy.SetExecutionObserver(observer);

                ExecuteTransaction(handler);

                if (!handler.IsView())
                {
                    CurrentTransactionContext.Trace.StateSet = GetChanges();
                }
                else
                {
                    CurrentTransactionContext.Trace.StateSet = new TransactionExecutingStateSet();
                }
            }
            catch (Exception ex)
            {
                CurrentTransactionContext.Trace.ExecutionStatus = ExecutionStatus.SystemError;
                CurrentTransactionContext.Trace.Error          += ex + "\n";
            }
            finally
            {
                CurrentTransactionContext.Trace.ExecutionCallCount   = observer.GetCallCount();
                CurrentTransactionContext.Trace.ExecutionBranchCount = observer.GetBranchCount();
                Cleanup();
            }

            var e = CurrentTransactionContext.Trace.EndTime = TimestampHelper.GetUtcNow().ToDateTime();

            CurrentTransactionContext.Trace.Elapsed = (e - s).Ticks;
        }
        public async Task Register_With_Invalid_Timestamp()
        {
            var endTime = TimestampHelper.GetUtcNow();
            var input   = new VotingRegisterInput
            {
                TotalSnapshotNumber = 0,
                EndTimestamp        = endTime,
                StartTimestamp      = endTime.AddDays(1),
                Options             = { GenerateOptions(1) },
                AcceptedCurrency    = TestTokenSymbol,
                IsLockToken         = true
            };
            var transactionResult = (await VoteContractStub.Register.SendWithExceptionAsync(input)).TransactionResult;

            transactionResult.Error.ShouldContain("Invalid active time.");
        }
Exemple #26
0
        public Handshake CreateHandshake(ECKeyPair initiatorPeer, int chainId = NetworkTestConstants.DefaultChainId)
        {
            var data = new HandshakeData
            {
                ChainId = _blockchainService.GetChainId(),
                Version = KernelConstants.ProtocolVersion,
                Pubkey  = ByteString.CopyFrom(initiatorPeer.PublicKey),
                Time    = TimestampHelper.GetUtcNow()
            };

            var signature = CryptoHelper.SignWithPrivateKey(initiatorPeer.PrivateKey, Hash.FromMessage(data).ToByteArray());

            return(new Handshake {
                HandshakeData = data, Signature = ByteString.CopyFrom(signature)
            });
        }
        public async Task BroadcastAnnounce_Test()
        {
            var blockHeader = _kernelTestHelper.GenerateBlock(10, Hash.FromString("test")).Header;

            //old block
            blockHeader.Time = TimestampHelper.GetUtcNow() - TimestampHelper.DurationFromMinutes(20);
            await _networkService.BroadcastAnnounceAsync(blockHeader, false);

            //known block
            blockHeader.Time = TimestampHelper.GetUtcNow();
            await _networkService.BroadcastAnnounceAsync(blockHeader, false);

            //broadcast again
            blockHeader = _kernelTestHelper.GenerateBlock(11, Hash.FromString("new")).Header;
            await _networkService.BroadcastAnnounceAsync(blockHeader, false);
        }
Exemple #28
0
        public void SaveSandboxHeader()
        {
            if (ignoreChangeEvents)
            {
                return;
            }

            Session.mapVariantFile.MapVariant.VariantAuthor       = editedMapAuthor.text.Replace("	", "");
            Session.mapVariantFile.MapVariant.VariantDescription  = editedMapDescription.text.Replace("	", "");;
            Session.mapVariantFile.MapVariant.VariantName         = editedMapName.text.Replace("	", "");;
            Session.mapVariantFile.MapVariant.VariantCreationDate = TimestampHelper.ToTimestamp(DateTime.Now);

            Session.mapVariantFile.SaveFile();

            UpdateDisplay(Session.mapVariantFile.MapVariant);
        }
        public async Task Connect_PeerAlreadyInPoolAndIsInvalid_Test()
        {
            var peer = CreatePeerAndAddToPeerPool(NetworkTestConstants.GoodPeerEndpoint, NetworkTestConstants.FakePubkey2);

            peer.IsConnected         = false;
            peer.Info.ConnectionTime = TimestampHelper.GetUtcNow()
                                       .AddMilliseconds(-NetworkConstants.PeerConnectionTimeout - 1000);

            var added = await _connectionService.ConnectAsync(peer.RemoteEndpoint);

            added.ShouldBeTrue();

            var currentPeer = _peerPool.FindPeerByPublicKey(NetworkTestConstants.FakePubkey);

            currentPeer.ShouldNotBeNull();
        }
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            var peerPool     = context.ServiceProvider.GetRequiredService <IPeerPool>();
            var osTestHelper = context.ServiceProvider.GetRequiredService <OSTestHelper>();

            {
                var normalPeer = new Mock <IPeer>();
                normalPeer.Setup(m => m.RemoteEndpoint).Returns(new DnsEndPoint("192.168.100.200", 5000));
                var blockWithTransactions = osTestHelper.GenerateBlockWithTransactions(Hash.Empty, 10);
                normalPeer.Setup(p => p.Info).Returns(new PeerConnectionInfo
                {
                    Pubkey = "NormalPeer", ConnectionTime = TimestampHelper.GetUtcNow()
                });
                normalPeer.Setup(p => p.GetBlocksAsync(It.IsAny <Hash>(), It.IsAny <int>()))
                .Returns <Hash, int>((h, cnt) => Task.FromResult(new List <BlockWithTransactions>()));
                normalPeer.Setup(p => p.IsReady).Returns(true);
                normalPeer.Setup(p => p.GetBlockByHashAsync(It.Is <Hash>(h => h == HashHelper.ComputeFrom("bHash1"))))
                .Returns <Hash>(h => Task.FromResult(blockWithTransactions));
                normalPeer.Setup(m => m.GetNodesAsync(It.IsAny <int>()))
                .Returns(Task.FromResult(new NodeList
                {
                    Nodes =
                    {
                        new NodeInfo
                        {
                            Endpoint = "http://192.168.100.88:8000",
                            Pubkey   = ByteString.CopyFromUtf8("p2")
                        }
                    }
                }));

                peerPool.TryAddPeer(normalPeer.Object);
            }

            {
                var failedPeerPeer = new Mock <IPeer>();
                failedPeerPeer.Setup(p => p.RemoteEndpoint).Returns(new DnsEndPoint("192.168.100.400", 80));
                failedPeerPeer.Setup(p => p.Info).Returns(new PeerConnectionInfo
                {
                    Pubkey = "FailedPeer", ConnectionTime = TimestampHelper.GetUtcNow()
                });
                failedPeerPeer.Setup(p => p.IsInvalid).Returns(true);
                failedPeerPeer.Setup(p => p.GetBlockByHashAsync(It.IsAny <Hash>())).Throws(new NetworkException());
                failedPeerPeer.Setup(p => p.GetBlocksAsync(It.IsAny <Hash>(), It.IsAny <int>())).Throws(new NetworkException());
                peerPool.TryAddPeer(failedPeerPeer.Object);
            }
        }