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); }
static bool NeoRuntimeGetTrigger(IExecutionEngine engine) { using (var ctx = engine.CurrentContext) using (var item = engine.CreateInteger((int)engine.Trigger)) ctx.EvaluationStack.Push(item); return(true); }
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); }
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); }
/// <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); }
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); }
/// <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; }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> protected IExecutionContext(IExecutionEngine engine) { Engine = engine; }
/// <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) { }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> public IMapStackItem(IExecutionEngine engine) : base(engine, EStackItemType.Map) { }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> /// <param name="type">Type</param> protected IStackItem(IExecutionEngine engine, EStackItemType type) { Type = type; Engine = engine; }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> /// <param name="value">Value</param> public IIntegerStackItem(IExecutionEngine engine, BigInteger value) : base(engine, value, EStackItemType.Integer) { }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> /// <param name="value">Value</param> public IInteropStackItem(IExecutionEngine engine, object value) : base(engine, value, EStackItemType.Interop) { }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> protected IStack(IExecutionEngine engine) { Engine = engine; }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> /// <param name="value">Value</param> public IByteArrayStackItem(IExecutionEngine engine, byte[] value) : base(engine, value, EStackItemType.ByteArray) { }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> protected IStackItemsStack(IExecutionEngine engine) : base(engine) { }
/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> /// <param name="value">Value</param> public IBooleanStackItem(IExecutionEngine engine, bool value) : base(engine, value, EStackItemType.Bool) { }