August 28th, 2022

Tornado Cash affair and JSON-RPC blockchain node providers

I was just finishing my response to Moxie when Tornadogate happened. I had to rewrite the original “I am happy to use Infura or Alchemy…” sentence to reflect what happened. I was wrong and Moxie was right. Maybe I was too pragmatic and I am afraid that I wasn’t alone. Actually, Infura outage was a warning sign that everyone dismissed as something that happens on every infrastructure.

There are layers of this problem though. Communication protocol, JSON-RPC, is the least problematic part. It is the node providers, often operated as U.S. based businesses that present a biggest danger to the whole ecosystem. It would be a mistake to take a software engineering angle on this: centralization of the service is something that can be solved. It is the governance that is most problematic. I don’t see companies like Consensys that operates Infura or Cloudflare transitioning into DAOs anytime soon.

And the companies that are in a process of transitioning into DAOs like Ankr are running into uncharted territory. Decentralized organizations were ignored by governments so far. What we are going to see is campaigns and propaganda, legal actions and spreading the fear by all means possible. This will be joined by organizational issues in DAOs themselves. It is really hard to establish a working organization design and I’ve seen a lot of regression in the area of management practices, teamwork and organization alignment in DAOs.

August 15th, 2022

At the beginning of the year, Moxie Marlinspike, founder of Signal, wrote now famous article about web3. There are many responses to the article, from more knowledgeable and famous people than I am. Initially, I decided to not contribute to the ocean of answers, mostly because I’ll write probably something very similar to Vitalik post and it will come from person with less knowledge and authority.

I am still discussing the article with some of my friends though. Some of them still believe that most of the criticism is correct. I am writing this for them, for regular developers, who have some rough idea on what the web3 is, but still disagree that this technology has any value for the real world projects. This is an opinion piece from a very pragmatic, ancient builder.

My first code in basic
My first code in basic
August 6th, 2022

Behind Zitrone app - Cloudflare KV

Today I’ll be writing about the database technology behind the application and I will reveal some really clever tricks I had to do to get around the very limited functionality of KV. I’ll start with “the why” though.

The first question I am getting from my web3 friends is “why not IPFS/Arweave/put your favorite decentralized solution here”. Don’t get me wrong, IPFS is a great idea. And there are a lot of promising projects in this space, I believe that one day we will be getting a serious contender from this space. But if you ever tried Zitrone, you may have noticed that the app is instantly ready and it shows your favorite events in a manner of milliseconds. That’s the UX I was aiming for and while there are some clever tricks in data loading pattern in the Remix itself, this is beyond any optimization that exist today, including SSR.

My twitter castle is ready for your counter-arguments
My twitter castle is ready for your counter-arguments
August 2nd, 2022

Behind Zitrone app - reduced intermezzo

This part is co-authored by Jon Higger who helped me to point out the problem and explained the Promise logic behind. Last time I promised code and more practical value. I think that I should begin with my “async reducer trouble”, because the explanation kinda blows my mind. There is a good chance that you already run into similar issues and if you already write your reducers using `Promise.all` you can skip part 2 completely.

I wrote this code:

let events_attendance = list.keys.reduce(async function (
    previousValue: { event: { name: any; metadata: Object }; attendees: any }[],
    currentValue: { name: string; metadata: Object }
) {
    const attendees = await context.EVENTS_KV.get(
    console.log("current", await currentValue);
    console.log("prev", await previousValue);
    console.log(typeof previousValue);
        event: currentValue,
        attendees: attendees?.split("'"),
    return [...previousValue];
July 29th, 2022

Tech stuff behind Zitrone app

Edit: I moved the app to:

Zitrone is a project that attempts to enhance the meetings and events experience for decentralized organizations. It solves my own frustration, but the idea had a very good reception among organizations I am part of, so there is a hope that it is a useful thing to build. There is a short (first 5 minutes) video where I am pitching it. Further on, I’ll touch product topics very briefly, goal of these articles is to share hurdles I came through and possibly share some knowledge about current technologies you can use to build web apps.