/// <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());
        }
Example #2
0
        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());
        }