Ejemplo n.º 1
0
        public override Empty InitialAElfConsensusContract(InitialAElfConsensusContractInput input)
        {
            if (State.Initialized.Value)
            {
                return(new Empty());
            }

            State.TimeEachTerm.Value = input.IsSideChain || input.IsTermStayOne
                ? int.MaxValue
                : input.TimeEachTerm;

            State.MinerIncreaseInterval.Value = input.MinerIncreaseInterval;

            Context.LogDebug(() => $"Time each term: {State.TimeEachTerm.Value} seconds.");

            if (input.IsTermStayOne || input.IsSideChain)
            {
                State.IsMainChain.Value = false;
                return(new Empty());
            }

            State.IsMainChain.Value = true;

            State.ElectionContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.ElectionContractSystemName);
            State.TreasuryContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.TreasuryContractSystemName);
            State.TokenContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.TokenContractSystemName);

            State.LastIrreversibleBlockHeight.Value = 0;

            return(new Empty());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The transaction with this method will generate on every node
        /// and executed with the same result.
        /// Otherwise, the block hash of the genesis block won't be equal.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public override Empty InitialAElfConsensusContract(InitialAElfConsensusContractInput input)
        {
            Assert(State.CurrentRoundNumber.Value == 0 && !State.Initialized.Value, "Already initialized.");
            State.Initialized.Value = true;

            State.PeriodSeconds.Value = input.IsTermStayOne
                ? int.MaxValue
                : input.PeriodSeconds;

            State.MinerIncreaseInterval.Value = input.MinerIncreaseInterval;

            Context.LogDebug(() => $"There are {State.PeriodSeconds.Value} seconds per period.");

            if (input.IsSideChain)
            {
                InitialProfitSchemeForSideChain(input.PeriodSeconds);
            }

            if (input.IsTermStayOne || input.IsSideChain)
            {
                State.IsMainChain.Value = false;
                return(new Empty());
            }

            State.IsMainChain.Value = true;

            State.ElectionContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.ElectionContractSystemName);
            State.TreasuryContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.TreasuryContractSystemName);
            State.TokenContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.TokenContractSystemName);

            State.MaximumMinersCount.Value = int.MaxValue;

            if (State.TreasuryContract.Value != null)
            {
                State.TreasuryContract.UpdateMiningReward.Send(new Int64Value
                {
                    Value = AEDPoSContractConstants.InitialMiningRewardPerBlock
                });
            }

            return(new Empty());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// The transaction with this method will generate on every node
        /// and executed with the same result.
        /// Otherwise, the block hash of the genesis block won't be equal.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public override Empty InitialAElfConsensusContract(InitialAElfConsensusContractInput input)
        {
            if (State.Initialized.Value)
            {
                return(new Empty());
            }

            State.PeriodSeconds.Value = input.IsTermStayOne
                ? int.MaxValue
                : input.PeriodSeconds;

            State.MinerIncreaseInterval.Value = input.MinerIncreaseInterval;

            Context.LogDebug(() => $"There are {State.PeriodSeconds.Value} seconds per period.");

            if (input.IsSideChain)
            {
                InitialProfitSchemeForSideChain(input.PeriodSeconds);
            }

            if (input.IsTermStayOne || input.IsSideChain)
            {
                State.IsMainChain.Value = false;
                return(new Empty());
            }

            State.IsMainChain.Value = true;

            State.ElectionContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.ElectionContractSystemName);
            State.TreasuryContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.TreasuryContractSystemName);
            State.TokenContract.Value =
                Context.GetContractAddressByName(SmartContractConstants.TokenContractSystemName);

            State.MaximumMinersCount.Value = int.MaxValue;

            return(new Empty());
        }