Beispiel #1
0
 /// <summary>
 /// Emits the opcodes for invoking an interoperable service.
 /// </summary>
 /// <param name="builder">The <see cref="ScriptBuilder"/> to be used.</param>
 /// <param name="method">The hash of the interoperable service.</param>
 /// <param name="args">The arguments for calling the interoperable service.</param>
 /// <returns>The same instance as <paramref name="builder"/>.</returns>
 public static ScriptBuilder EmitSysCall(this ScriptBuilder builder, uint method, params object[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
     {
         EmitPush(builder, args[i]);
     }
     return(builder.EmitSysCall(method));
 }
Beispiel #2
0
 public static ScriptBuilder EmitSysCall(this ScriptBuilder sb, string api, params object[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
     {
         EmitPush(sb, args[i]);
     }
     return(sb.EmitSysCall(api));
 }
Beispiel #3
0
 public static ScriptBuilder EmitAppCall(this ScriptBuilder sb, UInt160 scriptHash, string operation)
 {
     sb.EmitPush(0);
     sb.Emit(OpCode.NEWARRAY);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(InteropService.System_Contract_Call);
     return(sb);
 }
Beispiel #4
0
 /// <summary>
 /// Emits the opcodes for calling a contract dynamically.
 /// </summary>
 /// <param name="builder">The <see cref="ScriptBuilder"/> to be used.</param>
 /// <param name="scriptHash">The hash of the contract to be called.</param>
 /// <param name="method">The method to be called in the contract.</param>
 /// <param name="flags">The <see cref="CallFlags"/> for calling the contract.</param>
 /// <param name="args">The arguments for calling the contract.</param>
 /// <returns>The same instance as <paramref name="builder"/>.</returns>
 public static ScriptBuilder EmitDynamicCall(this ScriptBuilder builder, UInt160 scriptHash, string method, CallFlags flags, params object[] args)
 {
     builder.CreateArray(args);
     builder.EmitPush(flags);
     builder.EmitPush(method);
     builder.EmitPush(scriptHash);
     builder.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(builder);
 }
Beispiel #5
0
 public static ScriptBuilder EmitDynamicCall(this ScriptBuilder sb, UInt160 scriptHash, string operation)
 {
     sb.Emit(OpCode.NEWARRAY0);
     sb.EmitPush(CallFlags.All);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #6
0
 public static ScriptBuilder EmitAppCall(this ScriptBuilder sb, UInt160 scriptHash, string operation)
 {
     sb.EmitPush(0);
     sb.Emit(OpCode.NEWARRAY);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall("System.Contract.Call");
     return(sb);
 }
Beispiel #7
0
 public static ScriptBuilder EmitDynamicCall(this ScriptBuilder sb, UInt160 scriptHash, string operation, CallFlags flags, params object[] args)
 {
     sb.CreateArray(args);
     sb.EmitPush(flags);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #8
0
 public static ScriptBuilder EmitAppCall(this ScriptBuilder sb, UInt160 scriptHash, ContractParameterType returnType, string operation)
 {
     sb.EmitPush(0);
     sb.Emit(OpCode.NEWARRAY);
     sb.EmitPush(operation);
     sb.EmitPush(returnType);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #9
0
 public static ScriptBuilder EmitDynamicCall(this ScriptBuilder sb, UInt160 scriptHash, string operation, bool hasReturnValue)
 {
     sb.EmitPush(0);
     sb.EmitPush(hasReturnValue ? 1 : 0);
     sb.EmitPush(CallFlags.All);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #10
0
 public static ScriptBuilder EmitAppCall(this ScriptBuilder sb, UInt160 scriptHash, string operation, params object[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
         sb.EmitPush(args[i]);
     sb.EmitPush(args.Length);
     sb.Emit(OpCode.PACK);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(InteropService.System_Contract_Call);
     return sb;
 }
Beispiel #11
0
 public static ScriptBuilder EmitAppCall(this ScriptBuilder sb, UInt160 scriptHash, string operation, params ContractParameter[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
     {
         sb.EmitPush(args[i]);
     }
     sb.EmitPush(args.Length);
     sb.Emit(OpCode.PACK);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(InteropService.Contract.Call);
     return(sb);
 }
Beispiel #12
0
 public static ScriptBuilder EmitDynamicCall(this ScriptBuilder sb, UInt160 scriptHash, string operation, params object[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
     {
         sb.EmitPush(args[i]);
     }
     sb.EmitPush(args.Length);
     sb.Emit(OpCode.PACK);
     sb.EmitPush(CallFlags.All);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #13
0
 public static ScriptBuilder EmitAppCall(this ScriptBuilder sb, UInt160 scriptHash, ContractParameterType returnType, string operation, params ContractParameter[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
     {
         sb.EmitPush(args[i]);
     }
     sb.EmitPush(args.Length);
     sb.Emit(OpCode.PACK);
     sb.EmitPush(operation);
     sb.EmitPush(returnType);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #14
0
 public static ScriptBuilder EmitDynamicCall(this ScriptBuilder sb, UInt160 scriptHash, string operation, bool hasReturnValue, params ContractParameter[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
     {
         sb.EmitPush(args[i]);
     }
     sb.EmitPush(args.Length);
     sb.EmitPush(hasReturnValue ? 1 : 0);
     sb.EmitPush(CallFlags.All);
     sb.EmitPush(operation);
     sb.EmitPush(scriptHash);
     sb.EmitSysCall(ApplicationEngine.System_Contract_Call);
     return(sb);
 }
Beispiel #15
0
 public static ScriptBuilder EmitSysCall(this ScriptBuilder sb, uint method, params object[] args)
 {
     for (int i = args.Length - 1; i >= 0; i--)
         EmitPush(sb, args[i]);
     return sb.EmitSysCall(method);
 }