Self-directed crypto without taxable events

gold-colored Bitcoin

[Update Sep 26, 2021: As of last week, Alto has discontinued their Checkbook+ service for new accounts. Checkbook-control IRAs are still available, but you will need to do your own research on how to set one up.]

Checkbook control crypto retirement accounts, part 2

Well it took me over a month, but I was finally able to buy some bitcoin through my self-directed IRA. Last night, I was finally able to deposit some fiat into my SDIRA’s new FTX.us account, and purchased a few hundred dollars of BTC, wBTC and ETH. The process has been slow and somewhat infuriating, but there is nothing like having the ability to purchase cryptocurrencies within the context of a tax-advantaged account. That’s right, there are no taxable events on activities made with these funds, and once I am able to withdraw to an on-chain wallet, I’ll be able to yield farm to my heart’s content without worrying about capital gains.

Continue reading “Self-directed crypto without taxable events”

Testing SetProtocol on Kovan

We’ve been talking about building a TokenSet for weeks now, it seems. We believe that having the ability to manage a Set has many advantages, and we’re hoping to build one under the Homebrew.Finance banner. My primary use case for it is being able to manage “customer funds” (e.g. friends and family) in a non-custodial way, while pooling gas costs among the entire capital pool. It’s also a way that others can follow along with my strategy as well, what TokenSets calls “social trading”.

Deploying a Set is costly, over 3.2m gas from what we’ve seen . With gas at 100 gwei and ETH close to $2000, we’re talking about $500-800 just to mint a set. That’s not something that I want to do without understanding the intricacies of managing a set, both from creating it, managing the modules and assets, and issuing/redeeming the tokens. And since there aren’t any published charts with gas costs for various operations, let’s do some testing on the Kovan testnet and see what we can come up with, shall we?

Preparation

The TokenSet docs have a list of procotol contracts, both for Mainnet and Kovan. Our first task is to execute the create function on the SetTokenCreator contract. We can do this using Etherscan, but first we need some setup tasks. First, you’ll need some Kovan tokens via this faucet, and we’ll need a list of ERC20 tokens that we can use. I started off with the Weenus ERC20 faucet tokens, but Balancer has Kovan faucets for popular tokens like WETH, DAI, USDC, WBTC and others.

Now I originally did this test deployment using the Etherscan write interaction, but I’ve since discovered the wonderful seth , a “Metamask for the command line. It’s much easier to use than writing a web3 script or using the Etherscan webpage. After a couple minutes setting it up I was able to interact with Kovan using my dev Ethereum address. The hardest part was exporting and saving the private key from Metamask to a JSON keystore file using the MEW CX Chrome plugin. I also put the password in a text file, then configured the .sethrc file to unlock the account and use it via my Infura project URL. Needless to say, I don’t use this account for anything of value, and don’t recommend you do this with production keys.

Creating the set

I literally spent hours trying to figure out how to call this transaction to create the set. Most of my time was spent trying to get things working on Etherscan, but I wasn’t quite sure how to call the contract arguments. First, let’s take a look at the function call parameters. Per the documentation:

function create(
    address[] memory _components,
    int256[] memory _units,
    address[] memory _modules,
    address _manager,
    string memory _name,
    string memory _symbol
)
    external
    returns (address)

Most of this is pretty easy to understand: _components is an array of the tokens in the set, _modules are the components of the Set Protocol that the set needs to operate. _manager, _name and _symbol don’t need any explanation. But what about _units? The docs define it as “the notional amount of each component in the starting allocation”, but the word notional doesn’t really have a definition that makes sense to me in a programming context.

So let’s take a look at the SetProtocol UI to see how this works.

To start with, let’s create a set with one-hundred percent allocation of USDC. Let’s set the Set price to one dollar. I’m calling it the “One Dollar Set”, and the token to 1USD. We can grab the hex data from the Metamask confirmation prompt, and throw it in this Ethereum input data decoder. For this contract, you can get the ABI from the Etherscan page, but for unverified ones you may need to compile it yourself.

Here’s how we can do that programmatically using seth:

$ export CREATE_SIGNATURE="create(address[],int256[],address[],address,string,string)"
$ export ONE_USD="0xa949dc3e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000d82cac867d8d08e880cd30c379e79d9e48876b8b00000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f7a7d0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d8ef3cace8b4907117a45b0b125c68560532f94d00000000000000000000000090f765f63e7dc5ae97d6c576bf693fb6af41c12900000000000000000000000008f866c74205617b6f3903ef481798eced10cdec000000000000000000000000000000000000000000000000000000000000000e4f6e6520446f6c6c61722053657400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043155534400000000000000000000000000000000000000000000000000000000"

0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48  // USDC token address
1014397  // 'nominal' amount
0xd8EF3cACe8b4907117a45B0b125c68560532F94D,0x90F765F63E7DC5aE97d6c576BF693FB6AF41C129,0x08f866c74205617B6F3903EF481798EcED10cDEC // tokenset modules
0xd82Cac867d8D08E880Cd30C379e79d9e48876b8b // my dev address
One Dollar Set // name
1USD //symbol

So let’s take a look at this nominal amount. The documentation doesn’t really explain it, but I did some experimenting to see what the values come out to.

AllocationStarting PriceHexDecimal
100% USDC$1f4b2e1,000,286
$1098efce10,022,862
$1005f5e100100,000,000
$10003b9aca001,000,000,000
50/50 USDC/USDT$17a120500,000
$104c4b405,000,000

The single asset one and ten dollar prices seem to be anomalies, I’m guessing due to precision errors or something. Let’s look at a more realistic mix of a Set with an allocation between wBTC, wETH, USDC and DPI token:

Starting PriceTokenHexDecimal
$10wBTC14c65318
wETH524a299c0f0f11,447,655,666,413,809
USDC2634472503751
DPI1658cfe35c0f546,290,099,383,570,260
$100wBTCcfb853,176
wETH336757534418dd14,468,848,569,030,877
USDC17dd05125,022,545
DPIdf5708b80c3c0c62,864,614,765,640,716

So what we’ve determined here is that the decimal numbers correspond to the fractional portion of the various tokens in USD. For example, the value 5318 for BTC corresponds to 0.00005318 BTC, with BTC at $48k, corresponds to approximately $2.50 worth of BTC.

It seems that the TokenSet UI uses their an oracle system to determine these weights, based on the allocation and opening price given. One could compute these manually, or copy the values from the TokenSet UI as I did here. Just remember that the nominal value of each token you have in your set will determine the USD price. For practical reasons regarding issuance, you might want to consider starting with a single component, such as USDC, wETH or wBTC.

Deploying our set

The TokenSet UI creates new Sets with the following modules: basic issuance, trade module, and streaming fee. The basic issuance requires issuers to have the correct ratio of the Set’s inputs, and also requires approval for each spend. It is very expensive to do this. For this reason we want to use the NAV module, which allows users to deposit tokens using a single asset. However, the NAV module only supports issuance with assets that are supported using SetProtocol’s on-chain oracles, and these are limited. (More on this in our next post.)

Using Etherscan

One of the big problems I had trying to pass these parameters in via Etherscan was how to encode them the values. Eventually, with some help from a Set team member, I figured out that arrays of addresses, such as those for the component assets and modules, need to be enclosed in quotes, without the “0x” prefix intact. The int256 array for the component amounts need to be in hex form, with the 0x prefix intact. Here’s how it looks on Etherscan:

You can see the result of this transaction on Etherscan. The total gas used was 3,308,683. That’s about 0.13ETH at 40 gwei, but I doubt I’ll be able to get a tx through at that price given recent prices. Earlier testing on the UI actually showed a price around three thousand dollars last night when gas was closer to 400 gwei. I believe that Set creation is not a time sensitive process like trading on Uniswap, so we can try to sneak by with a lower cost gas fee if we want to.

Using SETH

export ETH_FROM=$(seth accounts | head -n1 | awk '{ print $1 }')
export ZERO=0x0000000000000000000000000000000000000000000000000000000000000000

export WEENUS=0xaFF4481D10270F50f203E0763e2597776068CBc5
export YEENUS=0xc6fDe3FD2Cc2b173aEC24cc3f267cb3Cd78a26B7
export XEENUS=0x022E292b44B5a146F2e8ee36Ff44D3dd863C915c
export ZEENUS=0x1f9061B953bBa0E36BF50F21876132DcF276fC6e

export SET_TOKEN_CREATOR=0xB24F7367ee8efcB5EAbe4491B42fA222EC68d411
export NAV_ISSUANCE_MODULE=0x5dB52450a8C0eb5e0B777D4e08d7A93dA5a9c848
export STREAMING_FEE_MODULE=0xE038E59DEEC8657d105B6a3Fb5040b3a6189Dd51
export TRADE_MODULE=0xC93c8CDE0eDf4963ea1eea156099B285A945210a

export CREATE_SIGNATURE="create(address[],int256[],address[],address,string,string)"
export COMPONENTS=[$WEENUS,$XEENUS,$YEENUS,$ZEENUS]
export UNITS=["0x1","0x1","0x1","0x1"]
export MODULES=[$NAV_ISSUANCE_MODULE,$STREAMING_FEE_MODULE,$TRADE_MODULE]
export NAME='"TEST"'
export SYMBOL='"TEST24"'

seth send $SET_TOKEN_CREATOR $CREATE_SIGNATURE $COMPONENTS $UNITS $MODULES $ETH_FROM $NAME $SYMBOL --gas=4000000

seth-send: Published transaction with 772 bytes of calldata.
seth-send: 0xc12a5402ff37e114d8951fef756ab6985e6387b0e5d74e8c6ee5b83913077a86
seth-send: Waiting for transaction receipt...........
seth-send: Transaction included in block 23634932.

Here, we are using export to create bash variables to make our code more readable. We set our own address $ETH_FROM, as well as the zero address for use later, then create vars for the components in our Set, WEENUS et al, the Set creator contract, as well as the modules that we’ll have in our set. We provide the signature for the create function, then bundle our parameters together before sending the transaction with four million gas.

Note that we could use the seth estimate function to get a fairly accurate measure of the actual gas needed:

seth estimate $SET_TOKEN_CREATOR $CREATE_SIGNATURE $COMPONENTS $UNITS $MODULES $ETH_FROM $NAME $SYMBOL --gas=4000000 
3308707

This is exactly how much gas was used by our actual Set creation transaction.

Using web3

Jacob Abiola was gracious enough to create this SetTokenCreator-boilerplate repo for me, showing how to create a Set using a Javascript file and web3 via Infura and Metamask.

Where’s my Set?

If you look at the internal transactions for the set creation call that we just minted, you’ll see the create call is made on a brand new contract. The one below, starting with 0x902d1ce… is our new $TEST24 token on Kovan.

On our next post, we’ll take a look at some of the challenges around issuing tokens. The basic and NAV issuance modules are very misunderstood, and we’ve had many requests from people asking how we’re dealing with it with the $MUG token.

Evening pages

Things have been so interesting lately, and the days are starting to fly by. I hate opening a post with a confession that I haven’t been writing every day, but here we are.

Obviously the big news today is the massive BTC dump from $58k to the mid-forties. It’s the biggest down day that I’ve ever had, probably well over six figures. It’s amazing how calm I’ve been. Maybe it’s denial, but I’d be very surprised, based on what I know, to think that this was the top, instead of the first of several 20-40% corrections that we’re going to see on our way to $100k and beyond.

Sunday we had friends over, a small party with five adults and seven kids. We ate pork shoulder, drank scotch and played Exploding Kittens while the kids ate pizza and played outside. Apparently I tied one on as I wrote this long Tweetstorm at 1:30AM. Yesterday was hangover city.

I make Elder take her classes in the dining room adjacent my office. So I hear everything going on in her class. I’m really not OK with it. Her teacher is OK, I guess, but she rubs me the wrong way, and I’m not happy with the situation. We put all this effort into picking a good school zone when we bought our house, only to wind up putting her in “fundemental” or “gifted” schools further out. And the it all gets blown out by COVID.

So when I saw this Once Bitten pod about GalileoXP, an online self-directed school, I was immediately fascinated, and since doing more research I’ve become immensely interested in getting Elder enrolled in it. I don’t want to pull her out in the middle of the school year, but it’s really hard to listen to the teacher castigate her for reading a book, or crafting because she’s not paying attention to whatever state-mandated lesson is on the docket for the day. Maybe bitcoin is warping my brain.

As far as my retirement plans go, days like today definitely put a damper on them. I’ve been moving forward with the SDIRA — slowly — but have yet to purchase any crypto yet. I thought I was going to be able to gangload an ACH transfer on FTX.us, but it seems to have been cancelled. At least my brokerage account finally wired my first couple thousand through today, finally, after another hour on the phone with them yesterday. Slow but steady.

Homebrew.Finance $MUG NFT Index Launch

Last night, after 8PM EST, I commenced trading of the Homebrew.Finance NFT Platform TokenSet. The nine trades cost 0.59 ETH, which, when combined with the deployment transactions, brings the total cost of deploying the Set to 0.94 ETH. This doesn’t include the cost of issuing tokens via wETH, which required conversion, approval and issuance.

Before trading, I updated a spreadsheet with the updated market capitalization from the CoinGecko NFT category page, and began trading. After we made our first trade, into Enjin, we discovered that the second token on our list, Dapper Labs $FLOW token, is not actually an ERC20 token. I had two choices at this point. I could recalculate the index with the next token on the list, but I was afraid this would require me to adjust the amount of Enjin in the set. Given the amount of gas I would need to do this, I decided to continue purchasing the rest of the tokens with the weighting I had already specified, and leave FLOW’s portion in wETH instead.

I don’t necessarily think it’s a bad thing to leave 20% of funds in wETH for the next month, but I also don’t want to make any decisions without stakeholder feedback. Later today I hope to provide a Snapshot.Page for $MUG holders and put up suggestions for people to vote on.

We deployed approximately thirty thousand dollars worth of wETH in the Set. Performance can be tracked on the Zerion page. It’s in USD, but I’m really going to be looking at performance against ETH. Zapper can do the conversion, but it’s missing two of the underlying components and doesn’t have a chart, so I’ll have to figure out the best way to do this. Developer help on this would be great.

At the end of this thirty day period, (actually four weeks ending March 20th), I will liquidate all positions back to wETH, thus allowing additional issuance/redemption of MUG Set tokens. That is, unless I can determine a better alternative. Set Protocol’s basic issuance module allows redemption of Set tokens into the underlying asset, at an estimated gas cost of eight hundred thousand, or about $260 at 160 gwei. Selling out to wETH brings this down to a single token transfer for participants, but will likely cost me another $1400 to perform the trades. And who knows what the price of gas or ETH will be in a month.

I hope that we’ll be able to gather additional public interest in the set during that time, and that we’ll see additional inflows of capital that will justify the cost. Set fees of two percent on the current funds will only come to about $33 during this time, so unless we can get something like two or three hundred thousand dollars in the set for month two, I don’t see that we’ll redeploy. I’ve actually done the math, we’d need in excess of $1.6 million in funds for the streaming fee to pay for these monthly liquidation/redeploy cycles. That’s $33.6 thousand in gas fees, basically.

Ideally, I’d like to use Set’s NAV module, which can compute the Set token value using on-chain oracles and allow issuance using a variety of tokens. The problem here is that the selection of oracles is limited, and having non-supported tokens in a Set prevents this NAV issuance from working. I’m trying to work with the Set team on a technical solution to this problem, but it will likely take months to accomplish.

The other solution is to issue a sufficient amount of MUG tokens to justify creating a liquidy pool on Uniswap. I don’t have an exact number in mind, I’m thinking perhaps $100k worth of ETH or USDC might be sufficient. This is more than I’m willing to stake from my personal funds, so this would have to originate from an outside source. Then there’s also the problem of impermanent or divergence loss. Let’s assume that we start a pool with $100,000 of MUG and USDC, split 50/50. If the price of MUG doubles, LP holders will wind up losing out on about 8.5% of those gains versus if they had simply held on to MUG directly. Pool fees may offset this risk, but therein lies the risk. (An impermanent loss calculator can be found here.)

Other incentives may can be provided to offset this risk, the usual ones being governance rewards. In regards to that, we have not started development of the Homebrew.Finance $BREW token yet, but I am planning on providing rewards for $MUG holders that stay in through these early days. I will work these details out in another post.

Lastly, there are a number of things that can be done to make participation easier. We’ll need to set up some sort of front end, right now the webpage points to the Gitbook, so need to add that to the roadmap. Again, I can do this work myself, but I would appreciate developer help.

That’s all for now, I’m going to hunker down and get to work building. Thank you all for participating!

Fifty-two thousand

Today was a exciting, I felt full of energy. We got the Homebrew.Finance NFT TokenSet launched yesterday, and spent a good deal of time trying to get the word out about that. So far it doesn’t appear that there’s been any interest in it from anyone other than myself, but we’ve got another day before we start deploying funds to it.

The markets were up again today, especially my cryptoequities. The mining plays were up about 20-40%, so just over nine percent overall. I’m going to be more aggressive about scaling out of Grayscale, since they mirror the BTC price, and the rest of my holdings are outperforming. It’s crazy. My options plays aren’t really working out for me, cause the stocks keep outperforming my calls and I have to keep rolling them up. I’m going to have to figure out a different way to play this game.

I didn’t get a lot done at work today, all said. Did some grocery shopping and the neighbors came over early in the afternoon. It was so cold outside we tried to start a fire. I wound up chopping down a dead tree in no-mans land and tried to cut it up with an axe to burn, but didn’t quite get through the thickest part of the trunk. Good exercise though.

I feel like I should have more to talk about, but the day was a bit of a blur. Markets were bullish as hell and I spent most of the day watching price action. Not the best use of my time, I’ll admit. My crypto portfolio has been pretty flat. So much of it is locked up in Badger pools, I need to start pulling funds out of the pools. Hopefully BTC will run enough that my IL will come back down and I can come out even. I’d even be glad for Badger to come down a bit more if it meant that I’d wind up holding more. I’m sure it’s got more to go.

Things are looking really good right now. Bitcoin is at all time highs. $100k feels inevitable. I just need not trade myself out of position. This year is going to be incredible.

One more round of emails with Kraken today and we should have our business account set up. Finally. Hopefully this CSR doesn’t give me more crap about the paperwork.

In all, a great day. Life is good.

Fifty thousand

If only for a moment

Things are moving so well right now.

BTC tapped $50k for a bit last night before dipping and spending most of the day ranging. We just had the highest daily close ever, and news everywhere is so good, even nocoiners are acknowledging that we could 2x from here. This exchange was pretty amazing:

My brokerage IRA hit another round six-figure number before pulling back today. Apparently there’s a short report on $EH that dumped it 50%. I’ll have to look into it but first glance seems bullshit. I considered selling some $RIOT calls today but too nervous to even put out a three day contract at this point. Seems insane that I can make fifteen hundred dollars for a Friday expiry on forty thousand worth of stock, I’m just sad that I’ve been missing out on it all this time.

A tweet from Brian Roemmele drew my attention to an OTC stock called Bitcoin Services $BTSC. There’s absolutely no information on it other than a sketchy website that doesn’t mention anything other than mining and programming services. So of course I threw two grand at it after I sold some GBTC.

I wrote up a proposal for the Homebrew.Finance NFT Index TokenSet, which we’re calling $MUG. Collectible mugs get it? I actually got half an ETH from one of the SetProtocol founders to deploy it, and sent the transaction out last night. Didn’t put enough gas on it, so it hasn’t gone through, so I’m going to up it tonight after writing and hope to squeeze it through overnight. I can’t wait to get started with it. I think it might have huge opportunity. I learned a lot about the issuance challenges, so we’ll have to follow this liquidation schedule to allow investors in and out. I do have an idea on how to fix this problem that involves API3, and I’m trying to bring the two teams together to make it happen. So fun.

I sent the last of my paperwork into Kraken today to get my approval on the LLC account. Still no word from Gemini. And my brokerage is being super slow to get my funds wired out. It’s ridiculous. My original plan to submit a wire a day isn’t going to work, it’s too much hassle. But I don’t want to be exposed to cash for two weeks or whatever while I move funds around, so I’ll just have to do like five percent of my portfolio at a time. That’s still a lot of money. It’s kinda hard to believe that I’m doing all this. It seems nuts that I’m planning on putting almost all of my life savings on a seventy dollar piece of electronics, but here we are.

So I’m considering dropping three-fifty on this Lattice1 hardware wallet. It’s a step up from my current hardware wallet, which I can barely read. I’m not sure yet, but it looks neat as hell. I’ll either expense for business or buy it for the IRA. Not sure yet, I’ll worry about it after I have funds in Kraken. I’m definitely going to need something more secure if Homebrew does anything.

And I also got a call lined up with a potential product manager position related to crypto/fintech. It’s exciting, but it’s got me wondering if I can really afford to stay on with my current job like I had promised. I spent fifteen minutes on the phone with someone today because they had the wrong charger for their company laptop, and it was the perfect example of the stuff I’m not trying to deal with anymore. We’ll see how it goes, it seems like the opportunities are coming from all around.

A day off

The last couple days have been pretty hectic, I don’t even know where to start. Yesterday we let the girls throw a Valentine’s Day party for their friends, and I worked on Ethereum contract stuff. I’ve actually got a separate post for that stuff that I’ll publish when I’m done. The girls pretty much ate themselves sick. Missus laid out some presents for them, including face masks with their names on them, as well as a box of chocolate that they ate for breakfast. I’m pretty sure they’re diabetic now.

I’ve been getting some video game time in. I finished OxenFree a few days ago. It was nice, and except for a bit of dialogue about “magic brownies”, I think it’s something that Elder can play and enjoy. I also picked up The Outer Wilds and For the King on Saturday night, and stayed up late playing those. Wilds is fascinating, a puzzle game based on a time loop. You’re basically exploring a small solar system, trying to progress in the roughly twenty minutes or so from the beginning of the game until the system’s star goes supernova. It’s got a great story and the environments are very well crafted. I can’t wait to go back it. For the King is a rouge-like turn based game, sort of like the exploration and battle portions of Civilization crossed with the battle mechanics of Final Fantasy. Not quite what I was expecting, but it seems that the game might take a long time to play, and I can’t imagine playing it coop online.

I did spend an inordinate amount of time on Saturday doing taxes. I gave up trying to track my cryptocurrency holdings on CoinTracking. It’s not smart enough to know when I’m withdrawing from one exchange to one of my wallets and back again. It’s a mess. So after a bit of research I found CoinTracker.io. It’s backed by Coinbase and it’s pretty slick. It does the matching, and is much better with cost basis. CoinTracking was showing me a seven thousand dollar capital gain for 2020, whereas CoinTracker has it more accurately, only a couple hundred bucks. Tracker can monitor my exchanges via API, my on chain Ethereum balances, and I even uploaded my BTC wallet xpubs so I could track transfers between my wallets and BlockFi accounts. It’s real slick. They’ve still got some work to do with tracking DeFi deposits and staking rewards, but it’s clear what I’ll be using to do my taxes this year and next.

Progress on the SDIRA continues. It’s taking a lot longer to move my funds from TDAmeritrade, and it actually took about an hour on the phone to get through to them and clear up a transfer. I’ve got my bank account opened, with the first funds there now, and I have a couple of corporate account applications out for Kraken and Gemini. Kraken responded yesterday for some additional KYC docs, so they may win my business. It sucks though, since they don’t do ACH transfers, which means that I’ll have to do wires for everything. We’ll see. I’ll have a full write up on that after I have the first coins in my wallet.

Yesterday I had the idea to create a broad-based TokenSet based on NFT platform tokens. I actually had some interest on Twitter, and I spent most of the day working testing the Set creation process on Kovan. I’ve been documenting the steps and will have a full post soon. I did actually logon to Decentraland for a bit yesterday and take a look around. There weren’t a lot of people there, but the environment was pretty interesting. I’m going to create an account for Elder and let her check it out, and see if she has any interest in building out some scenes. I figure there’s a way for her to start making her own money building stuff, and maybe the Decentraland builder will be easier for her to figure out than Roblox or Blender.

Today I took the day off, and promised the kids lots of special time. It’s been raining for days, so we won’t be spending any time outside today cause the ground is heavily saturated. We’ve been stuck inside for days, and all of us have been off in our own little worlds, staring at our own screens. Elder and Younger have been feeling neglected as I’ve been spending almost all my time on the computer or doing house chores. I’ve got to remember to carve out these little periods of time for them, even if all they want to do during our special time is wrestle and beat me up.

Costa Rica dreaming

I finally got a bank account setup for the LLC today, and put out the first application for an institutional crypto account with Gemini. More paperwork to fill out. I also rolled my covered calls on $MARA, up from $40 to $55, and out from June to September. This was the only way I could do it without paying the premium back at a loss. We’ll see how long I can kick this can down the road. More on that another day.

Having a checkbook control IRA means I can buy real estate, and the tweet above got me thinking about Costa Rica again. I’ve been telling myself that if everything goes well this year, with bitcoin and with vaccines, I want to get our passports updated and take a trip to Costa Rica. So I spent some time looking into it today.

They have several ways to gain residency. The most relevant to me is what they call inversionista, which requires a $50,000 investment in tourism, or $100,000 investment in reforestation. After two years of this I can apply for permanent residency, assuming I spend half the year in CR. There’s also a way to do if if one deposits $60,000 cash in a qualifying CR bank. Seems easy enough.

I even started looking at land for sale, since I can technically purchase it through my IRA, so long as it isn’t used for personal use. And who wouldn’t want to live here?

I showed this vid to the whole fam earlier and they go really excited. I’m really looking forward to getting my COVID vaccine and taking a trip this year. With the last three years of bear market, plus the last year of pandemic, I think we’re about overdue!

Tough times make strong kids

There seems to be a direct correlation between market performance and my productivity. Days like yesterday, with big news and big gains, distract me from doing what I’m supposed to do, and I wind up wasting most of the day staring at charts. Days like today, when my portfolio is down, I can actually tuck my head down and get some work done.

I managed to get a bank account today for the SDIRA today. I’ll should have confirmation tomorrow when I get the account numbers, then I’ll be able to start moving forward with my plans. First the exchange account, and then it’s time for the real fun to begin.

I actually managed to spend some time trying to prepare for the SetProtocol deployment. I’m still a long ways away from being able to call myself a Solidity developer, by any stretch of the imagination, so it’s pretty challenging for me to figure out how to do this. I want to interact with the contracts and try to deploy things on Ropsten testnet, but I really have no idea what I’m doing. I took a good look at the SetProtocol contracts so that I could deploy them in a dev environment, but they way they’re setup is a little beyond what I’m able to understand. I got a lot of work to do.

Of course, I could just deploy the set on mainnet using the GUI, but I still have lots of questions about how the operation will work. The Set team seems to have neglected the documentation at the expense of development — no suprise there — so I’ll have to let the code speak for itself. It just takes longer, but I’m sure it will ultimately prove useful.

Things around the house have been up and down. Elder is dealing with a chronic illness, and she’s been extremely sensitive about it. Wait, let me be clear, she’s been extremely sensitive about everything. Especially the amount of attention her sister gets from me. We try to have a bit of “special time” every day, fifteen minutes when the girls get to decide what we do. Usually they just want to wrestle me, or jump on the trampoline. It’s fine, but gets old when that’s all they want to do. I’ve started giving Younger her time when her big sister is in class, and I’ve been playing card or board games with Elder when her younger sister is in bed asleep. It’s worked pretty good the past week or so.

Still, it is so hard to keep up with them. I keep telling myself that I’m doing the things I’m doing to make sure that they have a secure future. They’ll understand money in a way that I didn’t figure out until my late twenties, and they’ll start out with enough bitcoin when they’re of age that they’ll never have to work a traditional job a day in their lives. Yet, all I hear is that I only let them watch two TV shows after dinner, or that Missus got to eat Lucky Charms every day of her entire childhood and turned out fine, or that I didn’t have to do my laundry when I was eight. Whatever.

Elder is especially good at rattling off a litany of grievances against me like the ones above, and then gets into the injustice of inequality between her and her sister, who apparently doesn’t pull her weight around here. I tell Elder that her sister is half her age, and that Elder doesn’t even remember what her life was like then, so she has no basis to stand on. It doesn’t matter. She’s bored, she never has any fun, I never want to spend time with her like I do with her sister.

I lost my temper tonight, after hearing this argument for the nth time again. I told her that I’m sorry that her life is so difficult. That I’m not trying to raise an exact copy of myself or my wife. I’m not raising her the same way we were raised because we don’t want her to turn out the same way we did. That we don’t live in the same world that I was raised in, so she’s not going to have the same life. That I’m sorry that her grandparents and those came before wrecked the world and were selfish and that’s why she’s gonna have to clean up after all of us. I was speaking of her generation, of course, but it shut her up from talking back for a breath or two so I kept going, and things escalated a bit until Missus came in to take over and calm her down.

It’s frustrating, realizing in real-time all the ways that you’re failing your kids and fucking them up for life. It’s the human condition, I suppose. I remember reading research in various parenting books over the year that said that parents actually have little control over how their kids turn out, that most of their personality and habits comes from their peer groups and so forth. I wonder how much of that holds up in this current COVID world. It’s the whole argument behind homeschooling, I suppose. We’ve all taken on a larger responsibility for the neuroses that we pass on, I suppose.

I’ve been reading through The Fourth Turning, slowly. It seems very repetitive, but I can’t stop thinking about it, a lot of people in my Twitter feed seem to take for granted that we’re living in a crisis phase. To use it’s nomenclature, I’m a very late Gen-X nomad, but I’m not quite sure what it all means if it’s accurate. It seems like a bit of a generational horoscope, to be honest, but I’m looking for the flaw in it beyond selective generalizations. I’m not sure I can dismiss it. The Trump presidency does seem like the symptom of a crisis, and I know that climate change is only going to make things worse in the coming years. Bitcoin, COVID and the economic situation does strengthen the case, but doesn’t every generation think it’s got it the same? To some religions, the world has always been ending. We are in the midst off a hundred-year pandemic, and the Spanish Flu was followed by WWI and the great depression. So we probably are due for another one.

https://twitter.com/radigancarter/status/1358296141264207873

Hopefully, this too shall pass.

Forty-eight thousand

Bitcoin hit another high early this morning, before dipping and ranging all day. It’s been much more chill than lately. The market was basically flat today. Crypto equities had a modest pump today, except for Voyager, which had a bit of an unexplained pullback. I’m not quite sure what the issue was, so I suppose it’s one of those opportunities when I should have bought more. I didn’t though, since I need to start liquidating positions to cash so I can start rolling over to my new IRA.

Things are taking a long time to transition. I tried to call my brokerage bank today to verify that they got the withdrawal request, but they said the wait time was ninety minutes. No sir, I had work to do today.

My $MARA June $40 covered calls are very close to the strike price, and it caused me a bit of a panic before speaking to my step-father, who does a bit of options trading. I was worried that my underlying was going to be liquidated out from under me, but he told me that won’t happen until the calls expire. I could be able to carry them, buying them back and buying subsequent calls at a higher strike price or later expiry. It’s a bit confusing, but I’m starting to get it. We talked for a good half-hour. He’s got a paid program that he’s got a spot for and offered it to me, and hedged it in lot of talk about taking profits without taking risk. Of course I had told him about everything that was going on lately, and I must have sounded crazy, as usual. He’s obviously not buying the whole hyper-bitcoinization theory, but he did open up the possibility of running my money like a business, like a family office. Once he follows through on his offer I’ve got a lot of work to do.

My dad came by today as well. I spent all day yesterday smoking a pork shoulder, and he wanted to get some. The smoker, a hand-me-down from some neighbors, had been left out in the rain and the element finally broke while I was in the middle of cooking. It basically came back down to the outside temperature before I noticed and stuck it in the oven. It added It several hours to my cooking time, so it was nearly midnight before I was able to pull it. It was sooo good.

I filled my dad in on everything and gave him some numbers. Our mining rig seems to have paid off a bit, even considering the power costs. And the bitcoin that he bought in 2017 has compounded several times over thanks to Badger gains, and I explained to him some of the tax liabilities that I’m worried about, and some of the strategies that we can take to deal with it. Plans are evolving.

Right now I’m still trying to find a damn bank for the self-directed IRA. I applied at several banks this afternoon, with rejection after rejection, before I called one and finally figured out that I’m getting rejected because they don’t do LLCs online or something. Anyways, I’ve got one more application I’m waiting on, and then I’ll just have to bite the bullet and actually go to a branch. God knows how long before I can actually move these funds and get them into crypto.