Self-directed crypto without taxable events

gold-colored Bitcoin

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.

The IRA/401k

Last month I wrote up about the difference between the Checkbook+ IRA from AltoIRA and how it differs from most “crypto” IRAs. Basically, most crypto accounts are custodied, and have high annual and trade fees. We’re talking somewhere between one and two percent, which for some might not be that big of a deal, but for me and others who are comfortable handling their own private keys on six or seven-figures worth of crypto it’s can be a lot. Checkbook IRAs are much cheaper, with Alto we’re talking $250 a year plus a one time $500 to set up the LLC. In addition to crypto, one can also purchase real estate, or invest in other businesses or venture opportunities through AngelList or a number of Alto’s investment partners. There are a few restrictions about how the funds can be used: no double-dipping, so you can’t purchase a rental property and use it for your vacation. Basically you can’t spend funds that give you or your immediate family any material benefit. Also, in case it wasn’t obvious, this is a retirement account, so breaking these rules subjects you to an early withdrawal penalty, and on top of that, the entire balance of the IRA immediately becomes taxable income, which for me would be considerable. That is, for me, part of the exit plan, to aggressively grow my fund tax-free until the sum of the account reaches “FU money” levels, at which point I won’t care if I have to give half of it to Uncle Sam.

The way it works is like this: Alto sets up the IRA, and you deposit cash contributions or rollover funds through them. No crypto here, just straight fiat. If you’re doing a traditional or Roth IRA you’re limited to $6000 for 2020/2021, limits are much higher if you use a SEP IRA or a 401k. I’ve actually considered changing my full-time employment status to contractor to take advantage of these higher limits, you may want to do the same if you’ve got significant gains this year.

The LLC

Alto also creates an LLC through the state of Arizona. You won’t get to pick the name, it will be generated automatically using your initials and the date of creation. (You can always register a fake name later if it matters to you.) It will take about two weeks, and Alto will provide you with a taxpayer ID (EIN), operating agreement, and a few other documents. One thing you will need to do yourself is get a copy of your articles of incorporation from the Arizona Corporation Commission. You’ll need to lookup your LLC, then go to document history and look for the downloadable link. Save these docs with the operating agreement, as you’ll need them to open bank and exchange accounts.

Now the legal structure of the LLC is this: your IRA is the sole member of the LLC. The IRA is the “owner”, and all funds into the LLC have to flow through it. Technically, the name of the IRA is “AltoIRA FBO (for benefit of) Your Name”. You are named as the manager of the LLC, and have complete control over how those funds are used.

The Bank

Once you have your documents you can move forward opening your bank and exchange accounts. I suggest you do both at the same time unless you like waiting. Getting a bank account was the hardest part of the process, (save for getting money out of my brokerage account, which I’ll talk about later). I have lost track of how many online account applications I went through, but I must have spent a week. First off, most of the crypto-friendly banks that are out there don’t do business accounts, and the ones that do that I could find summarily rejected my application with a “we don’t serve your kind but can’t tell you why” response. At one point I got through to a rep at Bank of America over the phone and was told that they simply don’t do open LLC checking accounts over the phone and that I would need to come into a branch to open one. I wasn’t happy about the prospect of doing business with BOA, but then this came up in my Twitter feed:

Source: Coindesk Feb 10, 2021

Now I’m not in Charlottesville, but I gave them a call, told them what I was trying to do and was put in touch with a branch office. A day later I had my account created, all over the phone. There were several documents that I needed to sign and scan, but I was able to do everything using my iPhone’s note taking app and email. The staff have assured me that they can open account for anyone in the US over the phone as well, so if there’s not a local bank that you’d rather deal with, give Blue Ridge a call. They’ve been very helpful, and they have $25 wire fees and integrate with Plaid for ACH transfers to crypto exchanges.

The onramp

Unfortunately, there is probably not a worse time to open a new exchange account right now. With the madness of r/WallStreetBets ongoing, and in the midst off a bitcoin bull-run, retail investors rushing to the fiat onramps and exchanges are being overwhelmed. Friends in my Signal group chat were waiting almost two weeks to get signed up with new accounts on Voyager earlier this month, and there are reports of other exchanges being swamped as well. Not wanting to repeat the frustration that I went through opening a bank account, I went ahead and filled out applications for both Kraken and Gemini. Kraken was the first to respond, although it took me several days going back and forth with their support staff to clear the KYC process. Gemini responded after a week that they were running behind, but haven’t gotten back to me beyond that.

One problem I have with Kraken is their lack of ACH deposits. They only allow wire transfers for fiat, which isn’t ideal since I’m planning on doing a number of smaller transfers over the next weeks and months as I rollover funds from my equities IRA. I’d ruled out Voyager since their institutional offering seemed a bit out of my league, and I wanted to avoid doing business with Coinbase and Binance. I’d been hearing a lot of good things about FTX recently, and decided to go ahead and sign up for an account there. The process was simple, and fast. One or two days after providing my EIN and documents (operating agreement, articles of incorporation, drivers license and proof of residence), my KYC verification was completed.

So last night I linked my Blue Ridge checking account to FTX, got pre-credited on an ACH transfer and made my first purchases. It felt great! Now I’ve just got to wait for the funds to clear, then I can withdraw them off-exchange to Uniswap and into yield farms and vaults. Fun times ahead.

One note about FTX: make sure you wait for the KYC process to complete before trying to initiate an ACH, else the transfer will fail and you’ll have to remove and add your account again. It seems to be a bug in their UI that you can do one before KYC has been completed. The transaction (and the account) will be flagged as rejected.

A word about rollovers and timing

This last section may not be relevant to you if you are just starting out with a fresh account, but if you’re planning on rolling over large sums from an existing IRA you’ll probably want to pay attention. Alto is not a brokerage IRA, meaning that they won’t custody your equities. So for me to liquidate a position from Grayscale’s $GBTC into BTC directly, I have to sell all my GBTC, wait for the funds to settle, initiate a transfer into Alto, settle, transfer funds to my bank, settle, transfer funds to exchange, then buy BTC. Depending on whether you’re doing wires or ACH transfers, this process can take several weeks. And I don’t know about you, but I do not want to be out of a bull market for that long. So my original plan was to liquidate a portion of funds, say $5-25k at a time, and move them over. Unfortunately, my brokerage had other plans.

It seems that the combination of COVID and r/WallStreetBets seems to have not only overburdened the crypto exchanges, but conventional brokerages as well. Doing third party wire requests is not an automatic process, and it actually took me over two weeks to get a disbursement from my brokerage. And that was following two phone calls, the first to find out that my scanned signature page came through garbled, and a second to find out what the hold up was. Each time this involved at least an hour on hold or texting with customer service. So now I’m not sure what to do. I could speed up the process by requesting a direct wire or ACH to my personal bank account, but this would trigger the sixty-day rule, which can only be used once a year. So unless I am willing to liquidate my funds entirely, and risk a huge pump while I’m out of the market, I’ll just have to resign myself to rolling over these funds bit by bit.

For now, I’m unable to determine a better way to move these funds, and am looking at the possibility of doing these smaller transfers indefinitely over the next year or two, unless I can find a way to speed up the process. Transfers initiated via Alto only require me to fill out a signature form, whereas my brokerage requires a letter of instruction to be physically mailed to their office. In each case, a person has to review the request, and they are just so swamped right now that it will take upwards of two weeks to complete these requests. I’m also not excited about selling funds in the middle of (what is hopefully a small) correction, when both GBTC and ETHE are trading with negative premiums. So it goes.

Self custody

On the bright side, this delay will allow me to figure out some of the logistics of actually handling six-figures of crypto. This is a big step, and while I already have a significant sum of crypto stored on hard and cold wallets, having all of my retirement savings as well is a bit more of a risk. I can definitely understand why one might want to pay Coinbase one or two percent a year to custody funds. This is the risk I take for complete and utter freedom. Once I have my debit card from Blue Ridge, I plan on taking a look at some other custody solutions, whether it’s via Casa or Unchained Capital for my bitcoin, or a fancy Lattice1 for my defi funds.

Regardless, it’s exciting and to have made my first purchase, and I can’t wait until I have total control of my crypto funds. Hell, I might even buy some land in Costa Rica while I’m at it!

Family business

My dad came by today. He had a hospital appointment to deal with a chronic heart condition, and I had to drop him off and pick him back up after. He dropped by a couple hours early, so I tried to fill him in on our investment partnership. He bought some BTC in 2017 and put down half the capital for the mining rig that I’ve operating for the last three years. I tried to explain to him how I doubled his money in the past six weeks on BadgerDAO: “So I know this next sentence won’t make sense, but here goes anyways; BADGER is a governance token for the Badger decentralized organization, and Digg is an elastic rebasing token that tries to follow the USD price of Bitcoin by dynamically expanding or contracting it’s monetary supply.” He just laughed.

The girls came with me to pick him up, and we stopped by Cold Stone for a treat before heading back to the house. I’ve been giving them a lot of leash lately, trying to reduce my own stress level. My dad seemed overbearing when I was younger, and I seemed to be emulating his authoritarian parenting style. I’ve been working on Elder’s application for GalileoXP, and the more thought I’ve been giving to unschooling them, the more I’m letting go. I used to limit their screen time to an hour a day and try to control their schedules, but I’m just letting go. As long as they keep up with their chores, then I’m fine with them watching TV all day. We’re still fighting, but I think things are improving.

If I really wanted them to stop watching TV, then I’d cancel the Netflix and Disney+ subscriptions. The point is that I shouldn’t have to. I need to find alternatives that they enjoy more. I’m hoping I can get her enrolled in Galileo and she’ll latch onto something that she enjoys more than watching sitcoms. I figure it’ll take a few weeks for them to adjust to this new way of doing things. I’m still prompting them for outside time and for Elder to sign onto school when it’s time, but they’re starting to understand that as long as they do what’s expected of them, they’re mostly free to do what they want. Which was the main lesson my dad tried to teach me growing up.

I was telling Dad about my plans for early retirement and Elder’s unschooling, and he just laughed. Missus walked into the room and rolled her eyes at me and they both had a laugh at my expense, which is fine. I’m the dreamer in the family. Luckily for them.

I’ve promised to talk about how I’m teaching the girls about money, but that’s going to have to wait for another post of it’s own. Elder is thinking like an entrepreneur already, which is great. Today she actually cooked lunch for her and Younger without prompting, which blew Missus’s mind. It was just baked beans, green beans and a marshmallow for dessert, but you know, baby steps.

I’ve been thinking a lot about the concept of a “family office” and have been giving thought to having a family business, and generational wealth. Twenty one million BTC divided by seven billion people is … several orders of magnitude less than what I have right now. As long as don’t do anything stupid and can hold on to what I have, then our family should be secure for generations. I found a podcast that focuses on multi-generational wealth, and one of them focused on the business of family. Apparently people actually draft up family constitutions to govern how families operate and after looking at a template for one, I thought it was a great idea. I told Missus I wanted to start monthly family meetings next week.

Overplaying my hand?

gray monkey under sunny sky

Thoughts on over-diversification, taking profits, and doubting oneself.

We’ve been playing a lot of Santa Cookie Elf Candy Snowman, a Christmas-themed version of Taco Cat Goat Cheese Pizza. It’s a card game that involves a lot of hand-slapping, and I’m frankly pretty terrible at it. Elder loves it, and I even played a game with Younger earlier, even though she’s really to young to really play it.

I mention it cause I’ve been making a lot of moves lately, and have a bit of nagging self-doubt about whether I’m making the right ones.

Voyager

First up, Yoyager Digital. I’ve been very vocal about how this has been the trade of the year for me. Back in November, when I was still very disciplined about trade planning and capital preservation, I stumbled across them via BitcoinTreasuries.org, and immediately aped in. Up until that point I was putting positions in my value average algorithm, and slowly scaling into my 2% risk positions over the course of thirty or ninety days. Not with these guys. I have a very strong conviction on exchange plays, namely that the house always wins, so I threw the full capital allocation at it, about four thousand dollars.

Since then my position is up over three thousand percent, and is worth six figures. It would have been more amazing if the rest of my portfolio hadn’t gone 4x during that same time period, but Voyager is nearly tied with GBTC for my largest holding.

I’d been looking for an exit, so I was waiting for the Coinbase S1 to be released so that I could get a look at the financials and try to make a comparison. These came out last week, but had the 20Q4 numbers, so it was really hard to make a direct comparison to the current valuations between Coinbase and Voyager. Coinbase is rumoured to have a $100b valuation, while Voyager has a $2.5b market cap. Still, looking at the revenues and profits, I’m not sure I can make a direct comparison. Basically I’m looking to see if Voyager seems over or undervalued in comparison to Coinbase, and I still don’t think I can make a solid call on that.

What I can say is that I haven’t used Coinbase much over the last couple years. I’d been relying on Gemini for the most part, and used Kraken for a while to play with leverage. I like Voyager though because they were offering interest on deposited tokens, so they were comparable to BlockFi, but without the withdrawal limitations. Of course Gemini and others are offering these yield opportunities, but Voyager became my go to for all my normie friends.

That said, given my current goal to move out of brokerage equities into self-custodied crypto, I felt the need to take some profits on my position last week. I sold a sixth of my position, about $20k, and made it all back yesterday when BTC shot up and all my cryptoequities made 20-50% gains. Totally insane. I’m not really sure how much more Voyager can run, but I expect I’ll continue taking these small exits over the next few months as the bull run continues, at least until the Coinbase IPO comes out. I don’t really know how to value these two, but I’m worried that Voyager is still extremely overvalue. I’m also worried that I’m extremely overvaluing it, and that selling here is a mistake on par with selling my Netflix stock in 2008 to buy a used BMW. No looking back, I guess.

Digg/Badger

I wrote about my DIGG strategy yesterday, but I had a bit of doubt earlier today after looking on the forums. These seigniorage tokens like Basis Cash and Klondike have been getting hammered lately, and my “return to peg” thesis might not be as sound as I suspected. I actually talked one of my friends into coming along with me for the ride, and after the price continued to decline I finally decided to go into a lesson on risk management and trade planning. Whoops. I actually did a post-trade trade plan on this public TV chart, so hopefully that will help get us on track.

So the actual reason for the Digg dump was because Badger got listed on Binance earlier this morning, and there was a bit of a rotation from a whale that got wind of it and rotated from Digg to Badger. I actually used the opportunity to unload my Badger claims to USDC, and stuck them in BlockFi as preparation for my annual salary/2021 tax payments. There wa a bit of a sell off, so it looks like the timing was good. I’m going to continue to sell of my weekly Badger rewards. I honestly don’t want Badger to run much from here, since I’ve already lost so much in inpermanent loss when I staked at eight dollars. I really need BTC to have the mother of all runs to balance things out so that I can pull my LP out.

My doubt here is that I might actually be better off just leaving my Badger and DIGG rewards unclaimed until they are worth much more, or that I should be selling the DIGG and keeping the Badger. It’s so confusing. I just want to take some profits, and save up some cash.

Unfederal Reserve Token

I don’t think I’ve actually written about $ERSLD here before, I really haven’t done any analysis on it. The only reason I aped in it was because my $$PRIA bro Tres was shilling it, and was buying a lot of Uniswap tokens earlier this winter. I think I threw a total of .1ETH at it, and it happened to do a 4x recently. So I sold everything today. It was only $700 worth of profit, but of course I had to second guess myself and wonder if I’m doing the right thing. This thread does make the project look very strong, so who knows, maybe it’ll come back down and I’ll have an opportunity to re-enter. Or maybe it’ll run up another 4x from here and I’ll curse myself.


The fact of the matter here is that the diversification is killing me. Between my equities and crypto positions, I’ve probably got close to a hundred open positions right now. That’s too much, and I can’t worry about that many. It’s my own damn fault for getting myself here. Spray and pray might have seemed like a good strategy a few months ago, but it’s time to start cutting the weakest links. I already cut all the losers out from my equities positions, but because gas is so high, it’s not even worth cutting loose these Uniswap tokens. I might have to burn gas just to take the tax loss next year.

I’ve been very aggressive about my investments, but now is the time for me to be very aggressive about profit taking. I made and lost a lot of money during the 2017-18 market, and there’s no way I want to repeat that mistake. They say alts are how you make it, and BTC is how you keep it. I spent the last several months setting up my positions, and when they start pumping I am going to reap what I’ve sown.

There’s a lot more that I want to write about the macro environment, especially what’s been going on with bond yields, but that will have to wait until next time.

Evening pages

This weekend was a blur. I took the kids to the park for a couple hours yesterday, and took Elder shopping on Saturday for some clothes and shoes at the thrift store. I filed our 2020 tax return (yay) and discovered that I left a school tuition credit on the table for our 2017/18 returns that’s worth about $5,000 altogether. I also spent an inordinate amount of time trying to reconcile my BadgerDAO investment holdings between my daughters, my dad, and myself. It was an unholy mess, and while I didn’t finish, I did make significant progress on what portion of the Badger LPs came from which funds.

From there though, it’s hard to figure out what the rewards were. Since we made a total of four investments into the pools, (three in Uni, one in Sushi, each with their own rewards,) it’s impossible to determine exactly what percentage of the original Digg airdrop should be allocated to each of the investors. Luckily my daughters contribution is 50/50, or I might have just lost my mind. And it just gets worse after the Digg airdrop, since we pulled liquidity from the Uni pool and used that to fund our stake in the Digg LP. Since the original LP stakes are up so high though, I think I’ll just wind up taking the subsequent Badger and Digg reward as a fee of sort. I’ve actually made two claims over the last couple weeks, I’ve staked the DIGG back into the Sett, but sold the last claimed Badger tokens for USDC and put them in BlockFi in preparation for taxes. I still have another Badger stash from last week that I was planning on selling, but didn’t get around to it before this dip. It’s almost recovered though, so I will probably sell it as well.

I’m making over 2 Badger a day from the Setts, which has fluctuated between $100-300 during the last month or so. I figure at this point I’ll start selling it for USDC, which I’ll leave in BlockFi or in a Yearn vault. This way I can be sure to take profits, save up a year’s salary in preparation for “retirement” and have enough cash on hand to max out my IRA and pay taxes next year.

The DIGG that I’ve been claiming has gone back into the Sett. I figure that despite the sell off, Digg should return to it’s BTC peg as the bull run resumes. It’s a risky strategy, but we’ll see how it plays out over the next couple weeks.

I also spent several hours looking over Yearn V2 Vault code, figuring out how they work and trying to determine how the yield is calculated. The crvSETH Vault was showing almost 2300%, which I was sure was a bug, but I wanted to calculate how it was wrong, and actually learned a lot. I aped in as well, and figured out the yield is actually closer to 30-40%. The underlying Curve pool contains Synthetic ETH (not sure what the point of that is…) and ETH. Staking provides you with sETH, which is staked in the Yearn vault. These new vaults are much cheaper than the V1s, which relied on users moving in and out of the pool to trigger the vault’s harvests and rewards. In V2 vaults, these have been outsourced to Keepr bots, which claim an amount of the profits in as a reward for performing these actions. It’s pretty smart.

I parked a good portion of my ETH in this vault, cause I figure I’m not going to be doing much else with it for the time being. I’ve gotten the first round of funds from my IRA rolled over to my new FTX account, and bought a good amount of BTC, wBTC and ETH. I’m waiting for my banking card to come in the mail, then I think I’m going to buy a Lattice1 to use as a hard wallet. Once I have that setup and my ACH has cleared, I’ll tuck the BTC in a hard wallet, stake the wBTC in defi, and trade some of the ETH for DPI. I may use it to start a proper BED (BTC, ETH, DPI) Set under the Homebrew.Finance banner that has proper NAV issuance, perhaps even an LP. It all depends on how fast I can move funds over. If my brokerage is going to take a month to send a wire each time, then it may be slow going.

I took some profits on Voyager last week, for the first time. About a sixth of the position, at a 2600% gain. This will cover my next disbursement. I’ve also sold off a few thousand dollars worth of GBTC, following the value average protocol rules that I started a year ago but never automated. I’m about ten weeks ahead, which means I’ll be selling off a lot more if the price remains steady. If everything goes to plan, I won’t be selling off fast enough to bleed off the gains. I’ve also been liquidating the weakest links in the portfolio. I sold off all the losers weeks ago, and am now starting to cut the ones that are underperforming. We’ll see how fast this next withdraw request goes. Since it’s a third party request, it requires a wet ink signature and requires manual intervention from my brokerage. I’m fine with the delay, I think, since it’ll keep me from doing anything too rash.

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.