Exemplo n.º 1
0
        public void TestInsertPeek()
        {
            var stack = new RandomAccessStack <int>();

            stack.Insert(0, 3);
            stack.Insert(1, 1);
            stack.Insert(1, 2);

            Assert.ThrowsException <InvalidOperationException>(() => stack.Insert(4, 2));

            Assert.AreEqual(3, stack.Count);
            CollectionAssert.AreEqual(new int[] { 1, 2, 3 }, stack.Select(u => u).ToArray());

            Assert.AreEqual(3, stack.Peek(0));
            Assert.AreEqual(2, stack.Peek(1));
            Assert.AreEqual(1, stack.Peek(-1));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Assert result stack
        /// </summary>
        /// <param name="stack">Stack</param>
        /// <param name="result">Result</param>
        /// <param name="message">Message</param>
        private void AssertResult(RandomAccessStack <StackItem> stack, VMUTStackItem[] result, string message)
        {
            AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + "Stack is different");

            for (int x = 0, max = stack.Count; x < max; x++)
            {
                AssertAreEqual(ItemToJson(stack.Peek(x)).ToString(Formatting.None), PrepareJsonItem(result[x]).ToString(Formatting.None), message + "Stack item is different");
            }
        }
 public IEnumerable <Variable> GetVariables()
 {
     for (var i = 0; i < execStack.Count; i++)
     {
         var item     = execStack.Peek(i);
         var variable = item.GetVariable(session, i.ToString());
         variable.EvaluateName = $"${stackName}[{i}]";
         yield return(variable);
     }
 }
Exemplo n.º 4
0
        public override bool TryPeek(int index, out ExecutionContextBase item)
        {
            if (_stack.Count <= index)
            {
                item = null;
                return(false);
            }

            item = _stack.Peek(index).ConvertFromNative();

            return(true);
        }
Exemplo n.º 5
0
        public override bool TryPeek(int index, out StackItemBase item)
        {
            if (_stack.Count <= index)
            {
                item = null;
                return(false);
            }

            item = _stack.Peek(index)?.ConvertFromNative();

            return(item != null);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Assert invocation stack
        /// </summary>
        /// <param name="stack">Stack</param>
        /// <param name="result">Result</param>
        /// <param name="message">Message</param>
        private void AssertResult(RandomAccessStack <ExecutionContext> stack, VMUTExecutionContextState[] result, string message)
        {
            AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + "Stack is different");

            for (int x = 0, max = stack.Count; x < max; x++)
            {
                var context = stack.Peek(x);

                AssertAreEqual(context.ScriptHash.ToHexString().ToUpper(), result[x].ScriptHash.ToHexString().ToUpper(), message + "Script hash is different");
                AssertAreEqual(context.NextInstruction, result[x].NextInstruction, message + "Next instruction is different");
                AssertAreEqual(context.InstructionPointer, result[x].InstructionPointer, message + "Instruction pointer is different");

                AssertResult(context.EvaluationStack, result[x].EvaluationStack, message + " [EvaluationStack]");
                AssertResult(context.AltStack, result[x].AltStack, message + " [AltStack]");
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Assert invocation stack
        /// </summary>
        /// <param name="stack">Stack</param>
        /// <param name="result">Result</param>
        /// <param name="message">Message</param>
        private void AssertResult(RandomAccessStack <ExecutionContext> stack, VMUTExecutionContextState[] result, string message)
        {
            AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + "Stack is different");

            for (int x = 0, max = stack.Count; x < max; x++)
            {
                var context = stack.Peek(x);
                var opcode  = context.InstructionPointer >= context.Script.Length ? OpCode.RET : context.Script[context.InstructionPointer];

                AssertAreEqual(opcode, result[x].NextInstruction, message + "Next instruction is different");
                AssertAreEqual(context.InstructionPointer, result[x].InstructionPointer, message + "Instruction pointer is different");

                AssertResult(context.EvaluationStack, result[x].EvaluationStack, message + " [EvaluationStack]");
                AssertResult(context.AltStack, result[x].AltStack, message + " [AltStack]");
            }
        }
Exemplo n.º 8
0
        private static long GetCheckMultiSigPrice(RandomAccessStack <StackItem> stack)
        {
            if (stack.Count == 0)
            {
                return(0);
            }
            var item = stack.Peek();
            int n;

            if (item is VMArray array)
            {
                n = array.Count;
            }
            else
            {
                n = (int)item.GetBigInteger();
            }
            if (n < 1)
            {
                return(0);
            }
            return(GetPrice(Neo_Crypto_CheckSig, stack) * n);
        }
Exemplo n.º 9
0
        private static long GetDeploymentPrice(RandomAccessStack <StackItem> stack)
        {
            int size = stack.Peek(0).GetByteLength() + stack.Peek(1).GetByteLength();

            return(GasPerByte * size);
        }
Exemplo n.º 10
0
 internal long GetPrice(RandomAccessStack <StackItem> stack)
 {
     return(methods.TryGetValue(stack.Peek().GetString(), out ContractMethodMetadata method) ? method.Price : 0);
 }
Exemplo n.º 11
0
 private static long GetStoragePrice(RandomAccessStack <StackItem> stack)
 {
     return((stack.Peek(1).GetByteLength() + stack.Peek(2).GetByteLength()) * GasPerByte);
 }