The next decade

I’ve reached the breaking point with work, and have told my boss, in no uncertain terms, that I will be stepping away by June. I’m not going to discuss the circumstances that finally broke me or the way in which I did it, but it’s obvious to me that between my family, job, crypto and personal health, my job has been the lowest priority on that list for some time, and I cannot continue to live such an unbalanced life. I am grateful to my boss for the last eight years of employment, however I cannot continue to hold myself back from fully embracing the opportunities in the crypto industry and starting the next phase of my life.

There is a saying, that the thing that you want is behind your fear, and I have been afraid of taking that step for several years. I’ve been telling myself the criteria that I would need to meet to step away, and have kept finding excuses not to take that step. No more.

I’m extremely lucky to be in the place where I am now, although I understand that my position is extremely tenuous. Having seventy percent of your net worth locked up in crypto puts one in a very volatile position, financially, and I have got to take immediate steps to derisk my positions and build up a cash reserve that will provide my family stability over the next year, no matter what happens to bitcoin or crypto. To that end, I’ll be accelerating profit taking of my existing assets and rotating funds into cash and tax-deferred crypto accounts.

To prevent myself from waffling and reneging on my promise to myself, I am going to write a blog post announcing the departure and post it to my normie Twitter, LinkedIn, Medium, and Substack accounts, no later than this Friday.

My immediate concern is capital preservation, and preventing myself from taking unnecessary financial risks that will put this departure plan in jeopardy. Barring a black swan event, I believe that we’ll see BTC prices near six figures by the time I’m ready to depart, but in the event that we do not, I will still need to have a year’s cash on hand to handle expenses. And if I’m correct, my wife and I will have achieved financial independence before the end of the year.

My wife, bless her soul, will always be the main critic of this plan. She’s watched me fall further and further down the crypto rabbit hole these last five years, and has been my rock for the last sixteen years of my life. She knows me and my baser tendencies, and will take much more convincing to go along with this plan. Terms will be set.

I’ve been giving a lot of though to the values and principles that I want to establish and pass down to my children. I’ve always believed in a world of morals without religion, but I’ll admit that the absence of church or religion has left us a bit unmoored. I’ve realized that puts extra work on our shoulders to actually be explicit about our values around work ethic and service to others, that we have to work harder to fight our baser instincts and battle our addictions. We have to set the habits that will make us thrive, we have to build a network of friends and colleagues and take steps to reach out to people that make us better. It’s work.

And to that end, we’re going to hold our first monthly family meeting with the kids, where I’ll be proposing a draft of a family constitution. It’s an idea that I got from the Business of Family podcast. It sets roles and responsibilities, both for parents and children, and provides a plan so that everyone knows what’s expected of them, and sets a framework for long-term, multi-generational planning. I’ve been thinking about it a lot lately.

If this is going to work out, if I’m going to achieve the plans that I set out to achieve, then I’m going to need the help and support of a team outside my family as well. I’m not going to become a man of leisure anytime soon, I’ll have to have a job, else Missus will never go along with it. She still remains convinced that she’s going to be working for the next fourteen years to finish her government pension, and will not abide the thought of me as Mr. Mom, staying up late and engaging in shenanigans, while she continues to hold a steady job in order to provide health care coverage to our family. I’ll need something to do to keep me busy.

The choice is obvious. I’ll make it my mission to help as many people get started on the same journey as I am. Financial independence through bitcoin, if you will. Whether that is by helping them open tax-advantaged retirement accounts for their crypto, offering passive or active investment vehicles, educating them about crypto, or helping them learn about financial indepI’m making it my mission to help as many people get started on the road to financial independence through bitcoin.endence so that they can live the type of life they want, I can think of no better way for me to spend the next ten years building the life I want.

I’ve already been experimenting with this via Homebrew.Finance, but the work has been going slow, too slow. I’ve got a lot of ideas to implement and need people with skills that can help me make it happen. So I’m putting out the call, and will be making it formally (non-anon) this Friday. I need to build a professional, crypto-savvy, team of partners who are on on the same road as me, and want to help others get there as well. If this is you, then please let me know in the comments, via my Twittter, or at my gmail (@dahifi).

Here’s looking forward.

Swimming in Liquidity Pools

So the big news this weekend in crypto was the launch of the Big Data Protocol’s liquidity mining program. The project quickly locked up six billion dollars in it’s BDPMaster contract, causing concern for some. Sam Bankman-Fried’s Almeada Research apparently threw in one billion on their own. I gave myself a minor panic attack as I pulled liquidity from several pools and projects to ape in, burning about five hundred dollars in gas as I exited positions that were earning a measly sixty percent interest.

The project itself is a bit underwhelming to me, it’s founded by an existing data provider company, basically they’re using the tokens to provide access to their feeds. They’re actually using two tokens, $BDP, which is the utility token, and $bALPHA, which is a subscription token that one can burn for access to the data sets. BDP is earned by staking one of twelve assets (wBTC, wETH, USDC, Tether, et al,) for up to a week, at which point no more BDP tokens will be minted for at least two months. The bALPHA tokens are released by staking BDP and bALPHA LP tokens, and those two pools were still pumping quadruple digit APYs three days after launch.

Despite my excitement yesterday, I feel like I was probably late to the party, and that ultimately it will wind up a bit like treading water, a lot of physical activity that gets you nowhere. The worst part is that I am pretty sure I read about the BDP launch some time ago, but wasn’t really interested in it. I just FOMOed in because of all the excitement. I’ll be lucky to earn my gas fees back, and I honestly deserve to get rugged or lose my capital over this.

I’ve forced myself to write before I access any of my wallets. Younger woke me up before dawn this morning and I laid in the dark in that in between sleep state thinking about this, and knew that I needed to write about it. I’m forcing myself to write five hundred words before I allow myself to check my charts and wallets. My CoinTracking is probably going to have at least thirty transactions from yesterday. Sometimes I am a fool. The GasNow plugin in my web browser is mocking me: gas is only eighty, don’t you want to check? Oops, now its ninety, everyone is waking up. You better check your IL and get out why you still can.

I dreamed about changing my LinkedIn profile to cryptoanalyst. Nansen.AI posted a tweet that their hot contracts feature alerted their pro subscribers to activity on the BDPMaster contract Friday night. I imagine having that information could have paid for the $1500/month subscription fee. I signed up for a trial. The basic service has some interesting features, such as address alerts, which an address for tokens or transfers or, most importantly new contract deployments. I imagine this would be very useful for watching star developers like Cronje or Banteg, or Uniswap factories to see when a new LP gets created. I can only begin to imagine. I had been looking at a GlassNode subscription a few days ago to get access to their current data sets, and the number of metrics that they have there are just staggering. Their cost is much cheaper than Nansen, that’s for sure.

I’ve already got a Messari subscription, and it’s not doing that much for me, to be honest, but it’s a business expense, so I justify it along with the 2021 CoinTracking subscription. I still have a day job, and projects to do that not interest me in the slightest anymore. I figure if I can just survive this market for a few more months without doing anything stupid (a big if!) then I just might make it.

My BadgerDAO holdings are giving me some pause, since most of my positions are tied up in LP or staking there. DIGG, which I had started to hoard, is hemorrhaging, but Badger, which I’d been selling, is holding. Go figure. I’m hoping DIGG will start moving once BTC makes a new ATH, but it looks like my previous prediction about it catching the peg with BTC’s price was either naive or will take a lot longer than I predicted.

So for now, I’m going to take a deep breath, slow my thrashing, and try to tread water for a little while longer while I assess my surroundings.

The next chapter

I started reading Shantaram yesterday, and the way the author describes his writing habit makes me realize that I am still not a writer. Sure, I’ve been blogging almost daily for over a year now, but most days I still have to force myself to write. Days like yesterday I can just skip it and feel no remorse about it. I’ve been listening to Seth Godin on Knowledge Project about the creative process, and the words he speaks are just so damn clear. The man’s blogged daily and has a streak currently measured in the thousands, and I just don’t have the same level of commitment to writing that he does, or Penn Jillette, who told Tim Ferriss that he’s journaled every day for the last thirty years.

I’m growing more comfortable being honest here. Now that bitcoin has (currently) given me the feeling of financial independence, I’m not so concerned about saying what I think about work, or have any qualms about what anyone future employer might think is professional or not. I’m going to say what I want, and I do feel like I’m starting to find my voice here. I’m not quite ready to erase the veil of pseudonymity that I currently have, and announce on my LinkedIn that I’m Blockchain Man. I still respect my family’s privacy too much for that, and opsec is still a concern. Being your own bank has it’s risks.

I am, however being a bit lax about sharing details with some of my IRL friends and acquaintances. I only know one person who’s actually admitted to reading this blog on a regular basis (hi Britt!) but other than that I think the only people coming through here are those hitting the focused topic articles that I’ve written. This one here is for me, Dear Reader, for present me, so that I can focus my thoughts, and for the many future mes, so I can see this one or more years from now and remember where, and who I was. I went back and looked at last March’s entries, writing about going into lockdown as the pandemic started. It’s like going back in a time machine. Further than that though is a bit of a mixed bag, as they’re all caught up with technical things, or politics. I wasn’t writing in quite the same way I am now.


Things are coming together a bit lately. I made a connection through the SetProtocol Discord, and it turns out this person actually lives less than thirty miles from me. We may have actually been in the same room at some point during a blockchain meetup. They’ve got some ideas around doing their own version of a TokenSet, using paid signals from a popular paid recommendation service for HNW individuals. I ran the numbers to get an idea of how things would run, and I’m tempted to go ahead and pull the trigger on a new Homebrew $RUM fund. This one would be more of a speculative, high risk fund, but I’m still trying to figure out exactly how it would be managed. What would the minimum viable capital needed to start it? What would the capital allocation process look like?

Someone Twitter has been follow pointed me to another NFT Index TokenSet, $NFTI. I stumbled across them after I had already launched $MUG, but had missed the website that was linked at the bottom of the page. They actually started their fund in early February, with about $80k of liquidity on Uniswap, and have done about $300% since then. Not bad at all. The token inclusion policy seems like it may have been ripped straight from the IndexCoop page for DPI, but it’s well done and professional. Very nice.

Linked at the bottom of that page is a link to CryptoArt, an Estonian cryptoasset management fund. This is very attractive to me, and is giving me much inspiration for Harvest. Implementing this type of business as a DAO is likely going to be the focus of the next several months of my life. They have a $5k/6 month minimum investment lockup, plus a two and thirty percent management/commission structure. It seems a bit high to me, but if TokenSets implemented a commission module it could go toward funding a DAO treasury. Governance tokens could be streamed via those willing to lock up their tokens in a smart contract. It’s given me a lot to think about.

As far as capital goes, I liquidated a good number of equity positions yesterday, pretty much everything that wasn’t crypto-related or was at a loss or the lower end of the performance curve. It’s going to get distributed to my SDIRA as quickly as I can. It’s taking me a lot longer to do than I’d like, but it’s the best I can do. I’ve got to be careful about how I manage those funds and keeping it separate from my traditional IRA, lest I trigger some sort of taxable income event. But I will be making some big moves, very shortly.

But for now, family. I am taking the girls on a bike ride to the park, to enjoy this beautiful, warm winter day.

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.

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!