private async Task <BlockExecutedSet> GetExecuteBlockSetAsync(Block block, Hash blockHash) { var set = new BlockExecutedSet() { Block = block, TransactionMap = new Dictionary <Hash, Transaction>(), TransactionResultMap = new Dictionary <Hash, TransactionResult>() }; if (block.TransactionIds.Any()) { set.TransactionMap = (await _blockchainService.GetTransactionsAsync(block.TransactionIds)) .ToDictionary(p => p.GetHash(), p => p); } foreach (var transactionId in block.TransactionIds) { if ((set.TransactionResultMap[transactionId] = await _transactionResultService.GetTransactionResultAsync(transactionId, blockHash)) == null) { Logger.LogWarning( $"Fail to load transaction result. block hash : {blockHash}, tx id: {transactionId}"); return(null); } } return(set); }
private async Task CheckMiningResultAsync(BlockExecutedSet blockExecutedSet, Timestamp blockTime, int transactionCount) { var chain = await _blockchainService.GetChainAsync(); blockExecutedSet.Block.Header.PreviousBlockHash.ShouldBe(chain.BestChainHash); blockExecutedSet.Block.Header.Height.ShouldBe(chain.BestChainHeight + 1); blockExecutedSet.Block.Header.Time.ShouldBe(blockTime); blockExecutedSet.Block.VerifySignature().ShouldBeTrue(); blockExecutedSet.Block.Body.TransactionsCount.ShouldBe(1 + transactionCount); }
private BlockExecutedSet GenerateBlockExecutedSet(long blockHeight, List <LogEvent> logEvents) { var blockExecutedSet = new BlockExecutedSet(); var transactions = new List <Transaction>(); for (var i = 0; i < logEvents.Count + 1; i++) { transactions.Add(_kernelTestHelper.GenerateTransaction()); } var block = _kernelTestHelper.GenerateBlock(blockHeight - 1, HashHelper.ComputeFrom("PreviousBlockHash"), transactions); blockExecutedSet.Block = block; blockExecutedSet.TransactionResultMap = new Dictionary <Hash, TransactionResult> { { transactions[0].GetHash(), new TransactionResult { TransactionId = transactions[0].GetHash(), Bloom = ByteString.Empty } } }; var bloom = new Bloom(); var logs = new List <LogEvent>(); var txIndex = 1; foreach (var logEvent in logEvents) { bloom.Combine(new List <Bloom> { logEvent.GetBloom() }); logs.Add(logEvent); var transactionResult = new TransactionResult { TransactionId = transactions[txIndex].GetHash(), Bloom = ByteString.CopyFrom(bloom.Data), }; transactionResult.Logs.AddRange(logs); blockExecutedSet.TransactionResultMap.Add(transactions[txIndex].GetHash(), transactionResult); txIndex++; } block.Header.Bloom = ByteString.CopyFrom(bloom.Data); return(blockExecutedSet); }
private async Task CheckBlockExecutedSetAsync(BlockExecutedSet blockExecutedSet, int transactionCount) { blockExecutedSet.Block.Body.TransactionIds.Count.ShouldBe(transactionCount); blockExecutedSet.TransactionResultMap.Values.Select(t => t.Status) .ShouldAllBe(status => status == TransactionResultStatus.Mined); var blockStateSet = await _blockStateSetManger.GetBlockStateSetAsync(blockExecutedSet.GetHash()); blockStateSet.ShouldNotBeNull(); var transactionResults = await _transactionResultManager.GetTransactionResultsAsync( blockExecutedSet.TransactionIds.ToList(), blockExecutedSet.GetHash()); transactionResults.Count.ShouldBe(transactionCount); foreach (var transactionResult in transactionResults) { blockExecutedSet.TransactionResultMap[transactionResult.TransactionId].ShouldBe(transactionResult); } }
private async Task CheckMiningResultAsync(BlockExecutedSet blockExecutedSet, Timestamp blockTime, int transactionCount) { var chain = await _blockchainService.GetChainAsync(); var pubkey = await _accountService.GetPublicKeyAsync(); blockExecutedSet.Block.Header.PreviousBlockHash.ShouldBe(chain.BestChainHash); blockExecutedSet.Block.Header.Height.ShouldBe(chain.BestChainHeight + 1); blockExecutedSet.Block.Header.Time.ShouldBe(blockTime); blockExecutedSet.Block.Header.SignerPubkey.ShouldBe(ByteString.CopyFrom(pubkey)); blockExecutedSet.Block.VerifySignature().ShouldBeTrue(); blockExecutedSet.Block.Body.TransactionsCount.ShouldBe(1 + transactionCount); _systemTransactionExtraDataProvider.TryGetSystemTransactionCount(blockExecutedSet.Block.Header, out var systemTransactionCount); systemTransactionCount.ShouldBe(1); }