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.