Example #1
0
        /// <summary>
        /// Remove current total shares of Re-Election Reward,
        /// Add shares to re-elected miners based on their continual appointment count.
        /// </summary>
        /// <param name="endPeriod"></param>
        /// <param name="previousMiners"></param>
        /// <param name="previousMinerAddresses"></param>
        /// <param name="victories"></param>
        private void UpdateReElectionRewardWeights(long endPeriod, ICollection <string> previousMiners,
                                                   IEnumerable <Address> previousMinerAddresses, ICollection <string> victories)
        {
            var reElectionRewardProfitSubBeneficiaries = new RemoveBeneficiariesInput
            {
                SchemeId      = State.ReElectionRewardHash.Value,
                Beneficiaries = { previousMinerAddresses }
            };

            State.ProfitContract.RemoveBeneficiaries.Send(reElectionRewardProfitSubBeneficiaries);

            var minerReElectionInformation = State.MinerReElectionInformation.Value ??
                                             InitialMinerReElectionInformation(previousMiners);

            AddBeneficiariesForReElectionScheme(endPeriod, victories, minerReElectionInformation);

            var recordedMiners = minerReElectionInformation.Clone().ContinualAppointmentTimes.Keys;

            foreach (var miner in recordedMiners)
            {
                if (!victories.Contains(miner))
                {
                    minerReElectionInformation.ContinualAppointmentTimes.Remove(miner);
                }
            }

            State.MinerReElectionInformation.Value = minerReElectionInformation;
        }
Example #2
0
        /// <summary>
        /// Remove current total shares of Basic Reward,
        /// Add new shares for miners of next term.
        /// 1 share for each miner.
        /// </summary>
        /// <param name="endPeriod"></param>
        /// <param name="victories"></param>
        /// <param name="previousMinerAddresses"></param>
        private void UpdateBasicMinerRewardWeights(long endPeriod, IEnumerable <string> victories,
                                                   IEnumerable <Address> previousMinerAddresses)
        {
            var basicRewardProfitSubBeneficiaries = new RemoveBeneficiariesInput
            {
                SchemeId      = State.BasicRewardHash.Value,
                Beneficiaries = { previousMinerAddresses }
            };

            State.ProfitContract.RemoveBeneficiaries.Send(basicRewardProfitSubBeneficiaries);

            var basicRewardProfitAddBeneficiaries = new AddBeneficiariesInput
            {
                SchemeId          = State.BasicRewardHash.Value,
                EndPeriod         = endPeriod,
                BeneficiaryShares =
                {
                    victories.Select(k => Address.FromPublicKey(k.ToByteString().ToByteArray()))
                    .Select(a => new BeneficiaryShare {
                        Beneficiary = a, Shares = 1
                    })
                }
            };

            // Manage weights of `MinerBasicReward`
            State.ProfitContract.AddBeneficiaries.Send(basicRewardProfitAddBeneficiaries);
        }
        /// <summary>
        /// Remove current total shares of Re-Election Reward,
        /// Add shares to re-elected miners based on their continual appointment count.
        /// </summary>
        /// <param name="previousTermInformation"></param>
        /// <param name="victories"></param>
        private void UpdateReElectionRewardWeights(Round previousTermInformation, ICollection <string> victories)
        {
            var previousMinerAddresses = previousTermInformation.RealTimeMinersInformation.Keys
                                         .Select(k => Address.FromPublicKey(ByteArrayHelper.HexStringToByteArray(k))).ToList();
            var reElectionRewardProfitSubBeneficiaries = new RemoveBeneficiariesInput
            {
                SchemeId      = State.ReElectionRewardHash.Value,
                Beneficiaries = { previousMinerAddresses }
            };

            State.ProfitContract.RemoveBeneficiaries.Send(reElectionRewardProfitSubBeneficiaries);

            var minerReElectionInformation = State.MinerReElectionInformation.Value ??
                                             InitialMinerReElectionInformation(previousTermInformation
                                                                               .RealTimeMinersInformation.Keys);

            AddBeneficiariesForReElectionScheme(previousTermInformation.TermNumber.Add(1), victories,
                                                minerReElectionInformation);

            var recordedMiners = minerReElectionInformation.Clone().ContinualAppointmentTimes.Keys;

            foreach (var miner in recordedMiners)
            {
                if (!victories.Contains(miner))
                {
                    minerReElectionInformation.ContinualAppointmentTimes.Remove(miner);
                }
            }

            State.MinerReElectionInformation.Value = minerReElectionInformation;
        }
Example #4
0
        public override Empty RemoveBeneficiaries(RemoveBeneficiariesInput input)
        {
            foreach (var beneficiary in input.Beneficiaries)
            {
                RemoveBeneficiary(new RemoveBeneficiaryInput
                {
                    SchemeId = input.SchemeId, Beneficiary = beneficiary
                });
            }

            return(new Empty());
        }
        /// <summary>
        /// Remove current total shares of Votes Weight Reward,
        /// Add shares to current miners based on votes they obtained.
        /// </summary>
        /// <param name="previousTermInformation"></param>
        /// <param name="victories"></param>
        private void UpdateVotesWeightRewardWeights(Round previousTermInformation, IEnumerable <string> victories)
        {
            var previousMinerAddresses = previousTermInformation.RealTimeMinersInformation.Keys
                                         .Select(k => Address.FromPublicKey(ByteArrayHelper.HexStringToByteArray(k))).ToList();
            var votesWeightRewardProfitSubBeneficiaries = new RemoveBeneficiariesInput
            {
                SchemeId      = State.VotesWeightRewardHash.Value,
                Beneficiaries = { previousMinerAddresses }
            };

            State.ProfitContract.RemoveBeneficiaries.Send(votesWeightRewardProfitSubBeneficiaries);

            var votesWeightRewardProfitAddBeneficiaries = new AddBeneficiariesInput
            {
                SchemeId  = State.VotesWeightRewardHash.Value,
                EndPeriod = previousTermInformation.TermNumber.Add(1)
            };

            var dataCenterRankingList = State.ElectionContract.GetDataCenterRankingList.Call(new Empty());

            foreach (var victory in victories)
            {
                var obtainedVotes = 0L;
                if (dataCenterRankingList.DataCenters.ContainsKey(victory))
                {
                    obtainedVotes = dataCenterRankingList.DataCenters[victory];
                }

                var minerAddress = Address.FromPublicKey(ByteArrayHelper.HexStringToByteArray(victory));
                if (obtainedVotes > 0)
                {
                    votesWeightRewardProfitAddBeneficiaries.BeneficiaryShares.Add(new BeneficiaryShare
                    {
                        Beneficiary = minerAddress,
                        Shares      = obtainedVotes
                    });
                }
            }

            if (votesWeightRewardProfitAddBeneficiaries.BeneficiaryShares.Any())
            {
                State.ProfitContract.AddBeneficiaries.Send(votesWeightRewardProfitAddBeneficiaries);
            }
        }