Beispiel #1
0
        public override IFinalElectionResults RehydrateFinalResults(IDataRehydrator rehydrator, Dictionary <int, TransactionId> transactionIndexesTree)
        {
            var version = rehydrator.RehydrateRewind <ComponentVersion <ElectionContextType> >();

            IFinalElectionResults result = null;

            if (version.Type == ElectionContextTypes.Instance.Active)
            {
                if (version == (1, 0))
                {
                    result = new NeuraliumActiveFinalElectionResults();
                }
            }

            if (version.Type == ElectionContextTypes.Instance.Passive)
            {
                if (version == (1, 0))
                {
                    result = new NeuraliumPassiveFinalElectionResults();
                }
            }

            if (result == null)
            {
                throw new ApplicationException("Invalid context type");
            }

            result.Rehydrate(rehydrator, transactionIndexesTree);

            return(result);
        }
 public override void AllocateTransactionTips(IFinalElectionResults result, Dictionary <AccountId, (IByteArray electionHash, List <TransactionId> transactionIds)> electionResults, Dictionary <TransactionId, Amount> transactionTips)
        protected override SynthesizedBlock.SynthesizedElectionResult SynthesizeElectionResult(SynthesizedBlock synthesizedBlock, IFinalElectionResults result, IBlock block, AccountCache accountCache, Dictionary <TransactionId, ITransaction> blockConfirmedTransactions)
        {
            SynthesizedBlock.SynthesizedElectionResult synthesizedElectionResult = base.SynthesizeElectionResult(synthesizedBlock, result, block, accountCache, blockConfirmedTransactions);

            if (synthesizedElectionResult is NeuraliumSynthesizedBlock.NeuraliumSynthesizedElectionResult neuraliumSynthesizedElectionResult && result is INeuraliumFinalElectionResults neuraliumFinalElectionResults)
            {
                neuraliumSynthesizedElectionResult.InfrastructureServiceFees = neuraliumFinalElectionResults.InfrastructureServiceFees ?? 0;

                foreach (AccountId delegateAccount in synthesizedElectionResult.DelegateAccounts)
                {
                    if (neuraliumFinalElectionResults.DelegateAccounts[delegateAccount] is INeuraliumDelegateResults neuraliumDelegateResults)
                    {
                        neuraliumSynthesizedElectionResult.DelegateBounties.Add(delegateAccount, neuraliumDelegateResults.BountyShare.Value);
                    }
                }

                foreach (var electedAccount in synthesizedElectionResult.ElectedAccounts)
                {
                    if (neuraliumFinalElectionResults.ElectedCandidates[electedAccount.Key] is INeuraliumElectedResults neuraliumElectedResults)
                    {
                        decimal tips = 0;

                        // let's sum up the tips we get!
                        foreach (TransactionId transationId in neuraliumElectedResults.Transactions)
                        {
                            if (blockConfirmedTransactions.ContainsKey(transationId))
                            {
                                if (blockConfirmedTransactions[transationId] is ITipTransaction tipTransaction)
                                {
                                    tips += tipTransaction.Tip;
                                }
                            }
                        }

                        neuraliumSynthesizedElectionResult.ElectedGains.Add(electedAccount.Key, (neuraliumElectedResults.BountyShare, tips));
                    }
                }
            }

            return(synthesizedElectionResult);
        }
Beispiel #4
0
        protected override void PrepareFinalElectionContext(long currentBlockId, AccountId miningAccountId, FinalElectionResultDistillate finalResultDistillateEntry, IFinalElectionResults finalElectionResult, IBlock currentBlock)
        {
            base.PrepareFinalElectionContext(currentBlockId, miningAccountId, finalResultDistillateEntry, finalElectionResult, currentBlock);

            if (finalElectionResult is INeuraliumFinalElectionResults neuraliumSimpleFinalElectionResults && finalResultDistillateEntry is NeuraliumFinalElectionResultDistillate neuraliumFinalElectionContext)
            {
                if (neuraliumSimpleFinalElectionResults.ElectedCandidates[miningAccountId] is INeuraliumElectedResults neuraliumElectedResults)
                {
                    neuraliumFinalElectionContext.BountyShare = neuraliumElectedResults.BountyShare;
                    var tippingTransactions = currentBlock.GetAllConfirmedTransactions().Where(t => neuraliumElectedResults.Transactions.Contains(t.Key)).Select(t => t.Value).OfType <ITipTransaction>().Select(t => t.Tip).ToList();

                    if (tippingTransactions.Any())
                    {
                        neuraliumFinalElectionContext.TransactionTips = tippingTransactions.Sum(t => t);
                    }
                }
            }
        }