Getting down to work

So, I spent a lot of time working on the design I spec’d out in a marketplace for hours as digitally unique objects.

Working with Truffle is fun and interesting. It’s a great system for building applications on Ethereum, and I’ve learned a lot using it.

I started off building a marketplace with asks and bids for individual hours of my time. You can see the resulting contract at evanp/marketplace on Github. Ultimately I realized that it had a few problems.

  • It’s not really scalable. It’s unlikely that the value of one of my hours is going to go up an order of magnitude or more over the next couple of decades. That’s just not how time works.
  • It’s complex.
  • It’s trying to fit a lot of out-of-band communications into the contract.

So, I decided to do a simpler design. I’m back to doing an ERC20 token, which means that EvanCoin will work inside your Mist wallet, in Metamask, and in other (?) wallet clients. It also means that it can be traded externally. I’m going to initially have 45 years worth of hours, most of which I will keep.

But I also decided to implement an ask/bid market system, so you can buy and sell EvanCoin (for Ether) directly through the contract and the related front-end app. Instead of doing a crowdsale, I’m just going to make a large initial ask of a few hundred hours, which should make it “easy” for people to buy hours at a reasonable price.

(“Easy” defined as “easy if you already have Ether.”)

My hope is that if I tokenise this time, and put good effort into supporting the currency, I can make it scale past what its value would be otherwise. I’ll still accept EvanCoin as payment, but maybe other people will find EvanCoin valuable as an exchange mechanism, too.

My big concern about the version I have now is security. I want to make sure it’s as close to bulletproof as humanly possible. Hopefully a lot of eyes will help make that the case. I am still shooting for a 1 Oct 2017 launch, but I’d rather have a review before that time. I might launch on one of the test networks at first just to shake out any vulnerabilities.

I have a number of outstanding issues to resolve, and I need to finish the Web interface, but I’m feeling very positive about this version. Code is at evanp/evancoin and I’ll have a sample version up on the Web “soon”.

Getting started with Truffle

I’ve been getting a little daunted by the amount of work it will take to get this design going. I was really happy to see the awesome Truffle Framework for making Ethereum applications.

I’ve been reading through the tutorials and I think it will be nontrivial but tractable to get a calendar app + marketplace working.

I’m looking forward to putting together a first version on a test network over the next few days. Wish me luck!

A marketplace for hours as digitally unique objects

UPDATE: it turned out this was too complex. See how it works for the full system.

So, I’ve been thinking about my hours as if they were fungible objects, in which case using an ERC20 token makes sense. But hours aren’t like that, at all!

An hour in my past, like May 12, 1975, is worth very little to a buyer, except as a souvenir. It’s barely worth anything to me, and it’s my life! An hour during business time in North America is quite valuable to most startups and other potential buyers of my time. An hour in the middle of the night Eastern Time might be valuable to Australians and might be quite precious to me.

Hours in the near future (weeks and months away) are probably valuable, and hours years away would be quite speculative.

My friend Boris Mann pointed out the very cool CryptoPunks app, which sets up an automated marketplace for digitally unique items. I think it might be the best possible interface for my hours. Here’s a new design for how Evancoin could work:

  1. No pre-mined tokens! Instead, a token’s value represents the number of hours since my birth. So the current hour at time of this writing is 429000.
  2. Initially, I own all hours.
  3. Someone who wants an hour of my time can put a bid on my time, in exchange for Ether.
  4. The owner of an hour (initially me) can accept a bid and be paid for the hour.
  5. Once purchased, the new owner can make an offer for that hour, at a given price. Anyone can take that offer.

I think this is a very simple system that leaves out a lot of the problems of my previous designs. The two big problems are:

  • I’ll need to have my own user interface to allow people to browse, bid, and offer hours. Since the objects aren’t ERC20, there’s not a UI built into the basic clients.
  • Someone who just wants my time whenever would be a little frustrated. I think we could just do those negotiations out-of-band.

I think this might be the best plan yet. I think my next steps are going to be searching for other marketplace options, and then building a first version based on that code.

Github repository is up

For those of you following along at home, it might be interesting to watch the Github repository for evancoin. I’ve seeded it with some example code for a simple crypto coin, and I’m going to tinker with that to get the behaviour I want.

I’m also realizing that I’m probably making things more difficult than they need to be by trying to design for perpetuity. Instead, I’m going to try to do multiple ICOs, probably on an annual basis, which should make the whole thing easier.

Probably the mistake I’ve been making is trying to capture value from the current market rate for Evancoin. But that’s not what people buy coins for! They want to buy a coin at a low rate and have it increase in value. They take a risk in order to do that. They should be compensated for that risk.

So, my new design is much simpler.

  1. Pre-mine a first coin (Evancoin1) with 8960 (= 365 x 24) coins. This is the number of hours I have between Oct 1 2017 and Oct 1 2018.
  2. Make a percentage of them available for sale. If I split my time in three even groups — sleep, personal, work — and I’m willing to give about 1/3 of my personal time to servicing Evancoin1s, this would mean about 1/9 of the total; let’s say an even 1000 coins.
  3. I do an ICO on Oct 1 2017 for some percentage of my standard consulting rate. I’m not sure if this should be 25%, 50%, 75% or 100%. Still working this out.
  4. Over the year, I accept Evancoin1 as payment for work.
  5. I can release more Evancoin1 for sale at any time, out of my remaining hours. Note that I shouldn’t release more hours than I can actually service — including hours that have already been bought.
  6. On Oct 1 2018, I offer for sale a second tranche of coins, Evancoin2, maybe for a longer period (like 5 years). This goes at market rate of Evancoin1, or maybe slightly discounted, and I include in the contract that there be 1-for-1 exchange of Evancoin1 for Evancoin2.
  7. After 5 years, I either do an Evancoin3 or just do something else.

It’d be nice to build some of the trust into Evancoin1 to begin with. There’s some concern that we’ll get to a point where there are more Evancoin1 outstanding than there are hours left in the year. Knowing that the coin will be 1:1 exchangeable for the next tranche might be good, but I’d like not to have a bank rush on Evancoin.


How this should work

UPDATE: I’ve gone through a lot of design iterations. See how it works for the production system.

So, I’ve been thinking about doing a time-based currency to tokenize my own time and attention for a while. My friend Kevin Fox once said that in the future we’d all have our own personal cryptocurrency, and I registered soon afterwards, as a ha-ha-only-serious experiment. But I found creating cryptocurrencies to be pretty difficult, and I never really went anywhere with it.

Creating token currencies has gotten a lot easier with the launch of Ethereum. It’s led to a rash of initial coin offerings as people are working on new ways to tokenize assets and make them available for market trading. For my 30-day challenge for October 2017, I’m going to work on Evancoin and see if I can make it work.

What would people use an hour of my time for? A lot of things. First, I’m a pretty good software developer, so buying a few weeks of my time to create some software might be useful. But I’m also a startup entrepreneur and technologist, so advising startups, evaluating technology solutions, or speaking about technology are all options, too.

I think it will be interesting to see how the market supports these cases. If someone buys my time to get me to do something humiliating, illegal or unethical, and I refuse to do it, will that influence the token’s price on the market? What if I do a great job? How will it change how people pay me otherwise?

I’ve never created a contract for Ethereum before. I’m still trying to figure out how it works — it’s kind of a mysterious platform, and there seems to be a lot of magic. But here are the rough requirements of what I want to do.

Note that I imagine tokens I’m calling coins that can move from one account to another. I’m labeling accounts with names like ACCOUNT although I know they’ll be more complicated than that. I expect that there will be some initial accounts that are part of the system, and other accounts that will be created by me or other users over time.

Note also that this design is kind of complicated. Another way to do it is just have a big initial coin offering for all available coins, and then redeem them as people see fit. The problem I see there is that I don’t think there’s much confidence on people’s part to buy a coin at my current consulting rate, say, and I don’t think I’d like to work for $0.10/hour for the rest of my life. By having more controlled offerings, I can show previous value, and keep the price matched to my own expectations of my time’s worth.

  1. “Pre-mine” an initial pool of 403236 coins. I’ll be 49 years old in October 2017, and various estimates I’ve seen on the Web put my expected lifespan at a maximum of about 95 years.
    (95 – 49) years x 365.25 days/year x 24 hours/day = 403236 hours.That’s a good maximum number of hours I have left. No guarantee I’m going to live to 95, so it’s pretty likely that a lot of those hours will never be redeemable.I’d like to keep these coins in an initial account called RESTOFMYLIFE.
  2. Monthly release of coins to a working account. I’d transfer somewhere between 28 x 24 and 31 x 24 coins on the first day of each month from RESTOFMYLIFE to an account called THISMONTH. This will be my working set coins to work with each month. Ideally this is something I can automate, so that it’s part of the contract.
  3. Transfer pre-committed coins. At the beginning of the month, I’d transfer 1/3 of the coins in THISMONTH to an account called SLEEP. Another 1/3 would go to my full-time job, FUZZYAI. That leaves me with about 1/3 of the coins left to offer for sale. Since these commitments might change, I’d like to leave this a manual process.
  4. Offer coins for sale. Based on my expectations for that month, I’d transfer some number of coins from THISMONTH to FORSALE. So, if I think I’m going to have about 5 hours a week to offer for use, I’d move 20 coins into the FORSALE account. Buyers would be able to purchase coins from the FORSALE account using Ether. I’d like to be able to change the price each month, based on market prices, previous sales, or how much I think I can get.
    Buyers should be able to create new Evancoin accounts and transfer their purchased coins to those accounts. They should be able to keep those coins for as long as they want, and transfer to them to others as they wish.
    (Note that there’s a tricky part here. Some buyers will hold onto coins or trade them. I’d like coin holders to be able to redeem coins months or years after they were bought. But there may be more coins outstanding than I have free hours that month. I think that this will have an interesting effect on the coin’s price — there is a different value to a coin you have to wait 18 months to redeem versus one that can be redeemed immediately. I’m not sure how this is going to shake out.)
    I’d like the processing of moving coins from THISMONTH to FORSALE to be manual, but that it could be automated for people to buy anything in FORSALE.
  5. Accept coins for work. The last step is that there should be a fixed account, WORK, where people can exchange coins for my time. I expect that we’ll need to negotiate this transfer, but ideally it should be automated, without my direct interaction. It would be cool if each transaction was labeled with the work that was being done and for whom. It would be cooler if I was the only person who could read those labels.
  6. Make grants. I donate my time to Open Source projects and standards efforts as well as other civic pursuits. It may be worthwhile for me to set up accounts to track these grants, like W3C and PUMPIO. I’d transfer coins to those accounts directly from THISMONTH, probably at the beginning of the month, too.
    People ask for my time as an advisor or volunteer for other projects. I might set up accounts for them to manage. If they want to, they could sell my coins on the market, just like any other coins in this system. Maybe those dollars are worth more to you than my time at some point.
  7. Flush temporal accounts at the end of the month. At the end of the month, anything in THISMONTH, SLEEP, and FORSALE is invalidated and goes into oblivion. (My full-time job should probably transfer coins for work I’ve done during the month to WORK. They might want to hold some back and sell it on the market, though!) Ideally these flushed coins would just disappear; another option is to have an account called THEPAST that can be transferred into but not out of.

I think that should just about do it. My next steps are to set up a Github repository to work on this contract, and hopefully get it deployed by Oct 1, 2017.