Esempio n. 1
0
        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);
        }