public BatchExeResult Execute(string filename, out string expected, out string current) { BatchExeResult result = BatchExeResult.SolcError; string filePath = Path.Combine(testDirectory, filename); // compile the program SolidityCompiler compiler = new SolidityCompiler(); CompilerOutput compilerOutput = compiler.Compile(solcPath, filePath); if (compilerOutput.ContainsError()) { compilerOutput.PrintErrorsToConsole(); throw new SystemException("Compilation Error"); } // build the Solidity AST from solc output AST solidityAST = new AST(compilerOutput, Path.GetDirectoryName(filePath)); // translate Solidity to Boogie try { BoogieTranslator translator = new BoogieTranslator(); var translatorFlags = new TranslatorFlags(); translatorFlags.GenerateInlineAttributes = false; BoogieAST boogieAST = translator.Translate(solidityAST, new HashSet <Tuple <string, string> >(), translatorFlags); // dump the Boogie program to a file using (var outWriter = new StreamWriter(outFile)) { outWriter.WriteLine(boogieAST.GetRoot()); } } catch (Exception e) { Console.WriteLine($"VeriSol translation error: {e.Message}"); result = BatchExeResult.SolToBoogieError; expected = current = null; return(result); } // read the corral configuration from Json string configJsonPath = Path.Combine(configDirectory, Path.GetFileNameWithoutExtension(filename) + ".json"); string jsonString = File.ReadAllText(configJsonPath); CorralConfiguration corralConfig = JsonConvert.DeserializeObject <CorralConfiguration>(jsonString); string corralOutput = RunCorral(corralConfig); expected = corralConfig.ExpectedResult; current = corralOutput; result = CompareCorralOutput(corralConfig.ExpectedResult, corralOutput); return(result); }
/** * Runs solidity conversion function */ private bool runSolidityToBoogieConversion() { Console.WriteLine("Starting Solidity Compiler."); // compile the program Console.WriteLine($"Running Compiler on {contractName}."); SolidityCompiler compiler = new SolidityCompiler(); CompilerOutput compilerOutput = compiler.Compile(solidityCompilerPath, solidityFilePath); if (compilerOutput.ContainsError()) { compilerOutput.PrintErrorsToConsole(); throw new SystemException("Compilation Error"); } // build the Solidity AST from solc output AST solidityAST = new AST(compilerOutput, Path.GetDirectoryName(solidityFilePath)); // translate Solidity to Boogie try { // if application reaches this stage, compilation of the program was successful // The application now attemps to convert the solidity code to Boogie through the use of collection and syntax trees. ConversionToBoogie_Main translator = new ConversionToBoogie_Main(); Console.WriteLine($"\nAttempting Conversion to Boogie."); BoogieAST boogieAST = translator.Translate(solidityAST, ignoreMethods, translatorFlags); // dump the Boogie program to a file var outFilePath = Path.Combine(solidityFileDir, boogieRepresentationOfSolContract); using (var outWriter = new StreamWriter(boogieRepresentationOfSolContract)) { outWriter.WriteLine(boogieAST.GetRoot());//get all AST components } } catch (Exception e) { Console.WriteLine($"OverSight translation error: {e.Message}"); return(false); } return(true); }
private bool ExecuteSolToBoogie() { // compile the program Console.WriteLine($"\n----- Running Solc on {SpecFilePath}...."); SolidityCompiler compiler = new SolidityCompiler(); CompilerOutput compilerOutput = compiler.Compile(SolcPath, SpecFilePath); if (compilerOutput.ContainsError()) { compilerOutput.PrintErrorsToConsole(); throw new SystemException("Compilation Error"); } // build the Solidity AST from solc output AST solidityAST = new AST(compilerOutput, Path.GetDirectoryName(SpecFilePath)); // translate Solidity to Boogie try { BoogieTranslator translator = new BoogieTranslator(); Console.WriteLine($"\n----- Running SolToBoogie...."); var translatorFlags = new TranslatorFlags(); translatorFlags.GenerateInlineAttributes = true; BoogieAST boogieAST = translator.Translate(solidityAST, ignoreMethods, translatorFlags); // dump the Boogie program to a file var outFilePath = Path.Combine(SpecFileDir, outFileName); using (var outWriter = new StreamWriter(outFileName)) { outWriter.WriteLine(boogieAST.GetRoot()); } } catch (Exception e) { Console.WriteLine($"VeriSol translation error: {e.Message}"); return(false); } return(true); }