Example #1
0
        bool NeoRuntimeLog(IExecutionEngine engine)
        {
            using (var ctx = engine.CurrentContext)
            {
                if (ctx == null)
                {
                    return(false);
                }

                if (!ctx.EvaluationStack.TryPop(out IStackItem it))
                {
                    return(false);
                }

                using (it)
                {
                    if (OnLog == null)
                    {
                        return(true);
                    }

                    // Get string

                    string message = it.ToString();
                    OnLog.Invoke(this, new LogEventArgs(engine.MessageProvider, ctx?.ScriptHash, message ?? ""));
                }
            }

            return(true);
        }
Example #2
0
        static bool NeoRuntimeGetTrigger(IExecutionEngine engine)
        {
            using (var ctx = engine.CurrentContext)
                using (var item = engine.CreateInteger((int)engine.Trigger))
                    ctx.EvaluationStack.Push(item);

            return(true);
        }
Example #3
0
        static bool GetScriptContainer(IExecutionEngine engine)
        {
            if (engine.MessageProvider == null)
            {
                return(false);
            }

            using (var current = engine.CurrentContext)
                using (var item = engine.CreateInterop(engine.MessageProvider))
                    current.EvaluationStack.Push(item);

            return(true);
        }
Example #4
0
        static bool GetExecutingScriptHash(IExecutionEngine engine)
        {
            using (var ctx = engine.CurrentContext)
            {
                if (ctx == null)
                {
                    return(false);
                }

                using (var item = engine.CreateByteArray(ctx.ScriptHash))
                    ctx.EvaluationStack.Push(item);
            }

            return(true);
        }
Example #5
0
        /// <summary>
        /// Invoke
        /// </summary>
        /// <param name="method">Method name</param>
        /// <param name="engine">Execution engine</param>
        /// <returns>Return false if something wrong</returns>
        public bool Invoke(string method, IExecutionEngine engine)
        {
            if (!Entries.TryGetValue(method, out delHandler func))
            {
                OnSysCall?.Invoke(this, new SysCallArgs(engine, method, SysCallArgs.EResult.NotFound));

                return(false);
            }

            var ret = func(engine);

            OnSysCall?.Invoke(this, new SysCallArgs(engine, method, ret ? SysCallArgs.EResult.True : SysCallArgs.EResult.False));

            return(ret);
        }
Example #6
0
        bool NeoRuntimeNotify(IExecutionEngine engine)
        {
            using (var ctx = engine.CurrentContext)
            {
                if (ctx == null)
                {
                    return(false);
                }

                if (!ctx.EvaluationStack.TryPop(out IStackItem it))
                {
                    return(false);
                }

                using (it)
                {
                    OnNotify?.Invoke(this, new NotifyEventArgs(engine.MessageProvider, ctx?.ScriptHash, it));
                }
            }

            return(true);
        }
Example #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="method">Method</param>
 /// <param name="result">Result</param>
 public SysCallArgs(IExecutionEngine engine, string method, EResult result)
 {
     Engine = engine;
     Method = method;
     Result = result;
 }
Example #8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 protected IExecutionContext(IExecutionEngine engine)
 {
     Engine = engine;
 }
Example #9
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="isStruct">Is struct</param>
 public IArrayStackItem(IExecutionEngine engine, bool isStruct) : base(engine, isStruct ? EStackItemType.Struct : EStackItemType.Array)
 {
 }
Example #10
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 public IMapStackItem(IExecutionEngine engine) : base(engine, EStackItemType.Map)
 {
 }
Example #11
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="type">Type</param>
 protected IStackItem(IExecutionEngine engine, EStackItemType type)
 {
     Type   = type;
     Engine = engine;
 }
Example #12
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="value">Value</param>
 public IIntegerStackItem(IExecutionEngine engine, BigInteger value) : base(engine, value, EStackItemType.Integer)
 {
 }
Example #13
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="value">Value</param>
 public IInteropStackItem(IExecutionEngine engine, object value) : base(engine, value, EStackItemType.Interop)
 {
 }
Example #14
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 protected IStack(IExecutionEngine engine)
 {
     Engine = engine;
 }
Example #15
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="value">Value</param>
 public IByteArrayStackItem(IExecutionEngine engine, byte[] value) : base(engine, value, EStackItemType.ByteArray)
 {
 }
Example #16
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 protected IStackItemsStack(IExecutionEngine engine) : base(engine)
 {
 }
Example #17
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">Engine</param>
 /// <param name="value">Value</param>
 public IBooleanStackItem(IExecutionEngine engine, bool value) : base(engine, value, EStackItemType.Bool)
 {
 }