ESOP
legal and smart contracts framework to implement Employee Stock Options Plan
Install / Use
/learn @Neufund/ESOPREADME
Smart contracts and legal wrapper for implementing Employee Stock Options Plan
There is a lot of stuff below on what ESOP is, how vesting works etc. If you are just interested in smart contract info go here, for info on testing and deployment go here. For the reasoning behind this idea, read this Medium post.
What is ESOP and why we do it?
ESOP stands for Employees Stock Options Plan. Many companies decide to allow employees to participate in company's long-term upside by offering them stock. Stock is typically available in form of options (mostly due to tax reasons) that are converted directly into cash when company has an IPO or gets acquired. There is a lot of interesting reasoning behind various ESOP structures and discussion when it works and when not. Here is a nice introduction: https://www.accion.org/sites/default/files/Accion%20Venture%20Lab%20-%20ESOP%20Best%20Practices.pdf
Neufund eats its own food and offers employees ESOP via a smart contract where options are represented as Ethereum tokens. Employees are still provided with ESOP terms in readable English (we call it ESOP Terms & Conditions Document) which is generated from before mentioned smart contract. Such construct replaces paper agreement employee signs and adds many interesting things on top.
- Process of assigning options, vesting and converting are immutable and transparent (including rules on changing rules). Trustless trust is to large degree provided.
- It is enforceable in off-chain court like standard paper agreement, however as smart contracts are self-enforcing a need for legal action should be negligible.
- Typical criticism of ESOP is that you need to wait till the exit or IPO to get your shares and money. This is too long for being a real incentive. This is not the case with tokenized options. Use of Ethereum token extends opportunities to profit from options. For example you can convert them into ERC20 compliant tokens when company is doing its ICO or make options directly trade-able (via migration mechanism described later).
- Smart contracts are self-enforcing and do all calculations and bookkeeping. They are very cheap once written and tested. ESOP d-app UI (https://github.com/Neufund/ESOP-ui) is easy to deploy with minimal maintenance costs.
ESOP Algorithm
ESOP Roles and Lifecycles
There are two main roles in ESOP project:
companywhich represents the company management. Transactions signed by this role are deemed to be executed by Neufund (in case of our ESOP deployment).employeewhich corresponds to employee receiving and exercising options.
Employee life within ESOP starts when company offers him/her options. Employee should sign the offer within provided deadline. This starts his/her employment period (counted from so called issue date) If employee leaves company then he goes to terminated state which also stops the vesting. Employee may be also fired in which case s/he is removed from contract. Finally when exit/ICO etc. happens, conversion offer is made by company to employee which when accepted puts employee in converted state.
The states in the contract are:
WaitingForSignature: The employee needs to sign the ESOP contract.Employed: The company and employee have and agreement. This is the main state for the duration of employment.Terminated: The employee leaves the company or is fired. The contract distinguishes two types of terminating events: a.Regular: The employee leaves, but keeps options subject to fade-out. (More about this later.) b.BadLeaver: The employee leaves without any rights to options.OptionsExercised: When the company decides, options can be converted. When the employee has done this s/he goes into this final state.
ESOP itself has simple lifecycle. When deployed, it is in new state. It changes to open by providing configuration parameters by company role. At that point all actions involving employees may happen. When there is conversion event like exit, company will switch ESOP into conversion state in which options may be exercised by employees.
Assigning new options
Options are assigned to employees in two ways:
pool options: There is a pool of 1 000 000 options of which employee 1 gets 10% which is 100 000. Employee 2 gets 10% of what remains in the pool (that is 900 000 options) which equals 90 000 and so on and so on.extra options: Additional options allocated at discretion of the company.
The pool options allocates more to employees that came to work for us earlier, this is our preferred method for rewarding the risk taken. Both methods can be combined, then pool options + extra options == issued options
Employee's options over time
Employee will not get all his/her options at the moment they are issued (however you can configure our smart contract to act in such way). Smart contract will release options up to all issued options with an algorithm called vesting.
As you can see there is a period of time called cliff period during which employee does not get any options. In the example it is one year, but it is configurable and can be set to zero.
Then during the vesting period (period configurable, also may be 0), number of options increases up until issued options. In case of exit, IPO, ICO etc. additional bonus options (for example 20%, configurable) are added on top of issued options.
Please note that if exit, ICO etc. happens before vesting period is over, employee gets all issued options + bonus (we call this case accelerated vesting).
What happens when employee stops working for a company?
Sometimes people leave and ESOP smart contract handles that as well.
- Company may remove employee from ESOP smart contract and cancel all his/her options. This is called
bad leaver eventin ESOP Terms & Conditions Document and may happen when for example employee breaks the law and needs to be fired. As you can expect such event cannot be defined in smart contract (there's no proper oracle yet in court system ;>) so this definition remains in Terms document. - Employee may just leave company and go working somewhere else. This case is more complicated.
As you can see, vesting stops at the moment employee stops working at the company and all vested options are issued to employee. From that time amount of vested optionsis slowly decreasing down toresidual amountsometimes calledfloor. Such process is calledfadeoutand fadeout period equals period of time employee worked at company. Smart contract may be configured for full fadeout and to not do any fadeout at all.
Terminated employee has no rights to accelerated vesting and no rights to bonus options.
What is options conversion?
Here is the most interesting thing about ESOP smart contract. At some point in time (called conversion event), if company is successful it gets acquired or does an IPO and shareholders make a lot of money. This is what happens classically and we fully support it. We, however, extend this definition to any ICO, tokenization event or even further by allowing direct trade of vested options.
As you could expect there is no oracle for conversion events so those are defined in ESOP Terms & Conditions Document (see chapter 3). When such event happens employee may convert his/her options into shares, tokens or directly into EUR/ETH/BTC according to a Options Conversion Smart Contract (we have a few examples later) which will be provided by company when conversion event happens.
Procedures and Security
Here's how Neufund handles security when issuing options.
- All our employees get basic training in blockchain and security. We've published our training material here. May be pretty useful!
- All our employees get Nano Ledger and store their private keys in hardware wallets. We encourage employees to store their backup codes in some safe place (like at notary).
- Backup codes of Neufund admin's Nano Ledger which is used to deploy smart contract and company management Nano Ledger are kept in a safe at notary office.
- Options are offered via subscription forms implemented as d-app where we enforce usage of Nano Ledger for our employees (however, we support Metamask and other web3 providers).
Also it is clear for everyone that if you loose your private key you will loose all your options.
Smart Contracts
ESOP contract
ESOP smart contracts handles employees' lifecycle, manages options' pool and handles conversion offer via calling provided implementation of options conversion contracts. Implementation is pretty straightforward and functions more or less correspond to provisions in ESOP Terms & Conditions Document. Terminology is also preserved.
All non-const functions return "logic" errors via return codes and can throw only in case of generic problems like no permission to call a function or invalid state of smart contracts. Return codes correspond to ReturnCode event, in case of OK return code, specific event is logged (like EmployeeSignedToESOP). I hope revert opcode gets implemented soon!
ESOP aggregates the following contracts:
OptionsCalculatorwhich handles all options calculations like computing vesting, fadeout etc. and after configuring provides just a set of public constant methods.EmployeesListthat contains iterable mapping of employees. Please note thatESOPis the sole writer toEmployeesListinstance.
ESOP inherits from following contracts (I skip some obvious things like Ownable)
TimeSourceprovides unified time source for all smart contracts in this project. It allow
