Everyone heard about ICO – the system, where people invest money in companies in exchange for their custom tokens. ICOs are usually transparent only from one side. You know the rules for buying the tokens and you can be sure what you will get for your money – thanks to the smart contracts on ethereum network. But what happens with your money afterward? With classic ICO models, even with the best of them, control over your funds ends as soon as you send them while ICO owners gain full control. That means ICO beneficiaries are making decisions by themselves – unlike traditional shares, where every investor have a voting power.
What is blocking us from implementing the same system in the world of ethereum smart contracts and tokens? Actually, nothing. The voting itself has been implemented within smart contracts years ago and is widely used in so-called DAOs – decentralised autonomous organisations, giving the power to vote to any member of the organisation. Ethereum creator Vitalik Buterin recently proposed to give ICO investors voting power. Core idea is to allow an investor to vote how much funds should ICO beneficiaries have access to. This would allow ICO investors to decrease the amount of available funds if they aren’t satisfied with teams work or even completely liquidate the DAO.
We’ve implemented a simple version of one. As a basis for ICO were chosen widely known TokenMarketNet contracts, which are de facto the standards for ICO and passed through several security audits. These ICO contracts itself are fine. But they are not giving the control over invested funds to investors: by default, all ether sent by participants is redirected to ICO beneficiary wallet.
The easiest way to convert this to DAICO is to replace beneficiary wallet with ether vault and give all the control over the vault to investor’s quorum. It will require minimal changes in existing code and could be considered as an add-on to TokenMarketNet smart contracts set.So, what we are going to achieve? First all the collected ether needs to be locked in the vault, and no one should be able to access it directly. Next, we want to give token owners (including ICO owner) an opportunity to create withdrawal proposals with a clarification why the amount of ether should be sent and what are the goals to be achieved with the funding approved. To keep things simple, only one ongoing funding proposal at a time will be permitted. And at last, every token owner should have a right to vote, i.e. to participate in decisions about future of the project they are supporting. Here is an example of how we could do this inside a smart contract:
One more function to be supported by the DAICO is refunding, but we will leave it for the next versions. While DAICO mechanism partially solves problems, connected with dishonest or incompetent startup owners, there is a lot of space for improvements. The current model is vulnerable to 51% attack: in case if DAICO owner or some rich investor will own the majority of tokens, he or she will also own the majority of votes, so any proposal could be approved by one person, even obviously fraudulent one. In the real world, the attacker doesn’t have to own the absolute majority – even 10% or less could be enough if other investors will not be aware of the ongoing attack and thus will have no opportunity to use their votes to reject attacker’s proposal.
The other danger is a possible decision of investors to perform a liquidate good project if ether locked inside DAICO have a higher value than tokens owned by investors. DAICO resemble parts of tranched investing which have it’s own problems and it can’t protect unqualified investors from the consequences of their own decisions.
DAICO contracts will not be a holy grail wiping out all the problems in still experimental and unstable ICO world, but it is an interesting improvement over existing token sales models, which gave investors and entrepreneurs new opportunities paired with new responsibilities.
The current version of the Hotovo DAICO is live on the ethereum testnet, and could be viewed on etherscan: https://ropsten.etherscan.io/address/0x7f72844c05a338e3a04e79c7d175b3cf18169e4a
If you want to try it out, you have to be a token holder.
You can get some of our tokens by sending an empty ethereum transaction to the token giveaway address: 0x3B54547Eb9beEdD8a772De28731BC9287884350e. Please pay attention to the fact we are using ropsten testnet, and smart contracts and tokens are not accessible from ethereum main network.