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