public async Task Query_Dividends_Info() { await Vote(); var previousTermNumber = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetConsensusContractAddress(), nameof(ConsensusContract.GetCurrentTermNumber), new Empty())).Value; // Change term await MinerList.RunConsensusAsync(1, true); //Query dividends var queryCurrentDividendsForVoters = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetConsensusContractAddress(), nameof(ConsensusContract.QueryCurrentDividendsForVoters), new Empty() )).Value; queryCurrentDividendsForVoters.ShouldBe((long)(DPoSContractConsts.ElfTokenPerBlock * 0.2)); var queryCurrentDividends = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetConsensusContractAddress(), nameof(ConsensusContract.QueryCurrentDividends), new Empty() )).Value; queryCurrentDividends.ShouldBe(DPoSContractConsts.ElfTokenPerBlock); //Get latest request dividends term number var latestRequestDividendsTermNumber = SInt64Value.Parser.ParseFrom( (await Starter.CallContractMethodAsync(Starter.GetDividendsContractAddress(), nameof(DividendContract.GetLatestRequestDividendsTermNumber), _votingRecordList[0])) ).Value; latestRequestDividendsTermNumber.ShouldBe(_votingRecordList[0].TermNumber); // Get previous term Dividends var getTermDividends = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetDividendsContractAddress(), nameof(DividendContract.GetTermDividends), new SInt64Value() { Value = previousTermNumber })).Value; getTermDividends.ShouldBeGreaterThan(0L); // Check Dividends var termTotalWeights = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetDividendsContractAddress(), nameof(DividendContract.GetTermTotalWeights), new SInt64Value() { Value = previousTermNumber })).Value; var checkDividends = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetDividendsContractAddress(), nameof(DividendContract.CheckDividends), new CheckDividendsInput() { TicketsAmount = Amount, LockTime = _lockTimes[0], TermNumber = previousTermNumber })).Value; var dividends = _votingRecordList[0].Weight * getTermDividends / termTotalWeights; checkDividends.ShouldBe(dividends); // Check Previous Term Dividends var votingGains = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetDividendsContractAddress(), nameof(DividendContract.CheckDividends), new CheckDividendsInput() { TicketsAmount = 10000, LockTime = 180, TermNumber = previousTermNumber })).Value; var checkPreviousTermDividends = await Starter.CheckDividendsOfPreviousTerm(); checkPreviousTermDividends.Values[1].ShouldBe(votingGains); //Check the next term dividends var checkDividendsError = SInt64Value.Parser.ParseFrom(await Starter.CallContractMethodAsync( Starter.GetDividendsContractAddress(), nameof(DividendContract.CheckDividends), new CheckDividendsInput() { TicketsAmount = Amount, LockTime = _lockTimes[0], TermNumber = previousTermNumber + 1 })).Value; checkDividendsError.ShouldBe(0L); }