Example #1
0
        void ConsumeTransaction(DirtyData dirtyData, CommitItems commitItems, TransactionItem <MaintainTransaction> dataItem)
        {
            var transaction   = dataItem.Transaction;
            var transactionId = transaction.TransactionId;

            if (transactionId <= LastProcessedTransactionId)
            {
                return;
            }

            if (transaction.TargetChainId == ChainId)
            {
                var type = transaction.TransactionType;

                if (type == MainTainTransactionTypes.Revenue)
                {
                    var rev         = transaction as RevenueMaintainTransaction;
                    var revenueInfo = rev.RevenueInfo;
                    var tick        = rev.Tick;

                    lock (_revenueLock)
                    {
                        var revenues = GetRevenueReceivers(tick);
                        if (revenues == null)
                        {
                            revenues = new RevenueReceivers(tick, rev.PreviousTick, revenueInfo);
                            _revenueReceivers[tick] = revenues;
                            _revenueReceiversStroage.AddEntry(tick, revenues.ToByteArray());
                        }

                        if (revenueInfo.Index > revenues.RevenueInfo.Index)
                        {
                            revenues.RevenueInfo = revenueInfo;
                        }

                        foreach (var aId in rev.Accounts)
                        {
                            revenues.Accounts.Add(aId);
                        }
                    }

                    dirtyData.DirtyRevenueTicks.Add(tick);
                }

                ConsumeTransactionFeatures(0, transaction, null, commitItems);
            }
        }
Example #2
0
        RevenueReceivers GetRevenueReceivers(int tick)
        {
            lock (_revenueLock)
            {
                if (!_revenueReceivers.TryGetValue(tick, out var proposal))
                {
                    if (_revenueReceiversStroage.ContainsIndex(tick))
                    {
                        var data = _revenueReceiversStroage.GetBlockData(tick);
                        using (var unpacker = new Unpacker(data))
                        {
                            proposal = new RevenueReceivers(unpacker);
                            _revenueReceivers[tick] = proposal;
                        }
                    }
                }

                return(proposal);
            }
        }