Allowlisting
Overview and Motivation
Section titled “Overview and Motivation”Small companies often have statutory transfer restrictions in place. As they grow, they typically tend to remove these restrictions and abandon them entirely once they are publicly traded.
This allowlist implementation is designed to flexibly and efficiently accompany a company on this journey. It supports having freely transferable tokens and transfer-restricted tokens in parallel, enabling an incremental path from a completely controlled state to freely transferable tokens with a gradually increasing free float. If necessary, the process can also be reverted.
Address Types
Section titled “Address Types”There are four types of addresses:
- Free — Can send to Free, Allowed, and Admin addresses, but can only receive from other Free addresses. This is the default for new addresses.
- Allowed — Can receive tokens from anyone, but can only send to Allowed or Admin addresses.
- Admin — Like Allowed, but implicitly converts target addresses into Allowed addresses, so they can de facto transfer to anyone. If newly minted tokens should be transfer-restricted by default, the null address can be set as Admin, converting all new recipients to Allowed status during minting automatically.
- Restricted — Cannot send or receive tokens from anyone, except that they can transfer tokens to Admin addresses.
Transfer Rules
Section titled “Transfer Rules”The table below summarizes the implemented ruleset. Rows represent the sender (“from”), columns represent the receiver (“to”).
| Free | Allowed | Restricted | Admin | |
|---|---|---|---|---|
| Free | Y | N | N | Y |
| Allowed | Y | Y | N | Y |
| Restricted | N | N | N | N |
| Admin | Y | Y | Y | Y |
Token Types
Section titled “Token Types”The token type is not stored explicitly but implied by the address it resides on. A free-float token becomes a restricted token if sent to an Allowed address.
Limited Free Float
Section titled “Limited Free Float”Starting with all shares being restricted, a company can set selected addresses to the Free type, making the tokens on those addresses freely transferable — at least until they are transferred to an Allowed address again.
For example, a company could declare all its treasury shares as free float and then start selling them, while keeping transfer restrictions for existing shareholders in place.
- The contract has no default constructor. Therefore, the
0x0address is Free by default and all mints are freely transferable. - To make tokens restricted by default, set the
0x0address to Admin. This automatically converts recipients to Allowed status. - If the
0x0address is given Admin status while free-float tokens are already in circulation, those tokens will not automatically become transfer-restricted. The issuer must explicitly convert existing holders to Allowed. - To make tokens freely transferable again, simply remove the Admin status from the
0x0address. - Additional addresses (e.g. the issuer multisig) can be made Admin to distribute shares with transfer restrictions.
- Use Restricted for entirely blocked tokens, such as in cases of theft or loss.