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.

Week end

Today was moderately productive, although the fact that I’m wrto iting this at night should tell you that it wasn’t too productive. I woke up a bit late and had to drive Younger to school. They made me take her into the nurse to turn in her negative COVID test, and I felt like a complete bum walking in, wearing a white t-shirt, gym shorts and water shoes.

Got home and did a bit of nothing for a while, meditated and then had a meeting with a firm that is doing NFT custody and lending agreements on Ethereum. The subject was Star Atlas, of course, and how we can bring lending to that game.

I need to do an update to the exchange to update the PILOT and CAPN tokens to their new iterations. Our auto-update scripts aren’t quite there yet, so I had to do a bunch of debugging to get it working right. While I was at it I made some other commits to try and hem up our build process. And also our API got hung up again, so I had to bounce Unit and spent a bunch of time looking at the various options we have with AWS to shore it up. I’ll probably need to put it behind a API Gateway, cache it and add some sort of CORS header to keep people from using it. It a lot of … work at this point that I’m not looking forward to.

I also found out that the Girl Scout camping trip was cancelled. It’s probably COVID related but chances are it would have been scrubbed because of rain this weekend anyways. The girls were disappointed but they got to go to the regular meeting tonight anyways. I’ll try to make it up to them tomorrow.

I’ve got a lunch meeting with my old boss tomorrow. I have this box of shit that’s been sitting next to my desk since I stepped down. I want to get it to him and catch up with what’s going on. I’m also stopping by a crypto-buddy’s house after that for an hour or two to talk NFTs and DAOs. It should be fun.

Not sure what I’m going to do with the rest of my evening. I’m a bit burned out on Star Atlas and dev stuff, I think I’m going to play some OGame or maybe something in my great unfinished library.

Turning down opportunities

So I’m usually very open and transparent about what is going on in my life here on the blog. I have no filter, basically. I think the only thing I don’t write about is my sex life. And don’t worry, Dear Reader, I’m not about to start now. But there are somethings going on that I feel like I can’t talk about publicly, even in this pseudo-anonymous forum.

Star Atlas released their two new ships today, and staratlas.exchange had a pretty nice haul. Yesterday we had about eight bucks in the wallet, we netted about two hundred bucks today on the two launches. It was a pretty good feeling. That equates to over $600k in orders that were posted through our front end, which is actually a pretty small percentage of orders that were sold today. Atlas Co. made at least $3m on the fighter sale, I haven’t looked a the bomber volume since I wrote this Tweet this AM.

So yea, I’m pretty stoked about it. We’ll need another launch or two this month to pay for our RPC host, but it’s pretty awesome.

I also spent the day working on an update on the exchange to increase the orderbook depth. It was only seven before, and now it’s 99 with a scroll bar that gets auto-set to the middle of the book

Also, Star Atlas updated the PILOT and CAPN badges to be crew members, so I’m in the middle of updating our markets now. This one will involve a symbol change, which means using the Redis key rename script that we used previously. This time on Elasticache. So I’ll be heading up to do that right after this.

Our chart API isn’t holding up very well. I had to restart it after the two launches today. It needs to be made part of a scaling group or something, but I’m trying to keep those costs down as much as possible. I might need to put it behind some sort of caching service or something, but I’ll have to figure that out first. More work for me.

It’s really exciting to be doing this. Every day I’m learning something new. I really learned a lot about React and the HTML DOM today working on the DEX update, and the work isn’t going to stop anytime soon from what I see right now.

Tomorrow is going to be even more exciting. I can’t even talk about it yet. Let me just say that I was messaged by a recruiter on LinkedIn. It was for a PolkaDot project, Rust dev position paying $180k.

I told him I was too busy.

Night writer

Well it has definitely been an interesting day.

First off I stayed up way to late (again). The Star Atlas faction selection kicked off last night and there were bugs with Ledger and Phantom integrations, so I tried to help out with that. After, I watched two episodes of Foundation, and went to bed late, so I got up to a slow start. I knew we had missed the bus so I wound up driving Younger into school. She had a snotty nose, but insisted on going, and I was too tired to fight with her about it, so I took her in.

Big mistake.

Missus had just left the house when I got a call from the school. Younger had a fever of 101 and had a sore throat. FML. I apologized profusely and promised I would start walking to the school to pick her up. I wound up riding my bike, holding hers next to me with one hand as I rode to the school to pick her up. I let her watch as much TV as she wanted. I tried to go back to sleep, but it was useless.

I discovered that Star Atlas had updated information on the two new ship sales, so I needed to update our exchange. With a migraine. One of my blinding migraines where I have blind spots everywhere and can barely see. My scripts weren’t working quite as I wanted them to but I only needed two markets updated, and somehow I managed to get the code deployed. I’m quite astonished myself. It was miserable. But I did it.

We had some really good engagement with this, and might actually make some money at launch if people are actually using our front end to place the orders that I’ve seen up there. We shall see.

I sat in on Metaplex office hours as well, and got some clarifications on the way token metadata works with regard to mints. Answered some difficult questions that I had.

Other than that, I spent some time going over Serum market data regarding the trade data recreation project that I’m obsessed about.

Oh yea, BTC has been making a huge run last couple of days and my Perp positions are at ATH. I could close the position, open since mid-May, and would be in the profit for 1.5x my previous annual salary. And we’re not even close to macro ATH or cycle top, in my opinion, anyways. I’m not closing until I have enough to pay off all my debt, house and school. Taxes complicates that, of course, but I’ll figure that out later.

Faction selection day

Yesterday was pretty productive, even considering the fact that I was dragging ass most of the day. I did get out our SAIAdao weekly update, and I also managed to migrate our serum-history module off of Redis to Elasticache and downgraded our EC2 instance. Spent the rest of the evening watching Metaplex videos, trying to wrap my head around the concepts of master editions and limited edition mints.

I made it to bed on time, started rereading Foundation because of the TV show and went to sleep when I got tired. We had a disaster of a night, both kids wet the beds and Elder threw in a nosebleed for good measure. I couldn’t go back to sleep so I got up and ran three miles, meditated and got Younger off to the bus stop.

I have a tight schedule today. I forgot I have to take my MIL across town today for a medical appointment. I just hope that I can get back before the 1PM town hall that I scheduled yesterday. It might be a bit tight.

Faction selection for Star Atlas starts in several hours as well, so I need to create at least two, maybe three accounts. I have my ‘main’ player account, the SAIAdao assets which I will be farming with as well, and a few resources in my IRA account. I may just sell these instead of trying to make a player account with it. We’ll see.

So there’s a lot going on, I need to spend more time writing code than blog posts, and it doesn’t look like I’m going to get much done in the way of deep work today. I better get to it.

Weekly goals

I’m off to a slow start this morning. I stayed up a bit too late last night so I’ve been dragging ass a bit this morning, a bit scatterbrained. It’s going to be a busy week, and I’m going to need to really focus so that I can execute what we’ve got planned.

Right after I finish writing this I need to get the SAIAdao weekly update out. I don’t think it’ll take quite as long as recent weeks, there’s not a lot to give updates on. The TVL calculation is probably the most complicated part, I don’t think there’s much else that I want to get into about it. One big change is that we’ll start doing office hours, maybe even twice a week. We are getting closer to a tokenomic model, but it’s still a ways off.

Obviously there’s a lot going on with Star Atlas this week with faction selection and the new trailer coming out, but obviously our main concern is going to be the two new ships that are dropping on Thursday. One of my colleagues has sent over some updates to the exchange code so that we can move toward a full automated update and deployment, so I’ll need to turn my attention to that of course. The exchange itself has yet to turn a profit, so one of my big concerns is getting the cost down for our AWS and Solana RPCs as much as possible. That will be later and will involve lots of steps. It’s not going to be fun so I’m probably procrastinating a bit.

And once I knock those things out I will turn my attention to Solana NFTs AKA Metaplex. I want to do some minting and do some experiments to get things rolling along there. I did try to get a head start on the GAN-side of things, but that mostly translated to me trying to mount a hard drive on this laptop and failing to get a Google Images download script to run properly. That will need to wait.

GAN-tastic

“Spent $6500 of my retirement money on a JPG, AMA.”

So last night was pretty interesting. I stumbled across the Singularity NFT project earlier Saturday and was captivated by the art. I set a timer to catch the launch and went about my day.

I did some sleuthing and managed to find the token mint address, and looked over the contract. There was a whitelist for the presale, and a number of functions related to triggering the public sale. So I loaded the contract up in Blocknative.com’s mempool explorer and waited. I was pretty tense, I was limited to minting three at 0.77 ETH each, which is a huge investment for me, but I was determined to pick up one of these.

My other NFT mint experiences haven’t been too good. I’m bagholding my ten CutePigClub pfps, and my Fewmans mint didn’t come out spectacularly well either. Still, I knew I wanted to get one of the Singularity jpgs. The floor on the previous project, Explosions of Color, was 15 ETH at the time, so I’m fairly confident it’ll be a good value.

Watching the mempool on the Singularity launch was pretty interesting as well. There were a number of transactions from people trying to trigger calls that were set to onlyOwner, like turning on the public sale and such. Then, around 6:30, the time the launch was announced, I started seeing mint after mint after mint. All of which failed. By this point my mempool watcher was filtering out everything but the owner’s address. I was watching everything else in Etherscan.

Then the command to start the public sale came through.

I had already connected my wallet to Etherscan and had the mint command queued up. 2.31 ETH to mint three. I pushed send and then stared in disbelief at my Metamask. Insufficient funds. It had an obscene amount of gas listed, the max. I pulled up one of the failed mint transactions to see how much gas it had used, doubled it and threw it in Metamask. (In hindsight, I should have used one of the pre-sales txs to get the amount.) But by then it was too late. I was getting a contract execution failed error in the UI. I checked the website. All of them had been minted.

Apparently, I wasn’t the only one watching the mempool. It had been botted. The Discord server was livid, so I quit it and started watching OpenSea as they started showing up. FOMO kicked in, and I bought the one I have because I was worried the floor was going to get away from me, and I needed to have one. The floor’s come down a bit to around 1.6 ETH or so, I’ve put mine up at five for a week, which seems to be the highest sale price so far. If that sells I’ll buy a couple more floor pieces, maybe something that will make a good pfp at some point.

Anyways, the whole experience really got me thinking. It’s obvious that I’m going to be doing an NFT launch on Solana at some point, I already have several collaborators. This type of abstract GAN art really fascinates me, I’m really curious how the Singularity team trained their AI, and I started doing a bit of research into it last night. I need to gather some reference images and start some testing. There are some Docker containers that I can load up on this laptop and do some testing. Then we can refine things and prepare the actual launch.

I can’t wait to get started.

Running Solana

Well we are off to a good start this weekend. I went to bed at a decent hour, got a great night’s sleep, then woke up and ran three miles, meditated, and am doing my morning pages. There’s a lot to do today, it’s the first weekend of the month, so I need to do the family business: transferring funds from cash to crypto accounts, balancing the house accounts, and making sure I deposit my share of the rent.

Yesterday wasn’t a total disaster, in spite of my efforts from Thursday night. I managed to fix an issue with one of the SAIA token accounts that prevented me from making a transfer. I had a call with our VC team, and I managed to work through the Solana Hello World program on Figment.io.

I figure I’ve spent enough time messing around with Rust tutorials and manually trying to parse transactions via the explorer, and that it’s time to really delve in. I spent the last two days digging into the Solana web3 and Serum DEX libraries, reading Rust code and, trying to figure it out from there. I’ve studied enough, the only way for me to learn more is by doing.

It only took me a few hours to get through it. The Figment system is pretty nice, it’s basically a huge web app that has modules for various chains like Solana, Polkadot, and many others. Strangely enough they haven’t added an Ethereum one, but I suppose those are easy enough to find. I’m not a total noob though, so I had many of the prerequisites in place, and most of the technical details I already knew from high level how things were supposed to work.

Figment takes the Hello World program and removes certain functions or parameter calls, forcing you to figure out which ones to use and how to parse them. I might have been trying to go through them too fast, because I cheated a bit and looked ahead at the solutions to see how things worked. Not like my work with Exercism where I would sometimes take days to figure out a solution, in order to make something that worked before peeking at the community solutions.

So I got through the track last night. Some of the things aren’t quite clear to me. Compiling and deploying a Rust program to the blockchain is straightforward enough, but this is a web3 tutorial after all. The way that program accounts are created is something I’ll need to go back over. The way program instructions are parsed is still a bit incomplete in my head, especially when it comes to figuring out which accounts, pubkeys and secrets need to be passed along where.

But I finally know what borsh is, and a bit more about how Typescript works. I’m definitely not an expert at any rate, so I’ll probably head back to the Solana developer resources later and go back through another starter tutorial later.

I’ve been reading through the spl-token Rust code to get used to the type of operations that are done there. I’ve been using the multisig CLI and I want to see if there are ways we can call functions on chain using web3. Anchor has an multisig implementation also that allows signing ‘arbitrary’ transactions, but up until today I really had no idea how I might create one of those. But after digging into the Serum Rust contracts, as well as the various web3 libraries that I’ve been working with for that, I’m starting to get a bit of an idea as to how that might work. I also took a deep dive into the Solana Explorer code, and learned more how we might retrieve and parse market data events going back in time and form cost basis calculations or fill in the gaps in our indexer history.

It might be slow going, but just like running, all I’ve just got to keep putting one foot in front of the other.

Challenged

I have been a bit out of control lately. I’ve been drinking a lot of beer. Missus and I went through two cases, thirty total in three days, and I wound up going to the store at eight-thirty last night to stock back up. I’ve been in hangover city this morning and have finally decided it’s time to get up. Missus is in bed, she called out.

My first mistake, as always, is buying beer in the first place. I haven’t worked out at all this week except for a run on Monday. I almost went for a jog yesterday afternoon since the weather was cool, but I had eaten a big lunch and was worried I wouldn’t be able to finish. I haven’t lifted in a week probably.

I don’t know why I drink. I know I get triggered if Missus drinks, but I’m not really sure why. FOMO, I guess. I don’t think I get stressed out and say man, I really need a drink, I just do it, mechanically. I know I’m poisoning myself, slowly, and the effect on my pocketbook is probably significant as well. I’ve probably spent seventy dollars this week and we’ve still got the weekend.

Maybe I am stressed out more than I tell myself. Programming is hard, and trying to work on coding projects with a beer in my hand, gulp gulp gulp. My Perpetual funding is flat this week, glug glug glug. Kids are being PITAs, you get it.

I’m not quite sure what I’m going to do today. I started working though some Solana developer tutorials, so I’ll probably work on one of those. I keep banging my head around this problem of transaction history, and I’m not even sure I’m looking at it properly.

The problem I’m looking at is ultimately about Serum market history, but I’ve chunked down to something more base, namely the state of a Solana program account at a particular point in time. The hello world contract is an example that I’m probably going to delve into. It’s basically a greeter contract. You call it, it responds with “hello”, and increments a counter variable that you can query to find the value. Ultimately, I want to be able to look back at a particular transaction in the past when the contract was called and determine what the state of the counter variable was. Ethereum explorers will show the internal state change, but I don’t think such a thing exists on Solana. I haven’t been able to find it.

But maybe I’m overthinking it. Even with this inability, I may still be able to determine the state of a particular contract by going back and replaying it’s history from genesis. I just don’t have the tools yet. I’m just scratching the surface on the Solana API, I’m nowhere near the point of being able to go back and retrieve every transaction that touched a pubkey, let alone parsing Serum’s instructions. So I’ve got to attack the problem on several fronts. It’s a huge technical problem, and I understand so little of it right now.

It’s no wonder I’m stressed.

Black hole

Yesterday was a decent day. I worked on our automation scripts that we’ll use to update our Serum indexer and front ends. I haven’t figured out quite how to fully automate it yet, but now I’m generating JSON and TypeScript files directly instead of using print statements to output them on the screen. I’ve got two more functions left to do and I’ll be happy. I’ll just need to copy the files into the respective repos and push them up to make the changes stick.

There are a bunch of hoops that I have to go through though. The JSON feed that we’re using doesn’t have all the markets that we want, so I have prelude of sorts that I’m appending the dynamically generated content to. On top of that I have to modify the dynamic content as well to correct a perplexing design decision — the same symbol for two items. I’m trying not to get caught up in too many optimizations at this point, but I will need to prepare for some changes in the base currency that’s being used. That will be a challenge since it’s so far outside of what the reference implementation will do.

Right now the current markets are all tied to USDC, but Atlas Co. is planning on creating ATLAS ones as well. We currently have the markets identified only by the NFT assets, but when the ATLAS markets go live we’ll need to distinguish between the two. I already know how to update the tickers in our Serum indexer, I just need to update the Redis key rename script that I used previously and I can gangload the changes. Updating the market itself can be done relatively easy once the feed has been updated, but the question is how to make the best user experience to distinguish between the two?

The current market list is already really crowded. We’ve got at least 78 items already in the list. Doubling everything just be too much. Splitting the market lists with some sort of top-level selector makes more sense, but I’m already dreading the program logic required to do such a thing.

I also need to update the DEX code to make sure that we can even take fees in another base currency. It’s currently coded for USDC and USDT, so I need to add some parameters for ATLAS as the base currency. It’s shouldn’t be too bad, Raydium currently has several markets for their token, so I know it’s not impossible.

I have a lot of things to add the exchange project Kaban board, that’s for sure. I’m not sure how much I’ll prioritize these things as I have a couple other Solana-related projects that I’ll be looking at. One is to really delve into the RPC API and start looking at accounts and transactions to see if I can recreate history. The other is to explore the Metaplex mono repo and figure out how Candy Machine and Fair Launch works.

I’m really getting pulled in now.