Esempio n. 1
0
        public static bool GetCurrentContext(ExecutionEngine engine)
        {
            var context = new Neo.VM.Types.Integer(0);

            engine.EvaluationStack.Push(context);
            //returns StorageContext
            return(true);
        }
Esempio n. 2
0
 public static JToken ToJson(this StackItem item)
 {
     return item switch
     {
         Neo.VM.Types.Boolean _ => item.GetBoolean(),
         Neo.VM.Types.Buffer buffer => buffer.GetSpan().ToHexString(),
         Neo.VM.Types.ByteString byteString => byteString.GetSpan().ToHexString(),
         Neo.VM.Types.Integer @int => @int.GetInteger().ToString(),
         // Neo.VM.Types.InteropInterface _ => MakeVariable("InteropInterface"),
         Neo.VM.Types.Map map => MapToJson(map),
         Neo.VM.Types.Null _ => new JValue((object?)null),
         // Neo.VM.Types.Pointer _ => MakeVariable("Pointer"),
         Neo.VM.Types.Array array => new JArray(array.Select(i => i.ToJson())),
         _ => throw new NotSupportedException(),
     };
Esempio n. 3
0
        public IEnumerable <Variable> Enumerate(IVariableManager manager)
        {
            foreach (var key in map.Keys)
            {
                var keyString = key switch
                {
                    Neo.VM.Types.Boolean @bool => @bool.GetBoolean().ToString(),
                         Neo.VM.Types.ByteString byteString => byteString.GetSpan().ToHexString(),
                         Neo.VM.Types.Integer @int => @int.GetInteger().ToString(),
                         _ => throw new NotImplementedException($"Unknown primitive type {key.GetType()}"),
                };

                yield return(map[key].ToVariable(manager, keyString));
            }
        }
Esempio n. 4
0
 static JToken StackItemToJson(StackItem item, string?typeHint)
 {
     return(typeHint switch
     {
         "Boolean" => item.GetBoolean().ToString(),
         "Integer" => item.GetBigInteger().ToString(),
         "String" => item.GetString(),
         _ => item switch
         {
             Neo.VM.Types.Boolean _ => item.GetBoolean().ToString(),
             Neo.VM.Types.ByteArray _ => $"{item.GetBigInteger().ToHexString()} ({item.GetString()})",
             Neo.VM.Types.Integer _ => item.GetBigInteger().ToString(),
             Neo.VM.Types.Array array => new JArray(array.Select(i => StackItemToJson(i, null))),
             _ => throw new NotSupportedException(item.GetType().Name),
         }
     });
Esempio n. 5
0
        public static JToken ToJson(this StackItem item, string typeHint = "")
        {
            var stringRep = item.ToStringRep(typeHint);

            return(stringRep != null
                ? (JToken)stringRep
                : item switch
            {
                Neo.VM.Types.Boolean _ => item.GetBoolean(),
                // Neo.VM.Types.Buffer buffer => "Buffer",
                Neo.VM.Types.ByteString byteString => byteString.GetSpan().ToHexString(),
                Neo.VM.Types.Integer @int => @int.GetInteger().ToString(),
                // Neo.VM.Types.InteropInterface _ => MakeVariable("InteropInterface"),
                // Neo.VM.Types.Map _ => MakeVariable("Map"),
                Neo.VM.Types.Null _ => new JValue((object?)null),
                // Neo.VM.Types.Pointer _ => MakeVariable("Pointer"),
                Neo.VM.Types.Array array => new JArray(array.Select(i => i.ToJson())),
                _ => throw new NotSupportedException(),
            });
Esempio n. 6
0
 public IntegerStackItem(byte[] value) : base(new BigInteger(value))
 {
     _item = new Neo.VM.Types.Integer(new BigInteger(value));
 }
Esempio n. 7
0
 public IntegerStackItem(BigInteger value) : base(value)
 {
     _item = new Neo.VM.Types.Integer(value);
 }
Esempio n. 8
0
 public IntegerStackItem(long value) : base(value)
 {
     _item = new Neo.VM.Types.Integer(new BigInteger(value));
 }
Esempio n. 9
0
 public IntegerStackItem(Neo.VM.Types.Integer item) : base(item.GetBigInteger())
 {
     _item = item;
 }
Esempio n. 10
0
        private static void DumpStackItem(StackItem stackItem)
        {
            var typeStackItem = stackItem.GetType();

            switch (typeStackItem.ToString())
            {
            case "Neo.VM.Types.Integer":
            {
                Neo.VM.Types.Integer value    = (Neo.VM.Types.Integer)stackItem;
                BigInteger           bigvalue = value.GetBigInteger();
                Console.WriteLine("Neo.VM.Types.Integer:\t{0}", bigvalue.ToString());
                break;
            }

            case "Neo.VM.Types.Array":
            {
                Neo.VM.Types.Array items = (Neo.VM.Types.Array)stackItem;
                int offset = 0;
                Console.WriteLine("Array.Count:\t{0}", items.Count);
                foreach (var item in items)
                {
                    Console.WriteLine("Neo.VM.Types.Array:\t{0}\t{1}", offset, item.ToString());
                    var typeItem = item.GetType();
                    switch (typeItem.ToString())
                    {
                    case "Neo.VM.Types.Boolean":
                    {
                        int offset2            = 0;
                        Neo.VM.Types.Boolean b = (Neo.VM.Types.Boolean)item;
                        Console.WriteLine("    Neo.VM.Types.Boolean:\t{0}\t{1}", offset2, b.GetBoolean());
                        break;
                    }

                    case "Neo.VM.Types.Integer":
                    {
                        int offset2            = 0;
                        Neo.VM.Types.Integer i = (Neo.VM.Types.Integer)item;
                        Console.WriteLine("    Neo.VM.Types.Integer:\t{0}\t{1}\t{2}", offset2, i.GetBigInteger(), i.GetBigInteger().ToString("X"));
                        break;
                    }

                    case "Neo.VM.Types.Array":
                    {
                        var items2  = ((Neo.VM.Types.Array)item);
                        int offset2 = 0;
                        foreach (var item2 in items2)
                        {
                            Console.WriteLine("    Neo.VM.Types.Array:\t{0}\t{1}\t{2}", offset2, item2.GetBigInteger(), item2.GetBigInteger());
                            offset2++;
                        }
                        break;
                    }

                    case "Neo.VM.Types.ByteArray":
                    {
                        byte[] items2  = ((Neo.VM.Types.ByteArray)item).GetByteArray();
                        int    offset2 = 0;
                        foreach (var item2 in items2)
                        {
                            Console.WriteLine("    Neo.VM.Types.ByteArray:\t{0}\t{1}\t{2}\t{3}", offset2, item2.ToString(), item2.ToString("X"), Convert.ToChar(item2).ToString());
                            offset2++;
                        }
                        break;
                    }

                    default:
                    {
                        throw new NotImplementedException(typeItem.ToString() + " unknown");
                    }
                    }
                    offset++;
                }
                break;
            }

            case "Neo.VM.Types.ByteArray":
            {
                byte[] items  = ((Neo.VM.Types.ByteArray)stackItem).GetByteArray();
                int    offset = 0;
                foreach (var item in items)
                {
                    Console.WriteLine("Neo.VM.Types.ByteArray:\t{0}\t{1}\t{2}\t{3}", offset, item.ToString(), item.ToString("X"), Convert.ToChar(item).ToString());
                    offset++;
                }
                break;
            }

            default:
            {
                throw new NotImplementedException(typeStackItem.ToString() + " unknown");
            }
            }
        }