/// <summary> /// Instantiates a <see cref="ScOpcodeType.OP_CALLCONTRACT"/> smart contract carrier. /// </summary> public static ContractCarrier CallContract(int vmVersion, uint160 contractAddress, string methodName, ulong gasPrice, Gas gasLimit, string[] methodParameters = null) { if (string.IsNullOrWhiteSpace(methodName)) { throw new SmartContractCarrierException(nameof(methodName) + " is null or empty"); } var serializer = new MethodParameterSerializer(); string methodParams = GetMethodParams(serializer, methodParameters); var carrier = new ContractCarrier(new MethodParameterSerializer()); carrier.ContractTxData = new ContractTxData(vmVersion, gasPrice, gasLimit, contractAddress, methodName, methodParams); if (!string.IsNullOrWhiteSpace(methodParams)) { carrier.MethodParameters = serializer.ToObjects(methodParams); } return(carrier); }
/// <summary> /// Instantiates a <see cref="ScOpcodeType.OP_CREATECONTRACT"/> smart contract carrier. /// </summary> public static ContractCarrier CreateContract(int vmVersion, byte[] contractExecutionCode, ulong gasPrice, Gas gasLimit, string[] methodParameters = null) { if (contractExecutionCode == null) { throw new SmartContractCarrierException(nameof(contractExecutionCode) + " is null"); } var serializer = new MethodParameterSerializer(); string methodParams = GetMethodParams(serializer, methodParameters); var callData = new ContractTxData(vmVersion, gasPrice, gasLimit, contractExecutionCode, methodParams); var carrier = new ContractCarrier(new MethodParameterSerializer()); carrier.ContractTxData = callData; if (!string.IsNullOrWhiteSpace(methodParams)) { carrier.MethodParameters = serializer.ToObjects(methodParams); } return(carrier); }
private static void ValidateContract(string fileName, IConsole console, string[] parameters, ValidationServiceResult validationServiceResult) { byte[] compilation; IContractModuleDefinition moduleDefinition; BuildModuleDefinition(console, validationServiceResult, out compilation, out moduleDefinition); console.WriteLine($"Validating file {fileName}..."); Assembly smartContract = Assembly.Load(compilation); var serializer = new MethodParameterSerializer(); object[] methodParameters = null; if (parameters.Length != 0) { var methodParametersRaw = new MethodParameterSerializer().ToRaw(parameters); methodParameters = serializer.ToObjects(methodParametersRaw); } validationServiceResult.ConstructorExists = Contract.ConstructorExists(smartContract.ExportedTypes.FirstOrDefault(), methodParameters); if (!validationServiceResult.ConstructorExists) { console.WriteLine("Smart contract construction failed."); console.WriteLine("No constructor exists with the provided parameters."); } validationServiceResult.DeterminismValidationResult = new SctDeterminismValidator().Validate(moduleDefinition); validationServiceResult.FormatValidationResult = new SmartContractFormatValidator().Validate(moduleDefinition.ModuleDefinition); if (!validationServiceResult.DeterminismValidationResult.IsValid || !validationServiceResult.FormatValidationResult.IsValid) { console.WriteLine("Smart Contract failed validation. Run validate [FILE] for more info."); } console.WriteLine(); }
private static void ValidateContract(string fileName, IConsole console, string[] parameters, ValidationServiceResult validationServiceResult) { byte[] compilation; SmartContractDecompilation decompilation; BuildModuleDefinition(console, validationServiceResult, out compilation, out decompilation); console.WriteLine($"Validating file {fileName}..."); Assembly smartContract = Assembly.Load(compilation); var serializer = new MethodParameterSerializer(); object[] methodParameters = null; if (parameters.Length != 0) { var methodParametersRaw = new MethodParameterSerializer().ToRaw(parameters); methodParameters = serializer.ToObjects(methodParametersRaw); } validationServiceResult.LifeCycleResult = SmartContractConstructor.Construct(smartContract.ExportedTypes.FirstOrDefault(), new ValidatorSmartContractState(), methodParameters); if (!validationServiceResult.LifeCycleResult.Success) { console.WriteLine("Smart contract construction failed."); console.WriteLine("If the smart contract is constructed with parameters, please ensure they are provided."); } validationServiceResult.DeterminismValidationResult = new SmartContractDeterminismValidator().Validate(decompilation); validationServiceResult.FormatValidationResult = new SmartContractFormatValidator(ReferencedAssemblyResolver.AllowedAssemblies).Validate(decompilation); if (!validationServiceResult.DeterminismValidationResult.IsValid || !validationServiceResult.FormatValidationResult.IsValid) { console.WriteLine("Smart Contract failed validation. Run validate [FILE] for more info."); } console.WriteLine(); }