コード例 #1
0
        public override IEnumerable <Vote> GetVotes(IEnumerable <Transaction> others)
        {
            ReadOptions options = new ReadOptions();

            using (options.Snapshot = db.GetSnapshot())
            {
                int height;
                foreach (var kv in db.Find(options, SliceBuilder.Begin(DataEntryPrefix.IX_Vote), (k, v) => new { Key = k, Value = v }))
                {
                    UInt256  hash    = new UInt256(kv.Key.ToArray().Skip(1).ToArray());
                    ushort[] indexes = kv.Value.ToArray().GetUInt16Array().Except(others.SelectMany(p => p.GetAllInputs()).Where(p => p.PrevHash == hash).Select(p => p.PrevIndex)).ToArray();
                    if (indexes.Length == 0)
                    {
                        continue;
                    }
                    VotingTransaction tx = (VotingTransaction)GetTransaction(options, hash, out height);
                    yield return(new Vote
                    {
                        Enrollments = tx.Enrollments,
                        Count = indexes.Sum(p => tx.Outputs[p].Value)
                    });
                }
            }
            foreach (VotingTransaction tx in others.OfType <VotingTransaction>())
            {
                yield return(new Vote
                {
                    Enrollments = tx.Enrollments,
                    Count = tx.Outputs.Where(p => p.AssetId == AntShare.Hash).Sum(p => p.Value)
                });
            }
        }
コード例 #2
0
        private bool VoteEnrollments()
        {
            if (altStack.Count < 1)
            {
                return(false);
            }
            VotingTransaction tx = altStack.Pop().GetInterface <VotingTransaction>();

            if (tx == null)
            {
                return(false);
            }
            stack.Push(new StackItem(tx.Enrollments));
            return(true);
        }
コード例 #3
0
        private bool VoteEnrollments(ScriptEngine engine)
        {
            if (engine.AltStack.Count < 1)
            {
                return(false);
            }
            VotingTransaction tx = engine.AltStack.Pop().GetInterface <VotingTransaction>();

            if (tx == null)
            {
                return(false);
            }
            engine.Stack.Push(new StackItem(tx.Enrollments));
            return(true);
        }