The first time I read the Bancor white paper I felt that the concept of price discovery for smart tokens was a very important tool to create community currencies. There has always been a need for a simple solution to the price discovery problem for illiquid assets in crypto. It had occurred to me previously that perhaps a smart contract could facilitate the other side of a trade. Normally a small community currency would be illiquid on an exchange. This solution would provide a community currency with desperately needed liquidity. The problem with providing community currencies liquidity is that its difficult to figure out what the price for a community currency is if no one is trading it. The solution of finding an automated way whereby price is determined is a remarkable discovery.
I immediately though that their insight could be useful for solving some of the incentive problems I was having when creating peer to peer architecture. After playing around with the protocol a bit I am starting to feel like it can provide a much stronger guarantee for tokens sold in an ICO. In this example let’s look at how it might work for crowdfunding.
What if rather than using Kickstarter a project decides instead to use a token sale mechanism where Bancor provides liquidity through a smart contract? Let’s say a developer wants to produce a new video game and their budget is 3.5 million dollars. They want to provide their fans with some minimal guarantees so they issue tokens when raising funds through a crowdsale. These tokens are a digital currency which can later be redeemed for a completed game or they can be traded for Ether.
If they use Kickstarter then backers have no way of getting a promise from the developers that they can get a refund if something goes bad. But with bancor a community currency can be used to provide some minimal guarantees to backers. The Bancor solution is called a smart token.
A smart token holds a balance of least one other reserve token (such as) Ether. Smart tokens are issued when purchased and destroyed when liquidated, therefore it is always possible to purchase a smart token with its reserve token, as well as to liquidate a smart token to its reserve token, at the current price.
The formula Bancor uses to determine the price of these tokens is the following:
Balance = Reserve Ether locked into the contract
Supply = Tokens locked into the contract
CRR = Constant Reserve Ratio. “The CRR is set by the smart token creator, for each reserve token, and used in price calculation” This is the ratio between the Ether reserve and the tokens which are locked in the contract at the time of its creation.
To see how the mechanics of this formula works we need a few basic examples to understand what happens when the following occurs:
- Selling a token to a Bancor contract in exchange for a reserve currency.
- Selling reserve currency to a Bancor contract in exchange for a token.
The below example assumes the price of Ether is 300 dollars and a game costs 42 dollars. The developers decide they want to issue 4 million dollars worth of game credits (GC). To keep things simple 1 GC = 1 ETH. When a backer pays a pledge of 40 dollars they are issued 0.14 GC. When the game is released they can then redeem these 0.14 GC credits as a voucher to obtain a digital download of the game. If some backers decide however that they don’t want to own a copy of the game anymore prior to its release they can always cash out their 0.14 GC to 0.14 ETH using the Bancor smart token contract.
The developers crowdfunding was a great success. 96,500 backers support the project and they raise 4.05 million dollars which in today's prices is equivalent to 13500 ETH (@ $300 an ETH). Now they issue 0.14 GC to each of their 96,500 backers. In total 27,000 GCs are created and 13,500 GCs are issued to backers and 13,500 GCs are reserved for the Bancor contract. The developers then use 10% of the funds raised ($405,000) to purchase 1350 ETH. That 1350 ETH will be used to collateralize the Bancor contract at a 10% CRR. The other 90% of those funds (3.6 million) they use to build the video game. To simplify things this can be summarized as:
4 million = total raised in the crowdsale
13,500 GCs = issued to backers
13,500 GCs = to be deposited into the Bancor contract as the Supply
3.6 millon = used for game development costs
400,000 = used to purchase 1350 ETH
1350 ETH = to be deposited into the Bancor contract as the Balance
At a 10% ratio the contract would calculate the price of 1 GC the following way:
If prior to launch 100 people decide that they don’t want the game anymore they can just sell their 0.14 GC in which case that would affect the price this way:
So those 100 people received almost 100% of their money back and they only pushed down the price a little bit. If after this happens 1000 people get excited about the game and then discover they can still purchase game credits the same way other crowdsale participants did it would affect the price this way:
So the price of the game has been pushed up by 10%. At this point some people may feel like they’ve made a profit and might decide to sell. If 1121 people decide to sell their .14 GC then a total of 157 ETH would leave the contract and 157 GC would also be destroyed which would look like this:
And this would continue back and forth with Game Credits being destroyed with each transaction but never created. Now that we understand the basic concept lets take a look at a few different scenarios branching off from the above state of the contract
The project is a failure
Its a very sad day when the developers are forced to share with their backers that there will be no delivery of the game. The good news is that there is some funds available for a partial refund. The bad news is that not everyone will receive a full refund and refunds are on a first come first serve basis. The developers have taken the remaining 792,000 dollars (22% of 3.6 million raised) and converted it to 2,640 Ether. Before their announcement they used it to increase both the Ether reserve balance and the CRR (now 30%).
News quickly spreads and within a few hours 50% of people have attempted to cash out. 6,500 GC have been sent to the smart contract but how far has the price fallen and how much ETH is remaining? There isn’t 6,500 ETH available in the contract. Up till this point I have been cheating for the sake of simplicity. Now however we can’t cheat because the formula we have been using isn’t even going to give us an approximate value because it cannot take account of transaction size.
The formula (described previously) calculates the current price, however, when a purchase or liquidation is executed, the effective price is calculated as a function of the transaction size. The calculation can be described as if every transaction is broken up into infinitely small increments.
The refund the 46,428th backer received can be calculated using this formula
In excel that looks something like this. I gave up trying to make it look pretty. Now you know why I was cheating up till now. If you don’t like it sorry.
The answer is 0.029 ETH is refunded when 0.14 GC are sent to the contract. This is 20% of a full refund and considering that the developers had spent 78% of their funds and had only returned the remaining 22% that means that this formula works pretty well. But lets be honest it isn’t fair. The last person gets less than 1% and the first person who attempted a refund received almost 100%.
I can’t even imagine what a customer service nightmare partial refunds would be like without Bancor. All I can say is that some refund is better than no refund. Enough gloom and doom now lets see the brighter side.
The project is an incredible success
Yes go team! So now people start redeeming their tokens directly with the developers. When 0.14 GC is received (by developers not the Bancor contract) then backers get a download link for the game. But wait there’s more! The developers have signed a deal and now the game is being sold on Steam and thousands of people are downloading the game every day and are paying $40 to the company. It gets even better! The developers are telling their fans that 100% of the profits belong to the community. Needless to say the backers feel speechless that a development team would be so generous.
But how exactly does the community benefit? What do the mechanics look like? Every month the developers are taking their profits from Steam and converting them to Ether and increasing the reserve balance and the CRR. Rather than redeeming their 0.14 GC some backers decide to pay $40 for the game and hold onto the currency. As we are about to see this is a good idea.
After the first month 1.2 million in sales on Steam is converted to 4000 Ether and added into the contract. This is what it would look like:
Well it didn’t do anything to the price but it did increase the reserves. There needs to be a lot more sales. After the second month however there is 3 million in sales on Steam and the developers have 10,000 Ether to add to the contract but they don’t increase the CRR past 100%
So now the contract is beyond 100% collateralization and the Game Credits are worth more than what the community paid for them. Such a scenario may seem unrealistic but I use it to illustrate how flexible the concept of a smart token contract is.
Criticism about Bancor that I believe is flawed
I read some of Hacking Distributed’s analysis and some of Eyal Hertzog’s response. If you are reading this then you obviously are interested in Bancor and should go read those articles. Definitely the tone of their article was a bit harsh. Logically there were also a few points about Hacking Distributed’s analysis I found to be flawed, but I will point out things for which I believe the answer is obvious:
“The Bancor strategy fails to capitalize on excess value”
“If it’s going down, then Bancor will bleed its reserves to keep the price close to the higher point that the price used to be at.”
A few people much smarter than me have weighted in on why this argument doesn’t work. But unfortunately I am too dumb to understand their explanation :). The more obvious solution to me is taken directly from the white paper
A token changer’s creator may set a conversion fee that would apply on each purchase/liquidation. Fees can be accumulated in the reserves and thus increase the smart token’s price with every token conversion taking place, increasing the smart token’s value
This is stupid simple. If the balance of the reserve currency falls more than 10% in a 24 hour period then increase fees to 5%. If the balance of a reserve currency falls more than 20% in a 24 hour period then increase fees to 10%. Keep increasing fees until people stop selling. That will surely cause people to think twice before they react to a price drop on exchanges. I like how this dynamic directs the benefit of the fees right back to token holders.
What I still don’t understand about Bancor
I still am not sold on why you would want to use BNT rather than ETH as your reserve currency. People are trying to get ETH so they can cash out and buy something on Amazon. I read their explanation about how more currencies using BNT as their reserve will make the value of BNT go up. I’m not sold on that idea. ETH seems to be primed to go up in value just fine thanks. As a developer why should I gamble for my users on which one will go up more? My users just want a way to get cash without moving through multiple currencies to exit the system. They need to better make their case I think.
Why I think Bancor is important
I want to use Bancor for my projects. Community currencies create powerful incentives that can reward honest participation and punish dishonest participation. But only if these currencies have adequate liquidity. Without liquidity incentives don’t work. Just consider all those frequent flyer miles you earned but could never give away or use before they expired. Experiences like that caused me to hate the leading airline in my city more. Their rewards program actually became a disincentive for me when I considered which airline to fly with.
Community currencies that are earned can convey how much reputation an individual has within a community. The individuals with the most reputation can then be given functions which govern the value of the currency. Good governance can result in the right incentives which reward positive actions which build up the community and help it to grow.
Smart Tokens are actually a really important idea and they could eliminate all the things I dislike about ICOs. In the success condition given above it could also allow people to better understand the relationship between increased profits and increased token value. Right now the valuation of tokens honestly makes no logical sense. I cannot understand the rhyme or reason why a project token has the value that it does. I don’t think that this type of chaos can last forever.
I have some ideas and I really hope that I can collaborate with many people in the coming weeks to build new, innovative and interesting projects. If you want to work with me on either of the following projects please let me know:
- Sneaker Authentication Marketplace (SAM) = a marketplace where experts can issue certificates which guarantees a sneakers authenticity. Think decentralized GOAT
- Unity = Unity uses Bancor as a fractional reserve token to create insurance policies.