/// <summary> /// Initialize the ElectionContract and corresponding contract states. /// </summary> /// <param name="input">InitialElectionContractInput</param> /// <returns></returns> public override Empty InitialElectionContract(InitialElectionContractInput input) { Assert(!State.Initialized.Value, "Already initialized."); State.Candidates.Value = new PubkeyList(); State.BlackList.Value = new PubkeyList(); State.MinimumLockTime.Value = input.MinimumLockTime; State.MaximumLockTime.Value = input.MaximumLockTime; State.TimeEachTerm.Value = input.TimeEachTerm; State.MinerIncreaseInterval.Value = input.MinerIncreaseInterval; State.MinersCount.Value = input.MinerList.Count; State.InitialMiners.Value = new PubkeyList { Value = { input.MinerList.Select(k => k.ToByteString()) } }; foreach (var publicKey in input.MinerList) { State.CandidateInformationMap[publicKey] = new CandidateInformation { Pubkey = publicKey }; } State.CurrentTermNumber.Value = 1; State.DataCentersRankingList.Value = new DataCenterRankingList(); State.Initialized.Value = true; return(new Empty()); }
public override Empty InitialElectionContract(InitialElectionContractInput input) { Assert(!State.Initialized.Value, "Already initialized."); State.VoteContractSystemName.Value = input.VoteContractSystemName; State.TokenContractSystemName.Value = input.TokenContractSystemName; State.Initialized.Value = true; State.TokenContract.Create.Send(new CreateInput { Symbol = ElectionContractConsts.VoteSymbol, TokenName = "Vote token", Issuer = Context.Self, Decimals = 2, IsBurnable = true, TotalSupply = ElectionContractConsts.VotesTotalSupply, LockWhiteList = { Context.Self } }); State.TokenContract.Issue.Send(new IssueInput { Symbol = Context.Variables.NativeSymbol, Amount = ElectionContractConsts.VotesTotalSupply, To = Context.Self, Memo = "Power!" }); State.VoteContract.Register.Send(new VotingRegisterInput { Topic = ElectionContractConsts.Topic, Delegated = true, AcceptedCurrency = Context.Variables.NativeSymbol, ActiveDays = int.MaxValue, TotalEpoch = int.MaxValue }); return(new Empty()); }