Missus just left the house with Elder, so I’m ready to get to work this morning. My primary task is the SAIAdao update, so I’m not going to spend too much time writing here today since this week is going to be a bit arduous due to the loot recalculation and other stuff we have going on. I need to save my strength.

Last night I made some good progress on the DEX, although I think I already mentioned being able to remove our reliance on the serum-ts package for our token lists and mint. It was just the first step, actually, in requiring static files to generate the site. After I published yesterday’s post, I was able to add a React component that is able to fetch the NFT list directly from Star Atlas, client side. I’ve been doing it server side using a small Express call and using it to output our json and TSX file. Now that we can do it in the browser we should be able to render all of those things in real time. This way, when Atlas Co. updates their NFT list, we’ll have it on our site with a simple refresh. No more rebuilds. It will be very nice, and then I’ll have less things to worry about during these launches.

Updating our indexing API will still require … something. We should be able to do something similar, but we’ll still need to do something like a yarn build and Unit restart in order for changes to take. But enough about that for now. One thing at a time.

Day trip

This morning was a bit rough, since Saturday night turned into a party.

I went right to work on the PaulX Solana escrow tutorial, and managed to get through a good deal of it after a bit of trouble last night with a Cargo dependency error. I typed out every line of code since I wanted to make sure I internalized everything that was going into it. I got through the program build steps, and was working on the deployment scripts when I stopped earlier.

I needed to get the kids out of the house, so I found a park that we hadn’t been too before and I took the girls and the neighbors there for a couple hours. It was huge, and they had a great time. There was also a nice garden with herbs and local plants and trees that was pretty nice, and there was also a visitors center with a scenic overlook on the river that we went to. It was very beautiful.

The kids are in bed right now or are getting ready, and I’m about to head back upstairs. One of the SAIAdao devs messaged me earlier and got me talking about our plans to remove the DEX token lists from the Serum module. Right now we’re injecting it into the node module during build time, but I want to pull it out of there entirely and use an export from our local library. If that works then we plan to move to a client-side script that will pull the data live in real time from the Star Atlas website. Then we won’t even half to rebuild the site when we need to do updates. I’ll be spectacular. We’ll still have to update our indexer in order for the charts to work, but that’s another thing I’ll worry about another time.


It’s so nice to have gotten a good night’s sleep. Younger stayed in her bed again all night for the third day in a row and I am so excited what that means for Missus and our mental heath. It’s about time.

Speaking of Missus, she’s decided to grow with her nos, and has decided to step down from a couple of the various volunteer projects that she was working on. She stepped down from a professional industry legislative committee a few weeks ago — really they had no clue what they were doing anyways — and she’s also resigning as vice president of a regional labor council. Today the whole family is going across town to do a door-knocking lit drop shift and then she is officially done.

She’s telling everyone that it’s temporary, that she needs more time with the kids and now her mom’s sick and needs trips to and from doctor’s appointments, but I don’t really think she’ll go back to it. Things are going to change too fast.

Yesterday’s BTC run felt like validation for many people, myself included. It’s fun — and distracting — watching these moves up and realizing the freedom that’s attached to it. My Perp position is up more since April than I used to make in a year, not to mention the value of my spot holdings. It’s nuts.

I went to pick up Thai food last night, and the man behind the counter asked me how my week was doing. I was kind of taken aback because it’d been so long since a stranger asked me that. I told him that it was great, that it was hard to believe that I do what I do for a living, answering to no one. Then I left without tipping.

I decided this morning that I’m going to start working on the excellent Programming on Solana tutorial by PaulX. I’m going to work through the exercises and everything. Then I’m going to do the Anchor version of it that I saw floating around. Then I’m going to figure out how to make some contracts of my own. I need something that will let me distribute tokens to SAIAdao members. And I need lots of front end tools built that will let members claim those tokens. The multisig and governance modules all require knowledge of how to create instructions, and I need to be able to do that.

Girls are awake, time to go.


Oh man, I knew I was going to regret not writing a post this morning and here I am, 11PM and wanting nothing more than to go to bed. So just a quick note.

Bitcoin blew the roof off today. There are reports that an ETF is ready to go early next week and Twitter was just electric, I could barely get any work done.

I did manage to accomplish a few things. Spent some time trying to manage our serum-history indexers. I’d really like to get the front end behind some firewall or load balancer, so I’m trying to figure out how I can deploy it that doesn’t require me to manage a bunch of EC2 instances. Looks like we’ll be going to Elastic Beanstalk, but I’ve got to learn a bunch of stuff.

Dealt with a domain ownership issue the local Democratic party needed some help with. I think this is the last thing I need to do for them for the foreseeable future. Spent forty-five minutes trying to get through to a customer service rep who didn’t know how to do her job.

I asked a question at the Star Atlas town hall today and put CEO Michael Wagner’s feet to the fire about the schedule. He didn’t answer my question at all so I had to ask it like four times to get a non-answer out of him.

Perhaps the most fascinating thing that happened today was that I came across this article, Governance Mining – liquidity mining for human capital, it’s really brilliant. From there I went full steam into standing up a SourceCred instance and got it setup on Github Pages. It’s really interesting and I’m hoping to use it to distribute governance shares in the dao. SourceCred uses it to pay their team, so the grain that gets distributed is redeemable for a dollar, and they drop $100k a month to team members. It’s actually quite amazing and seems like it’s going to be a key piece of our governance moving forward. It’s got several plugins for GitHub, Discourse and Discord, and it builds an activity graph to figure out who’s got the most cred that week, and then drops tokens based on recent and and historical rankings. Here’s output that I generated today.

# Top Participants By Cred

| Description | Cred | % |
| --- | --- | --- |
| BCM---Dao-Launch-Control | 435.8 | 61.8% |
| -IA--GT---BULK--4-6couple-weeks- | 25.3 | 3.6% |
| ibeJD--SAIAdao | 17.5 | 2.5% |
| Slats | 16.5 | 2.3% |
| R3zk1n | 14.3 | 2.0% |
| Alex-Core | 13.5 | 1.9% |
| Tinman | 12.3 | 1.7% |
| yaawn | 11.6 | 1.6% |
| chriscrypto | 11.1 | 1.6% |
| Errantry | 11.1 | 1.6% |
| Rambulik | 10.6 | 1.5% |
| CLUB---Loid | 9.9 | 1.4% |
| Morpheus | 8.8 | 1.2% |
| archaeopteryx | 8.6 | 1.2% |
| Echo | 8.4 | 1.2% |
| Zanda-Wylah | 7.5 | 1.1% |
| Blockpal | 6.2 | 0.9% |
| sidequ35t | 4.9 | 0.7% |
| Kakan | 4.0 | 0.6% |
| vedd | 4.0 | 0.6% |

Tokenomics is hard

I’ve been spending more time the last two days going over spreadsheets, trying to figure out a way to take SAIAdao from Daohaus to Solana. I wrote a long proposal that detailed a rebalancing of shares and loot, giving each member an amount of both based on their current proportional weighting. It floated like a lead balloon, basically. I had decided not to try and deal with the obvious imbalance between OGs and noobs, the later of who were entering into the dao at an immediate loss, which further increased the gains of earlier entrants.

So I spent a few more hours yesterday creating additional rows which allowed me to boost participants who came in at a certain ratio. It doesn’t quite restore new members to their original valuation, but it is very generous. Each OG basically loses 25% of their nav claims. So I’ll probably give it a few days to settle out before we start taking steps to actually execute it. There’s a lot of work to be done in other areas.

We still have to figure out whether to proceed with my original proposal, to balance shares and loot between all members, which allows us to remove the claim on nav that shares currently have, and make them governance only tokens. My experience with defi leads me to believe that these new governance tokens, $SAIA, will ultimately have more “value” than the actual claim tokens, which I’ve dubbed $DUST for the time being. So far I’ve done a poor job of making the case to members which is fine. My original proposal forced OGs such as myself to give up shares in exchange for preservation of claims, but if we’re going to be giving up 25% of our claims then we should at least hold onto our shares.

The math makes my head hurt. I feel like I should be much better at spreadsheets, but they’re so cumbersome and it frustrates me that I can’t write Python code that does the work in a Pandas table or something.

So phase one of our migration to Solana will be distributing additional loot to recent members to correct the imbalance. I’m probably going to go back and look at my weekly reports during the time period to chart out NAV and see if any more tweaking is required. For example, people who came in right at the GAO drop would have seen a larger drop in their claim value as there was a pretty steep correction following week one. Anyone who came in the last few weeks should actually be closer to their entry price. That said, it will probably be better to keep the two groups roughly the same. On the other hand, part of the discrepancy between the entry price and the theoretical exit price is the value of the ‘valueless’ governance tokens, of which the earlier group has more. Ugh, I’m talking myself in circles here.

The reason we’re in this mess is that I was attempting to simulate the way defi protocols will issue governance rewards to users who stake LP. I made a couple of mistakes. First off Daohaus is a two “token” system, and both have claims on the bank. This isn’t really the case with most defi protocols. I was attempting to offer increased yield on shares for early adopters as a reward, and was a bit overaggressive. So here we are.

There have been questions raised about potential governance attacks on the NAV tokens which I’ll address at another time, right now I’ve got to figure out the best way to proceed with the additional distribution of loot. I’ll probably spend some time writing up a script that can create the proposals; I don’t want to spend an hour doing it manually, and it’ll be a healthy exercise to help me get better at web3 development.

We’ll obviously need to pause new memberships; we probably don’t need cash until the minigame and we need to figure out what the last entry price actually was and how to actually move forward. Allowing more entrants into a broken system is unfair both to them and people that are locked in at a loss, so we’ll have to just lock the doors, and get the migration to Solana completed. I don’t have any promises about that happening before the minigame, in fact it will probably be better for it to happen after, and give us a chance to farm assets and bring NAV back up to a place where all members are in a better position.

Distribution is going to be the biggest challenge. There are several ways to do it: manually, via a script, using a Merkle distribution, vesting contracts. The main issue is we have about a hundred members with varying amounts of two tokens to distribute. I thought it was clever to rebalance the share/loot balance and distribute LP tokens instead, that would have halved the work we needed to do, so right now my main challenge is figuring out how to do that.

The other problem is what we’re going to use for governance on Solana. Getting tokens in wallet addresses is going to be an important step, as there are things like Collab.land and Grape Protocol that we can use to turn Discord into a quasi-governance platform. The Solana governance module is coming along, and the Mango front end for it looks fabulous. The only problem is that it looks like it requires a Solana dev to be able to make proposals. But the fact of the matter is we can no longer wait on Squads to launch, so I’ll just have to focus on getting this done ourselves.

I had hoped to be focusing my time on other projects for the time being, the DEX has lots of things that need/can be done, we have a grant proposal with Step.Finance that I could be working on, and the question of asset lending/scholarships is going that is going to unlock lots of potential yield. But for now, I’ll keep my focus on moving this bar forward, to get the rebalancing proposal across the line and implemented, and providing the first tranche of liquidity to members.

Assuming we’re able to get a proposal agreed on by next week, I should be able to have the first tranche of tokens in member’s hands by the end of the month.


I’m doing morning pages because I want to procrastinate working out. I haven’t lifted weights in a couple weeks, or run in seven days. I’ve just been drinking too much alcohol and not waking up refreshed enough. That’s not quite true, even when I don’t drink I’m still feeling sluggish when I wake. I blame the longer nights.

Missus said she’s starting to feel the effects of Seasonal Affective Disorder. That’s bad news because we haven’t even started Daylight Savings Time. Or ended it, you know. That transition is going to suck.

This morning wasn’t too bad, other than Younger refusing to sleep by herself again. Missus went to bed early, Younger beside her. I moved her to her bed and woke up in the middle of the night and she was there. Missus got up and moved to Younger’s bed, and then she followed her mama a minute later. I had some restless dreams.

I don’t have any promises to anyone this morning, and my Discord DMs were few. So I really have no excuse not to take my time this morning and give myself a good hour of time to get fit. Just a few more minutes of writing though, then I’ll get up and change, sweep the living room floor of toys and other clutter, put on a podcast and give the old meat puppet that is my body a bit of exercise.

I’m working on StarAtlas.Exchange this morning. We still don’t have a fully automated update system, and I want to make it as simple as possible for us to stay in sync with Star Atlas’s NFT feed. There are several steps that have to happen including file generation, repo updates, and triggering a TypeScript compilation and Node restart on our indexer. This last one is going to be the tricky part, but it should be ok.

Should be a productive day, as long as I remember I have no one to answer to this morning but myself.

Busting butt

Wow, what a roller coaster day. I was dragging butt all morning and didn’t get a lot done, but sometime around midday I kicked into gear and solved a problem that had been bugging me for some time. It’s about SAIAdao of course.

I’m not going to spend too much time going over it here because I’m actually writing a proposal about it right now and don’t want to repeat myself. Let me just say that there was a heated debate about it for several hours today, and I started drafting up the problem statement and goals section before I had a solution. Once I properly defined those I started sketching things out on paper and developed a working plan rather quickly. I then threw some numbers in a spreadsheet and, to my amazement, my new proposal seems to work rather well.

Now I just need to finish explaining it in lay terms.

Last night also saw some progress in the grant proposal I mentioned last night. I managed to recruit a valuable team member. Still, there’s little I can say here on the subject at this time.

Other than that I did a few changes to the serum-indexer that I overlooked during the last change, and I’ve been working on converting some JS code that will be used to generate our market update code when Star Atlas does theirs. It’s coming along quite well, even considering my unfamiliarity with JS and async/await functions.

More work tonight, but hopefully I can get to bed earlier than I did last night.

Writing day

I did a lot of writing today.

First up on my agenda was the weekly SAIAdao update. Flat would be the word I would use to describe it. I actually didn’t write too much about the DEX because I didn’t want to give to much away this week. I got a lot more work to do, including paying the bills, so I’ll probably keep quiet on it until it’s a month old.

I had at least two discussions over voice chat about Solana NFTs. I think I’ve finally wrapped my head around the actual fungible aspects of it.

So Star Atlas “NFTs” are technically spl-token mints with zero decimals and a metadata account. What most people think of as NFTs are actually spl-token mints with zero decimals, a supply of one, and a metadata account.

I’ve been spending a lot of time thinking about it and talking about it, but I’m not spending any development time on it at all. I’m stuck in Typescript hell. This morning I figured out that I was working off the archived version of the Solana explorer, so I forked the repo and tried to run it, but I got Typescript errors. How it could have possibly been checked in in such a state is beyond me. Such craftsmanship. I kid.

I’m kind of fixated on the whole Serum market transaction history thing. I’ll have more to say about that later on, but there might be grants and collaborations involved. Let me just say that there’s more writing involved.

For now I’ll just be happy if I can get these TS libraries to compile.

Serum markets

What a day. Last night I watched Free Guy with Elder, and showed her a bit of Ready Player One before I made her go to bed. I stayed up a bit too late. This morning I got up fairly early and finished up some things I was working on last night. I had been reconfiguring the exchange’s API/indexer. It runs behind Nginx’s Unit, and I wanted to have a process running on a test branch while I made sure the new configuration things were working like they were supposed to. I finished that up this morning in time to do my Sunday 9AM Perpetual accounting.

This week was pretty flat. BTC was negative, and I only made $150 on the ETH side. I rolled that into a 10x position. I usually don’t mind not making money on the funding rate if the price is going up. BTC was up 13% on the week, ETH was down less than five dollars.

I spent most of the day working on working through my exploration of Serum markets on Solana. It’s been quite the battle, trying to figure out how to run JavaScript or TypeScript and make it work with these other programs that I’ve been using. So basically I’m trying to look at how the Solana explorer works, how it’s able to parse certain transactions, and figure out how I can do the same. I was unable to just write a JS script that could import it, as it’s not a module, so it’s been a lot of trial and error. Most of it is TypeScript, so I’ve been trying to do that, which is an entirely different beast than I’ve been used to. I had a really hard time trying to get a script to run, so I was hoping to just start with the actual explorer React code and rip out everything that I didn’t need. I mean I will need to make this an app at some point, after all, but I couldn’t get it to compile.

The TypeScript page was helpful in that it led me to Gluegun, which allows one to write Javascript CLIs. I had a bit of trouble getting Yarn’s bins to work, but I fixed my path and was able to get my script to run through the CLI. Now it’s time to start digging really deep in the explorer’s code to figure out how it determines whether a transaction is a Serum one, hopefully from there I can figure out what the hell is happening with each instruction. Hopefully it will give me enough information that I can replay the history and actually see what trades occured.

I’m probably over optimizing already, but I’m guessing that I’ll need to log the transactions somewhere to keep from blowing up my RPC calls. The market I’m looking at has just over two thousand transactions, but basically I’d want to grab them, a thousand at a time, and start from the market init call, and then walk through all the order placement stuff. I just hope I don’t have to simulate the internal state of the orderbook. It would be a pain, but I have the Rust code for the market itself if I need to. My fear is that I’ll have to keep track of the orderbook myself and figure out when they’ve been matched, but I’m still too far from even knowing how to do that.

Still, if I can make something work, I might be able to sell this thing to Step.Finance or someone like that. It would probably be a lot easier to look for transactions for a single wallet and compute the cost basis just by looking at the token accounts associated with that pubkey. It’s probably actually a much easier problem to solve. Much smaller set of transactions that one would have to look at, hopefully. Now that I know how to get all the transactions associated with an addresses, we can parse those for the Serum ones, and figure out what went in and what came out.

So I’ve got another hour before bed. Tomorrow I have an update for SAIAdao, and Missus has a work holiday.

Good dad day

Today has been a bit of a day, and I’m not sure how much of it I can relate. I actually left the house today and “went out” as I used to call it, and visited a few friends. I don’t get out enough.

First I went to see my old boss. I guess I should really call him an ex-boss, but it was just a reminder of how old I feel. We caught up while drinking a beer, and at one point a man came out from the house across the street and waved. Bossman told me about the man’s dad, who had passed away. It was basically the old cliched story about the beat cop who gets killed a couple of days before retirement. “How you doing, Bob?” “Great, I’m retiring in nine months.” Three months later: “How you doing, Bob?” “Great I just made my last mortgage payment.” Three month laher: “How you doing, Bob?” Dead, of a massive heart attack.

Sure, I talked about bitcoin to this nocoiner, told him what I was doing now. It’s hard to believe that it’s only been four months since I left there. It seems like a million years ago.

After that I had a meeting with a newer friend. This one is into crypto, so we had plenty to catch up on. And I think I had some insights about daos that I’ll probably share a bit later.

Again, it’s been so long since I was actually around people who weren’t related to me. Sure, I have numerous Discord and Twitter associates that I’ve been speaking to over the last few months, but I can honestly say that I don’t have a single person that I can call a close friend.

Except my wife. I guess I may be feeling a bit guilty about getting out of the house, even if it is the first time in so long. It had me thinking a lot about the man I used to be and the man I am now. I know my wife has been quite worried about me slipping back into old habits, but I don’t think she’s as worried about it as I am.

I had a lot to think about on my drive back. I got home and gave the girls my undivided attention for two straight hours, and managed to get through the entire evening without yelling or fighting. I think I did a pretty good job.