public async Task Receive_Dividends_By_TransactionId() { const int lockTime = 100; const long pocketMoney = 10000L; var candidate = (await Starter.GenerateCandidatesAsync(1))[0]; var voterList = await Starter.GenerateVotersAsync(2, pocketMoney); // Check balance { var voteBalance = await Starter.GetBalanceAsync(Starter.GetAddress(voterList[0].KeyPair)); voteBalance.ShouldBe(pocketMoney); } var txResult = await voterList[0].Vote(candidate.PublicKey, Amount, lockTime); txResult.Status.ShouldBe(TransactionResultStatus.Mined); var ticketsCount = SInt64Value.Parser.ParseFrom(await voterList[0].CallContractMethodAsync( Starter.GetConsensusContractAddress(), nameof(ConsensusContract.GetTicketsCount), new Empty())).Value; var txId = Hash.Parser.ParseFrom(txResult.ReturnValue); // Check balance { var voteBalance = await Starter.GetBalanceAsync(Starter.GetAddress(voterList[0].KeyPair)); voteBalance.ShouldBe(pocketMoney - ticketsCount); } //Change term await Miners.ChangeTermAsync(MiningInterval); await Miners.ChangeTermAsync(MiningInterval); await Starter.SetBlockchainAgeAsync(10); //Receive by other voter var receiveErrorResult = await voterList[1] .ExecuteConsensusContractMethodWithMiningAsync( nameof(ConsensusContract.ReceiveDividendsByTransactionId), txId); receiveErrorResult.Status.ShouldBe(TransactionResultStatus.Failed); receiveErrorResult.Error.Contains(ContractErrorCode.Message[ContractErrorCode.NoPermission]).ShouldBeTrue(); //Check dividends var votingRecord = await voterList[0].GetVotingRecord(txResult.TransactionId); var getAvailableDividends = SInt64Value.Parser.ParseFrom( await Starter.CallContractMethodAsync(Starter.GetDividendsContractAddress(), nameof(DividendContract.GetAvailableDividends), votingRecord)).Value; { var voteBalance = await Starter.GetBalanceAsync(Starter.GetAddress(voterList[0].KeyPair)); voteBalance.ShouldBe(pocketMoney - ticketsCount); //Receive var receiveResult = await voterList[0] .ExecuteConsensusContractMethodWithMiningAsync( nameof(ConsensusContract.ReceiveDividendsByTransactionId), txId); receiveResult.Status.ShouldBe(TransactionResultStatus.Mined); //Validation var voteBalanceAfterReceive = await Starter.GetBalanceAsync(Starter.GetAddress(voterList[0].KeyPair)); var receiveDividends = voteBalanceAfterReceive - voteBalance; getAvailableDividends.ShouldBe(receiveDividends); } }