You don’t have to be a seasoned Ethereum enthusiast to know there’s a lot of buzz around ICO’s in the space, for better or worse. We are currently seeing a shift in traditional Venture Capitalist backed startups around Silicon Valley to crowdfunded tech startups all over the world, where even the tiniest investor can get some of the pie.
Of course this rapid shift is causing some new growing pains, very popular and large ICO’s are now putting a strain on the Ethereum network and getting sold out in minutes. This inevitably causes frustration for those failing to get in on the ICO due to the rush and for those regular users on the clogged network who suffer the burden of this influx of transactions.
The same old garden path
Over the past few weeks, I’ve read numerous proposed solutions to this new ICO mania which have been inspiring. While I think it’s entirely up to the individuals whether or not they invest, there must be a better way for the ICO’s to roll out, or even be proportioned better so that even the little guy can indeed, get his piece of the pie.
While starting on the contracts for the Rocket Pool crowdfund and presale, I started down the traditional garden path of first come, first served. After much thought though, I decided to take a different approach, even if it meant spending longer on them than I was anticipating. So I began asking myself, what extra tools could a developer or team need to ensure their ICO is rolled out in a fair and measured manner?
That extra time bore fruit in the way of the Sale Agent contract.
Introducing the ERC20 Sale Agent
Progressive crowdsales? quarterly crowdsales? crowdsales that combine first come, first serve and proportional distribution models? multiple crowdsales for the same token at the same time to different participants with no effect on the network?? If your jaw is still on the ground from that last one, lets pick it up and introduce you to a new contract called the Sale Agent.
The Sale Agent is a new type of contract that can authorise the minting of tokens on behalf of the traditional ERC20 token contract. This allows you to distribute your ICO tokens through multiple Sale Agents, at various times, of various token quantities and of varying fund targets. Once you’ve written a new Sale Agent contract, you can register him with the main ERC20 token contract, he’s then permitted to sell its tokens on your behalf using guidelines such as the amount of tokens he’s allowed to sell, the maximum ether he’s allowed to raise, the start block and end blocks he’s allowed to sell between and more.
Hmmm tell me more!
There’s a lot of various sale models possible with Sale Agents, but a few that quickly come to mind are are...
The Progressive Crowdsale
For a more traditional style of raising funds, you could deploy 12 Sale Agents that could sell 1/12 of the total tokens available in the ICO each month over the course of a year. Prospective buyers could view the progress of the dev team and buy more or less each month depending on the projects progress. Or if the dev team is feeling confident, they could just deploy 1 agent every month as time goes on, that agent could be set to sell a varying amount of tokens at a certain value each month until all tokens are sold.
It’s entirely possible with Sale Agents to have multiple crowdsales running at the same time using just the one token. Some instances where this would be handy would be to allow various parties access to your tokens at varying rates, you could essentially sell some tokens at a discount to one group and another group at the regular price… at the same time. Of course if you were to do this, I’d use the proportional distribution method described below to avoid any adverse effects on the network.
Flexible Crowdsale Models
Each Smart Agent is just like a person, each can have their own way of selling their tokens. Smart Agents can be written to allow the developers to collect their reserved tokens for development purposes. They can also be written to distribute tokens to reserved addresses such as what occurs in a presale and they can even distribute tokens using the proportional distribution method that avoids the ‘rush’ associated with current ICOs by allocating tokens based on the amount of ether deposited over time, rather than selling to whomever gets there first. The Rocket Pool crowdsale repo currently features these 3 types of Sale Agent contracts if you wish to see them.
The Smart Agent system can be inherited onto any standard ERC20 token contract and allows for a multitude of various ICO rollouts, both in timings and token distribution systems. It is currently built for the Rocket Pool future ICO and will be built out into a much more abstract version for easy use with any new ERC20 token once the code audits are completed and if the community expresses interest for such a system.
At the moment you can find the ERC20 token with Sale Agent compatibility in the Rocket Pool crowdsale repo. If the community likes this approach, I’d happily build it out into a more abstract contract that can be inherited by traditional ERC20 token contracts with little to no modification needed. This would then allow them to write their own sales agent contracts that can plug right into it. Currently it’s based around a fixed supply token, but it would not be hard to allow a variable token supply model as well. The code has been thoroughly unit tested but is also due for additional 3rd party auditing soon.
Also thanks to Nick Johnson from the EF for providing feedback on the concept which allowed some fine tuning. If you’ve made it this far, thank you for taking the time to read :)