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()); }
/// <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()); }
/// <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()); }