private static InvocationResult _InvokeSystemContract( InvocationContext context, UInt160 address, byte[] input, ulong gasLimit ) { var call = _contractRegisterer.DecodeContract(context, address, input); if (call is null) { return(InvocationResult.WithStatus(ExecutionStatus.ExecutionHalted)); } return(VirtualMachine.InvokeSystemContract(call, context, input, gasLimit)); }
public static InvocationResult InvokeSystemContract( SystemContractCall systemContractCall, InvocationContext context, byte[] input, ulong gasLimit ) { var status = FrameFactory.FromSystemContractCall( systemContractCall, context, input, out var rootFrame, gasLimit ); return(status == ExecutionStatus.Ok ? ExecuteFrame(rootFrame) : InvocationResult.WithStatus(status)); }
public static InvocationResult Invoke(UInt160 address, InvocationContext context, byte[] input, ulong gasLimit) { var systemContract = _contractRegisterer.GetContractByAddress(address); if (systemContract != null) { return(_InvokeSystemContract(context, address, input, gasLimit)); } var contract = context.Snapshot.Contracts.GetContractByHash(address); return(contract is null ? InvocationResult.WithStatus(ExecutionStatus.ContractNotFound) : VirtualMachine.InvokeWasmContract(contract, context, input, gasLimit)); }
public static InvocationResult InvokeWasmContract( Contract contract, InvocationContext context, byte[] input, ulong gasLimit ) { var status = FrameFactory.FromInvocation( contract.ByteCode, context, contract.ContractAddress, input, BlockchainInterface, out var rootFrame, gasLimit ); return(status == ExecutionStatus.Ok ? ExecuteFrame(rootFrame) : InvocationResult.WithStatus(status)); }