private async Task <int> OnExecuteAsync(CommandLineApplication app, IConsole console) { console.WriteLine(); console.WriteLine("Smart Contract Deployer"); console.WriteLine(); ContractCompilationResult result = CompilationLoader.CompileFromFileOrDirectoryName(this.InputFile, console); // Check if the file was found. if (result == null) { return(1); } ValidationServiceResult validationResult = ValidatorService.Validate(this.InputFile, result, console, this.Params); if (!validationResult.Success) { return(1); } else { console.WriteLine("Validation passed!"); } await DeployAsync(validationResult.CompilationResult.Compilation, console); console.WriteLine(); return(1); }
public int OnExecute(CommandLineApplication app, IConsole console) { console.WriteLine(); console.WriteLine("Smart Contract Builder"); console.WriteLine(); if (File.Exists(this.OutputPath)) { console.WriteLine($"Output file already exists!"); return(1); } ContractCompilationResult result = CompilationLoader.CompileFromFileOrDirectoryName(this.InputFile, console); // Check if the file was found. if (result == null) { return(1); } ValidationServiceResult validationResult = ValidatorService.Validate(this.InputFile, result, console, this.Params); if (!validationResult.Success) { return(1); } else { console.WriteLine("Validation passed!"); } this.WriteDll(validationResult.CompilationResult.Compilation); console.WriteLine($"File {this.OutputPath} written."); return(1); }
private int OnExecute(CommandLineApplication app, IConsole console) { if (!this.InputFiles.Any()) { app.ShowHelp(); return(1); } Console.WriteLine(); Console.WriteLine("Smart Contract Validator"); Console.WriteLine(); var determinismValidator = new SctDeterminismValidator(); var formatValidator = new SmartContractFormatValidator(); var warningValidator = new SmartContractWarningValidator(); var reportData = new List <ValidationReportData>(); foreach (string file in this.InputFiles) { var validationData = new ValidationReportData { FileName = file, CompilationErrors = new List <CompilationError>(), DeterminismValidationErrors = new List <ValidationResult>(), FormatValidationErrors = new List <ValidationError>(), Warnings = new List <Warning>() }; reportData.Add(validationData); ContractCompilationResult compilationResult = CompilationLoader.CompileFromFileOrDirectoryName(file, console); // Check if the file was found. if (compilationResult == null) { return(1); } validationData.CompilationSuccess = compilationResult.Success; if (!compilationResult.Success) { Console.WriteLine("Compilation failed!"); Console.WriteLine(); validationData.CompilationErrors .AddRange(compilationResult .Diagnostics .Select(d => new CompilationError { Message = d.ToString() })); continue; } validationData.CompilationBytes = compilationResult.Compilation; Console.WriteLine($"Compilation OK"); Console.WriteLine(); byte[] compilation = compilationResult.Compilation; Console.WriteLine("Building ModuleDefinition"); IContractModuleDefinition moduleDefinition = ContractDecompiler.GetModuleDefinition(compilation, new DotNetCoreAssemblyResolver()).Value; Console.WriteLine("ModuleDefinition built successfully"); Console.WriteLine(); Console.WriteLine($"Validating file {file}..."); Console.WriteLine(); SmartContractValidationResult formatValidationResult = formatValidator.Validate(moduleDefinition.ModuleDefinition); validationData.FormatValid = formatValidationResult.IsValid; validationData .FormatValidationErrors .AddRange(formatValidationResult .Errors .Select(e => new ValidationError { Message = e.Message })); SmartContractValidationResult determinismValidationResult = determinismValidator.Validate(moduleDefinition); validationData.DeterminismValid = determinismValidationResult.IsValid; validationData .DeterminismValidationErrors .AddRange(determinismValidationResult.Errors); SmartContractValidationResult warningResult = warningValidator.Validate(moduleDefinition.ModuleDefinition); validationData .Warnings .AddRange(warningResult .Errors .Select(e => new Warning { Message = e.Message })); } List <IReportSection> reportStructure = new List <IReportSection>(); reportStructure.Add(new HeaderSection()); reportStructure.Add(new CompilationSection()); reportStructure.Add(new FormatSection()); reportStructure.Add(new DeterminismSection()); reportStructure.Add(new WarningsSection()); if (this.ShowBytes) { reportStructure.Add(new ByteCodeSection()); } reportStructure.Add(new FooterSection()); var renderer = new StreamTextRenderer(Console.Out); foreach (ValidationReportData data in reportData) { renderer.Render(reportStructure, data); } return(1); }