The public repository for all smart contracts used by Aktionariat.
There are four notable smart contracts in this repository:
- Our custom Multisignature Contract, providing the basis for corporate accounts with multiple signers.
- The ERC20Claimable Contract, implementing our decentralized claim mechanism for lost tokens.
- The ERC20Draggable Contract, implementing the drag-along clause found in many shareholder agreements.
- The Automaton Contract, providing mechanisms for the selling and repurchasing of shares with automated price adjustments.
Full User Control
Generally, there are two approaches to add functionality to basic ERC20 tokens. A commonly used bad one and the better one we are trying to follow.
The first approach is what we call the "cat-in-the-bag" approach. This is followed by most issuers of non-trivial ERC20 tokens and allows them to arbitrarily change the functionality of the token at a later point in time. Under this approach, the users are only interacting with a thin interface that in the background redirects all request to other smart contracts configurable by the issuer. That way, the issuer can arbitrarily update the contract, freeze tokens or even take them into their possession. This not only goes against the spirit of decentralized finance, but also against the recommendations of the Swiss Blockchain Federation and potentially also against the upcoming legal requirements for security tokens.
We believe in a modular approach in which functionality is added by composition, thereby providing much stronger property rights to the token holders. Under the modular approach, a basic ERC20 token with minimal functionality is issued first. In our case, this base token is reflected by the smart contract simply named Shares. It is designed to (hopefully) last for as long as the Ethereum network exists. New featues are added not by changing the base token, but by wrapping them into tokens with additional functionality. For example, all ServiceHunter AG Shares (SHS) in circulation have been wrapped by Draggable ServiceHunter AG Shares (DSHS) token before selling them. Once the drag-along clause get triggered in an acquisition of if the majority of token holders vote to terminate the shareholder agreement, holders of DSHS token can unwrap them to convert them back to SHS tokens, which then could be wrapped into a new contract representing a new shareholder agreement. Under the modular approach, updates of the functionality of a token require the consent of the token holders, thereby ensuring that they actually possess what they own.
- The ERC20 equity contract Shares is deployed with the desired parameters. This contract supports claims as it inherits from ERC20Claimable. A currency token such as XCHF can be set as a custom collateral. The issuer is the owner of this contract.
- The ERC20 draggable contract DraggableShares is deployed. This contract does not have an owner and could in principle be deployed by anyone. It is controlled by the token holders by majority vote.
- To issue basic shares, the 'mint' function can be calles on the shares contract. Holders can convert base shares at any time into draggable shares by sending them to the draggable contract or calling the 'wrap' function. Alternatively, it is also possible to directly mint wrapped shares with the 'mintAndCall' function, enabling the issuer to mint, wrap and transfer shares directly to the right owner in one transaction.
Companies that choose Aktionariat as tokenization provider get access to a corporate dashboard on which board members can issue multisignature transaction to configure their smart contract. Furthermore, they get access to an electronic shareholder registry that shows which shareholder holds how many shares and that is automatically updated to reflect all blockchain-based token transfers. All personal data is stored in our database and not on the blockchain. In order to become a registered shareholer, token holders must provide their name and address and prove ownership of their tokens, which can be done through a widget on the issuer's website or our app.
This approach reflects how paper certificates are handled, with the paper corresponding to the tokens. Owners of certificated shares are free to hand them over to anyone at any time, but to actually enjoy any shareholder rights, the new owner must register themselves with the company. This enables short-term trading of the token without registration, while at the same time provides a strong incentive for long-term shareholders to actually register themselves in the shareholder registry.
This approach corresponds to the recommendations of the Swiss Blockchain Federation.
As far as we know, we are the only share tokenization service that supports numbered shares. Many Swiss companies number their shares so they can be individually identified. When issuing numbered shares, the 'mintNumbered' function must be used, which lets the smart contract emit a public event to signal the numbers of the newly minted tokens. The numbers are not tracked on-chain, but by our server according to the FIFO (first in, first out) principle and automatically recflected in the shareholder registry.
If you find a new security-relevant bug in our contracts and tell us, we will reward you with 1 Ether. For bugs that could lead to a loss of funds, the bounty is tripled. The bounty can only be claimed for bugs that we are not aware of and that have not been exploited yet. They must be filed directly to firstname.lastname@example.org without opening a publicly visible issue.
All our smart contracts are open-source and can be used under a slightly modified MIT License with Automated License Fee Payments. This means that you are free to use our contracts as long as you do not make any changes to circumvent the built-in license fee payments to our address 0x29Fe8914e76da5cE2d90De98a64d0055f199d06D, if there are any. Note that some of the source code you find in this repository stems from other sources with other licenses. These are marked accordingly.