Majority of my work at IOG is available as open source. I mostly work on ouroboros-network repository. I contributed both to the design as well as implementation, which is documented in a technical report.
Here are my main achievements:
I contributed to the session type framework
Using type level description of a protocol not only turned
protocol errors into type errors but also made it much easier
to share and discuss ideas: using
typed-protocolsprotocol state machines became the primary focus point. It allowed us to reason about protocol behaviour, especially about adversarial behaviour. The novelty of
typed-protocolsis using protocol pipelining in the context of session types. I am currently finishing a redesign of the library, which allows to reduce the number of threads required by pipelining, provide simpler and more functional api.
I authored Win32-network library.
One of IOG's products the Daedalus wallet is a primary Windows application, with thousands of users. This library, together with a small abstraction layer allowed us to write platform independent code (which runs primarily on Linux, Windows and MacOs). With
Win32-networkwe ware able to achieve a similar throughput to one observed on Linux and we never heard back complains from Windows users regarding networking!
I am one of the primary contributors to
IOsimulator and a drop in replacement for
IOSimis a pure monad (free monad) which supports:
Haskellsynchronous and asynchronous exceptions
stm(software transaction memory) interface
- time primitives, which are important for writing network simulations
- it has been extended by prof. John Hughes to explore different thread schedules (using approach similar to one described in Optimal Partial Order Reduction
- and more ...
IOand in simulation. Testing components in simulation using property testing proved to be a thorough and efficient way of checking correctness. We combined simulation testing together with contravariant tracing, which gave us insight how internal state evolves during the simulation and verify that it behaves as specified. We applied this approach to multiple complex components.
I wrote a network
io-simlibrary, which allowed us to test
cardano-nodediffusion layer. The simulator allows to:
- simulate communication between multiple components in a distributed system
- do error injection, and simulation of network attenuation
- simulate a TCP simultaneous open, which as observed by us, is not a rare event on Cardano mainnet
- I wrote and maintained several protocols using typed-protocols package.
I have been one of the main contributors to the
Stake-Driven Peer Selection with Robust Peer Discovery, also known as
ouroboros-network. This layer automates creation of the overlay network. It was designed specifically to be able to
- connect across NATs
- utilise full-duplex connections, to save the number of file descriptors used by the diffusion layer and punch holes in NATs
- be able to respond and adapt to changing network conditions
- be robust, in particular protect against resource exhausting attacks
I also helped to maintain CI using
github-actions, and an early version of CI using nix.