public async Task GenerateTransaction_PendingProposal_NotApproved_Test() { var sideChainId = 123; var sideChainBlockInfoCache = new List <IBlockCacheEntity>(); var previousBlockHash = Hash.FromString("PreviousBlockHash"); var previousBlockHeight = 1; var cachingCount = 5; for (int i = 1; i < cachingCount + CrossChainConstants.DefaultBlockCacheEntityCount; i++) { var sideChainBlockData = new SideChainBlockData() { ChainId = sideChainId, Height = (i + 1), TransactionStatusMerkleTreeRoot = Hash.FromString((sideChainId + 1).ToString()) }; sideChainBlockInfoCache.Add(sideChainBlockData); } _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal( new GetPendingCrossChainIndexingProposalOutput()); _crossChainTestHelper.AddFakeSideChainIdHeight(sideChainId, 1); AddFakeCacheData(new Dictionary <int, List <IBlockCacheEntity> > { { sideChainId, sideChainBlockInfoCache } }); var pendingProposal = new GetPendingCrossChainIndexingProposalOutput { Proposer = SampleAddress.AddressList[0], ProposalId = Hash.FromString("ProposalId"), ProposedCrossChainBlockData = new CrossChainBlockData(), ToBeReleased = false, ExpiredTime = TimestampHelper.GetUtcNow().AddSeconds(10) }; _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal(pendingProposal); var res = await _crossChainIndexingDataService.PrepareExtraDataForNextMiningAsync(previousBlockHash, previousBlockHeight); Assert.Empty(res); var smartContractAddress = SampleAddress.AddressList[0]; _smartContractAddressService.SetAddress(CrossChainSmartContractAddressNameProvider.Name, smartContractAddress); var transactions = await _crossChainIndexingTransactionGenerator.GenerateTransactionsAsync(SampleAddress.AddressList[0], previousBlockHeight, previousBlockHash); Assert.Empty(transactions); }
public override GetPendingCrossChainIndexingProposalOutput GetPendingCrossChainIndexingProposal(Empty input) { var res = new GetPendingCrossChainIndexingProposalOutput(); var exists = TryGetProposalWithStatus(CrossChainIndexingProposalStatus.Pending, out var pendingCrossChainIndexingProposal); Assert(exists, "Cross chain indexing with Pending status not found."); var crossChainIndexingController = GetCrossChainIndexingController(); res.Proposer = pendingCrossChainIndexingProposal.Proposer; res.ProposalId = pendingCrossChainIndexingProposal.ProposalId; var proposalInfo = Context.Call <ProposalOutput>(crossChainIndexingController.ContractAddress, nameof(AuthorizationContractContainer.AuthorizationContractReferenceState.GetProposal), pendingCrossChainIndexingProposal.ProposalId); res.ToBeReleased = proposalInfo.ToBeReleased && proposalInfo.OrganizationAddress == crossChainIndexingController.OwnerAddress; res.ExpiredTime = proposalInfo.ExpiredTime; res.ProposedCrossChainBlockData = pendingCrossChainIndexingProposal.ProposedCrossChainBlockData; return(res); }
internal void AddFakePendingCrossChainIndexingProposal(GetPendingCrossChainIndexingProposalOutput pendingCrossChainIndexingProposalOutput) { _pendingCrossChainIndexingProposalOutput = pendingCrossChainIndexingProposalOutput; }
public async Task GenerateTransaction_PendingProposal_Test() { var sideChainId = 123; var sideChainBlockInfoCache = new List <IBlockCacheEntity>(); var previousBlockHash = Hash.FromString("PreviousBlockHash"); var previousBlockHeight = 1; var cachingCount = 5; for (int i = 1; i < cachingCount + CrossChainConstants.DefaultBlockCacheEntityCount; i++) { var sideChainBlockData = new SideChainBlockData() { ChainId = sideChainId, Height = (i + 1), TransactionStatusMerkleTreeRoot = Hash.FromString((sideChainId + 1).ToString()) }; sideChainBlockInfoCache.Add(sideChainBlockData); } _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal( new GetPendingCrossChainIndexingProposalOutput()); _crossChainTestHelper.AddFakeSideChainIdHeight(sideChainId, 1); AddFakeCacheData(new Dictionary <int, List <IBlockCacheEntity> > { { sideChainId, sideChainBlockInfoCache } }); var pendingProposal = new GetPendingCrossChainIndexingProposalOutput { Proposer = SampleAddress.AddressList[0], ProposalId = Hash.FromString("ProposalId"), ProposedCrossChainBlockData = new CrossChainBlockData(), ToBeReleased = true, ExpiredTime = TimestampHelper.GetUtcNow().AddSeconds(10) }; _crossChainTestHelper.AddFakePendingCrossChainIndexingProposal(pendingProposal); var res = await _crossChainIndexingDataService.PrepareExtraDataForNextMiningAsync(previousBlockHash, previousBlockHeight); Assert.Empty(res); var smartContractAddress = SampleAddress.AddressList[0]; _smartContractAddressService.SetAddress(CrossChainSmartContractAddressNameProvider.Name, smartContractAddress); var transactions = await _crossChainIndexingTransactionGenerator.GenerateTransactionsAsync(SampleAddress.AddressList[0], previousBlockHeight, previousBlockHash); transactions.Count.ShouldBe(1); transactions[0].From.ShouldBe(SampleAddress.AddressList[0]); transactions[0].To.ShouldBe(smartContractAddress); transactions[0].RefBlockNumber.ShouldBe(previousBlockHeight); transactions[0].RefBlockPrefix.ShouldBe(ByteString.CopyFrom(previousBlockHash.Value.Take(4).ToArray())); transactions[0].MethodName .ShouldBe(nameof(CrossChainContractContainer.CrossChainContractStub.ReleaseCrossChainIndexing)); var proposalIdInParam = Hash.Parser.ParseFrom(transactions[0].Params); Assert.Equal(pendingProposal.ProposalId, proposalIdInParam); }