Besides my professional work, I try to contribute to open source projects, and maintain my own projects that other people can use. These projects are mainly focused on Ethereum and cryptocurrency, but I dabble in other fields as well.

Revoke.cash

When you use Ethereum-based DeFi applications, such as Uniswap, Compound or Sablier, these applications usually require an "ERC20 allowance" - which means granting the application the authority to spend certain ERC20 tokens on your behalf. This is necessary for the functioning of these platforms, but could potentially be dangerous if left unchecked.

It could be that somewhere down the line a bug is discovered in one of the smart contracts of these DeFi applications. And due to the nature of ERC20 allowances, this can cause money to be erroneously taken from the "safety" of your wallet. So while these allowances are great when you're actually using the DeFi applications, it is good practice to revoke or lower any outstanding allowances when you're not using them.

Revoke.cash gives you an overview of all outstanding ERC20 allowances so they can be revoked or lowered.

truffle-plugin-verify

Verifying smart contracts written with Truffle used to be a huge hassle. You needed to manually flatten the code, and copy-paste that into Remix for deployment. Then you would need to fill out a manual form on the Etherscan website with information about the contract. This led to a lot of manual work and it meant you could not use Truffle's deployment tools as you were forced to use Remix.

With truffle-plugin-verify, this process has been completely streamlined. After installing this plugin in your Truffle workspace, you can run truffle run verify ContractName after every deployment to automatically verify your contract on Etherscan.

The truffle-plugin-verify library gets over 10k monthly downloads and is used by popular Ethereum applications such as Kleros, Superfluid and Tornado.cash.

truffle-assertions

The truffle-assertions library is an npm package that offers several additional assertions and utilities that can be used to test Solidity smart contracts with Truffle. Most importantly this library allows users to make assertions about the events that were emitted in certain transactions. Users can include a complex filter function to further narrow down these assertions.

The truffle-assertions library gets over 20k monthly downloads and is used by popular Ethereum applications such as Kyber, Aavegotchi and Rarible.

CashScript

CashScript is a high-level smart contract language for Bitcoin Cash. The syntax of the language is inspired by Ethereum's Solidity language, and a lot of the SDK was inspired by Ethereum's developer tooling as well.

CashScript has greatly simplified smart contract development in Bitcoin Cash, and has made complex techniques like covenants accessible. The full compiler stack as well as the SDK were implemented using TypeScript for strong integration within Node.js and browser applications.

Radical Domains

Domain squatting is a chronic problem that affects ENS and DNS alike. One solution to such a problem is the Harberger tax system as outlined by Weyl and Posner in their book Radical Markets. Under such a system assets are always for sale on the market. The current owner self-assesses the value of their asset, pays a predefined rental (or tax if collected by government) in proportion to that price and must sell to any buyer who offers to meet the that price.

Radical Domains allows the migration of individual ENS names to an ownership model inspired by Harberger taxes.

Minesweeper

Years ago, I created a minesweeper clone. It has three difficulty levels on a constant size board. I hand drew all the quirky graphics, and recorded all sound effects. The game also has local high scores for each difficulty that records the time it takes you to clear the board. The source code can be found on GitHub.

Tetris

Another classic game I cloned a few years back was Tetris. I initially created the game for the GitHub Game Off 2017, for which the theme was "throwback". I stopped developing it before it was finished though, but recently I've given it some more löve to implement some outstanding features, and I published the love.js version on the web. The source code can be found on GitHub.