Kulpreet Singh

Github: kulpreet and pool2win
Twitter: @jungly
Blog: blog.opdup.com

The shape of Bitcoin’s adoption curve is, as of yet, unknown. What we do know is that there is a lot we still need to build.

Current Work


I have been working on Braidpool an effort resist mining centralisation by building a peer to peer mining pool that can scale to support thousands of miners.

I am using TLA+ to specify the protocols that make up braidpool. The specifications are in the docs folder on this repository.

The latest braidpool developments are on my blog.

Specifying Bitcoin Contracts

Bitcoin DSL provides high level declarative syntax for experimenting with Bitcoin contracts. You can run DSL scripts in jupyter notebooks or using good old command line. Detailed Docs with examples for LN, ARK and other contracts is also available.

Currently the DSL allows easily doing the following:

  1. Automatically start/stop a bitcoin node.
  2. Extend chain to generate coinbases or confirm transactions.
  3. Build transactions using a high level DSL
    1. script_pub_key can be specified using miniscript, descriptors or Script.
    2. script_sig can be specified using high level constructs that are extensions for descriptors and Script.
  4. Assert that a transaction will be accepted by mempool.
  5. Submit bitcoin transactions to a node.
  6. Query a bitcoin node to assert a transaction is confirmed.
  7. Query bitcoin node for transactions and blocks - these responses are available as objects for further introspection and manipulation.

Verifying Contract using TLA+

I have long wanted to use TLA+ for specifying behaviours of layer 2 bitcoin contracts. I have started work on specifying lightning contracts using justice transactions. As a consequence of this work, we finally have a TLA+ module to capture the behaviour of the bitcoin network that can be used as the environment for specifying any L2 contract. The work’s progress is tracked on the README of the repo for now.

Past works

More of my earlier work can be found on Github.

  • I started work on specifying a DSL for helping compose and test L2 contracts. This was built on Racket to enable an external DSL.
  • I used to run a small service that tracked node centrality in the Lightning Network. My older blog post on a commercial platform are on Medium.
  • I briefly engaged with the Rebooting Web of Trust community and helped build tools to develop DIDs using the BTCR spec.
  • I am a contributor to libbitcoin - the best way to figure out how bitcoin works.

Fu (remote past tense in Italian)

I studied consensus algorithms for my PhD. My post academic life has been spent working with startups building products for Web 2.0 and Mobile.