コード例 #1
0
        public override Empty UpdateConsensusInformation(ConsensusInformation input)
        {
            if (Context.Sender != Context.GetContractAddressByName(SmartContractConstants.CrossChainContractSystemName))
            {
                return(new Empty());
            }

            Assert(!State.IsMainChain.Value, "Only side chain can update consensus information.");
            // For now we just extract the miner list from main chain consensus information, then update miners list.
            if (input == null || input.Value.IsEmpty)
            {
                return(new Empty());
            }
            var consensusInformation = AElfConsensusHeaderInformation.Parser.ParseFrom(input.Value);

            // check round number of shared consensus, not term number
            if (consensusInformation.Round.RoundNumber <= State.MainChainRoundNumber.Value)
            {
                return(new Empty());
            }
            Context.LogDebug(() => $"Shared miner list of round {consensusInformation.Round.RoundNumber}");
            var minersKeys = consensusInformation.Round.RealTimeMinersInformation.Keys;

            State.MainChainRoundNumber.Value      = consensusInformation.Round.RoundNumber;
            State.MainChainCurrentMinerList.Value = new MinerList
            {
                Pubkeys = { minersKeys.Select(k => k.ToByteString()) }
            };
            return(new Empty());
        }
コード例 #2
0
ファイル: MiningProcessTest.cs プロジェクト: zhxymh/AElf
        public async Task Update_ConsensusInformation_Test()
        {
            await AEDPoSContract_FirstRound_BootMiner_Test();

            //just verify method, will add other logic
            {
                var input = new ConsensusInformation
                {
                    Value = ByteString.CopyFromUtf8("test")
                };
                var transactionResult = await AEDPoSContractStub.UpdateConsensusInformation.SendAsync(input);

                transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined);
            }
        }
コード例 #3
0
ファイル: Sidechain.cs プロジェクト: xiaoxiongnpu/AElf
        public override Empty UpdateMainChainConsensus(ConsensusInformation input)
        {
            // TODO: Only cross chain contract can call UpdateMainChainConsensus method of consensus contract.

            // For now we just extract the miner list from main chain consensus information, then update miners list.
            if (input == null || input.Bytes.IsEmpty)
            {
                return(new Empty());
            }
            var consensusInformation = DPoSHeaderInformation.Parser.ParseFrom(input.Bytes);

            // check round number of shared consensus, not term number
            if (consensusInformation.Round.RoundNumber <= State.RoundNumberFromMainChainField.Value)
            {
                return(new Empty());
            }
            Context.LogDebug(() => $"Shared BP of round {consensusInformation.Round.RoundNumber.ToInt64Value()}");
            var minersKeys = consensusInformation.Round.RealTimeMinersInformation.Keys;

            State.RoundNumberFromMainChainField.Value = consensusInformation.Round.RoundNumber;
            State.CurrentMiners.Value = minersKeys.ToList().ToMiners();
            return(new Empty());
        }