CertiK is a leading blockchain security company focused on ensuring the security and correctness of blockchain code. They are seeking a research software engineer to design and develop tools for automated verification of smart contracts, collaborating with a team of programming language experts.
Responsibilities:
- Extend the scope and depth of our automated program verification tools and brainstorm, design, and implement new tools
- Adapt and improve algorithms for symbolic software model checking. Examples include bounded model checking (BMC), counterexample-guided abstraction refinement (CEGAR), and property directed reachability (IC3/PDR)
- Build and extend translators from different input languages into intermediate representations, optimizing the generated models for automated analysis
- Identify new classes of security properties of smart contracts and formalize properties for use in our automated verification tools
- Closely collaborate with other software engineers in developing tools and set technical direction for solving problems in consultation with your team and management
- Work on all aspects of delivering working software that meets customer needs, including analysis, design, automated testing, operations, CI/CD, measuring results, incorporating customer feedback, and support
Requirements:
- Master's Degree in Computer Science or a related field or 5 years of equivalent experience
- Minimum of 4 years of software development experience (includes internships, software developed during research, and open-source development)
- Minimum of 2 years of experience with one or more of the following: model checking, formal verification, SAT/SMT solving (Z3, CVC4, Yices, MathSAT, SMTInterpol), abstract interpretation, or closely related disciplines
- Demonstrated knowledge of fundamental computer science concepts such as data structures, algorithms, mathematical logic, and automata theory
- PhD in the broader field of automated reasoning
- Publication record in conferences like POPL, CAV, TACAS, FMCAD, FM, etc
- Experience in functional programming (OCaml or Haskell)
- Strong and creative problem-solving skills; always willing to learn and embrace new technologies and to collaborate
- Prior experience in a professional software development environment