Bitcoin

My Bitcoin Dev journey – LN Lighthouse

3 Mins read

Hi Plebs, Shit coiners No coiners and my beautiful Bitcoiners!

I started my bitcoin journey in 2017. Till 2021, my contribution to the community is just transferring knowledge and orange pilling people. Being a developer, I felt that just webinars and meetups are not enough. I needed to step up my game a lot. End of 2021, I decided to support a few open-source projects.

Baby Steps

My first PR submission is a small one. bitcoin.org has listed few exchanges in their website @ https://bitcoin.org/en/exchanges#p2p. Somehow, Indian exchanges were missing from their list. Thus, my PR journey started. Unfortunately, the PR is still not merged.

Ride the Lightning – RTL

I was on the lookout for a project to contribute. I am an angular person. So I was initially taken back by the React dominance in this space. I had experience in React, but still I preferred to contribute in Angular. I was even looking at NodeJS projects even though I prefer front-end development. Saravanan Mani, my Orange pill partner and mentor, helped me in finding a project that aligned with my preference.

Ride the Lightning turned out to be the perfect match. Shahana and Suheb are the lead maintainers of the project. They were very responsive and supportive to my queries and comments in the Github issues section. I took up the task of adding Tooltips to their UI. Just a minor functionality. Still it helped me to set up the Lightning Network Daemon (LND), C-Lightning, and Eclair. 

Here is a link to my first PR for RTL. The code went live with v0.12.1-beta and they are kind enough to tag me in their release tweet… Yaaay!

My contribution to Ride the Lightning wont end there. I discussed with Shahana and have committed to do Unit testing for the whole project in the future. Unlike my previous contribution, this is not going to be a minor one. Its an important task and it will help me to understand the project in depth. More updates on that later.

LN Lighthouse

When I was taking up tasks for the RTL project, my friend Saravanan revealed that he was working on a Lightning NodeJS project. Saravanan felt that the current Lightning network visualizers have very few functionalities. They do not provide sufficient information to the users. He wanted to develop a visualizer that is informational. So I joined with him to continue the project.

We planned to categorize all the nodes and place them in separate buckets so the UI would feel less cluttered. He is well-versed in Java and prefers Backend Development. It’s his first NodeJS project. Nevertheless, he completed a good amount of work in NodeJS, integrating Neo4J in a week.

The NodeJS app will

  • Talk to the LND Lightning node via LN-Service library, and download the full graph.
  • Feed it into the Neo4J Database.
  • Listen to any network changes like node, channel addition, updation, deletion, etc., and keep our Neo4J Database in sync.

And it exposes 2 APIs:

  • Return all the nodes by total channel capacity.
  • Return the peers or channels of the selected node.

My task is to develop the visualizer that shows the entire graph on multiple levels:

  • The Top-level will show 10 clusters, segregating all nodes by their channel capacity.
  • On clicking any one of the clusters, you drill down into it.
  • It happens until you see all the nodes in a narrowed-down capacity range.
  • The node shows all its peers and channels.

With my limited knowledge in d3, I have to do all this. Big thanks to this tutorial that helped me speed up my learning.

Few weekends later, we made this:

Yes. We should improve the UI a lot. We’ll do that in the future.

Deployment:

Here is our deployment configuration:

  • Bitcoin Core and LND running in Saravanan’s home system.
  • Backend Node app and Neo4J is running in a $10 / month Digital ocean ubuntu instance, that exposes the API.
  • Front end (D3 project) is hosted in Google firebase hosting.

Go Live

And here is the Go Live tweet!

Hail Satoshi!

Leave a Reply

Your email address will not be published. Required fields are marked *