Tooling Software Engineer (C++)
Veridise is seeking a Tooling Software Engineer to join our team and play a pivotal role in the development of cutting-edge tools for automated security analysis of blockchain smart contracts.
This role offers a unique opportunity to work at the intersection of security and blockchain innovation, collaborating closely with a dedicated team of engineers and researchers to build user-facing tooling and internal testing infrastructure.
As a Tooling Software Engineer at Veridise, you will be an integral part of a small, highly skilled team, contributing to the design and development of tooling that pushes the boundaries of blockchain security. This role involves working extensively with C++, Python, and TypeScript in a distributed work environment and requires strong problem-solving skills to address novel challenges. You will have the opportunity to work on and learn about advanced technologies such as compilers, dataflow analysis algorithms, and formal verification tools.
Responsibilities
- Depending on your skillset, use TypeScript and/or Python to develop various products that handle the output of static analysis tools, including:
- Tools that allow end-users to efficiently triage results of static analysis tools
- Software to visualize compiler data structures such as call graphs and traces
- Benchmark infrastructure to evaluate the effectiveness of static analysis
- Implement compiler transformation passes for a custom intermediate representation using C++.
- Design and implement basic dataflow analyses using C++, where the languages to be analyzed include blockchain languages such as Solidity.
- Write comprehensive tests for all code contributions, including unit tests, integration tests, and end-to-end tests.
- Collaborate effectively with a global, multi-time-zone team to deliver high- quality solutions.
- Independently tackle complex technical challenges with minimal guidance.
Required Qualifications
Weʼre looking for a generalist engineer who is comfortable working with multiple technologies in different parts of the software stack. The ideal candidate should have the following skills and experiences:
- Educational Background: Bachelor’s degree in Computer Science or a related field, or equivalent professional experience.
- Professional Experience: Minimum of 2 years working with established codebases in a professional setting.
- Technical Expertise:
- Experience with modern C++ in a professional setting.
- Proficiency in one of Python or TypeScript, especially on real-world projects.
- Independent Problem Solver: Ability to work in a remote setup and deliver results.
- Adaptability: Demonstrated ability to learn new technologies rapidly and assess their trade-offs.
- Communication Skills: Proficient in written and verbal English, with a strong focus on technical documentation and writing.
Preferred Qualifications (Nice to Have)
- Experience implementing web-based visualization tools
- Experience packaging software using technologies such as Docker or Nix.
- Experience writing compiler passes using MLIR and/or LLVM.
- Demonstrated academic or industry experience in designing and/or implementing static analysis algorithms.
- Masters or Ph.D degree in Computer Science, with a focus on compilers, static analysis, or other topics related to programming languages.