/// <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); }
private void AddBeneficiariesForReElectionScheme(long endPeriod, IEnumerable <string> victories, MinerReElectionInformation minerReElectionInformation) { var reElectionProfitAddBeneficiaries = new AddBeneficiariesInput { SchemeId = State.ReElectionRewardHash.Value, EndPeriod = endPeriod }; foreach (var victory in victories) { if (minerReElectionInformation.ContinualAppointmentTimes.ContainsKey(victory)) { var minerAddress = Address.FromPublicKey(ByteArrayHelper.HexStringToByteArray(victory)); var continualAppointmentCount = minerReElectionInformation.ContinualAppointmentTimes[victory].Add(1); minerReElectionInformation.ContinualAppointmentTimes[victory] = continualAppointmentCount; reElectionProfitAddBeneficiaries.BeneficiaryShares.Add(new BeneficiaryShare { Beneficiary = minerAddress, Shares = Math.Min(continualAppointmentCount, TreasuryContractConstants.MaximumReElectionRewardShare) }); } else { minerReElectionInformation.ContinualAppointmentTimes.Add(victory, 0); } } if (reElectionProfitAddBeneficiaries.BeneficiaryShares.Any()) { State.ProfitContract.AddBeneficiaries.Send(reElectionProfitAddBeneficiaries); } }
public override Empty AddBeneficiaries(AddBeneficiariesInput input) { foreach (var beneficiaryShare in input.BeneficiaryShares) { AddBeneficiary(new AddBeneficiaryInput { SchemeId = input.SchemeId, BeneficiaryShare = beneficiaryShare, EndPeriod = input.EndPeriod }); } 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); } }