Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Investigate soltix #6376

Closed
axic opened this issue Mar 25, 2019 · 2 comments
Closed

Investigate soltix #6376

axic opened this issue Mar 25, 2019 · 2 comments
Assignees
Labels
closed due inactivity The issue/PR was automatically closed due to inactivity. stale The issue/PR was marked as stale because it has been open for too long. testing 🔨

Comments

@axic
Copy link
Member

axic commented Mar 25, 2019

See https://medium.com/chainsecurity/soltix-scalable-testing-of-solidity-compilers-57be270e802b

SOLTIX is a framework for automated testing of Solidity compilers.

It seems to have two modes:

  • random code generation
  • code mutation

Maybe we can run it as part of ossfuzz?

Apparently soltix was used to disover #5130 and #4893.

@bshastry
Copy link
Contributor

Sorry for the late update. Progress made is as follows

  • Took a look at the soltix architecture
  • Successfully built and ran soltix

Regarding running it as part of ossfuzz: soltix seems to be a test framework of its own that is written in Java. It creates test input (solidity contracts) and executes it on an EVM implementation. If I understand correctly it uses Truffle and Ganache/geth to generate solidity programs and execute the resulting byte code respectively.

So, it is not clear to me how we interface with ossfuzz. One option worth trying is to use the programs generated by soltix as seeds for our existing solidity fuzzers. However, I'm sceptical if this is what we should really be doing because these fuzzers target parsing/code generation issues (mostly flag internal compiler exceptions) and not semantic errors like #4893

OTOH, tangentially to soltix, we could create an ossfuzz based test harness to catch issues like #4893. Here's what we would need for that

Then, we do something like

string solidityProgram = convertProtoToSol(solidityProto);
string unoptimizedTrace = evmone::runAndTrace(solidityProgram);
// Potentially do two runs: one with standard opt and one with yul
string optimizedTrace = evmone::runAndTrace(compileContract(solidityProgram));
solAssert(unoptimizedTrace == optimizedTrace);
return;

What do you think?

@NunoFilipeSantos NunoFilipeSantos added the stale The issue/PR was marked as stale because it has been open for too long. label Nov 25, 2022
@github-actions
Copy link

github-actions bot commented Feb 2, 2023

Hi everyone! This issue has been closed due to inactivity.
If you think this issue is still relevant in the latest Solidity version and you have something to contribute, feel free to reopen.
However, unless the issue is a concrete proposal that can be implemented, we recommend starting a language discussion on the forum instead.

@github-actions github-actions bot added the closed due inactivity The issue/PR was automatically closed due to inactivity. label Feb 2, 2023
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Feb 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
closed due inactivity The issue/PR was automatically closed due to inactivity. stale The issue/PR was marked as stale because it has been open for too long. testing 🔨
Projects
None yet
Development

No branches or pull requests

3 participants