Open arthur-clara opened 4 weeks ago
@arthur-clara, @sachin-shrestha and @JSv4 to discuss.
I think the description of the vesting schedule in this example should be "50% of the total number of shares shall vest on the two-month anniversary of this Agreement the vesting start date, and an additional 1/4th of the total number of Shares shall then vest on the corresponding day of each month thereafter, until all of the Shares have been released on the fourth four-month anniversary of this Agreement the vesting start date"
Description of Enhancement :
Update the schema of the
vesting_conditions
object to include a variable calledcliff_condition
which references anothervesting_condition
and add an additional value to thetrigger.type
variable calledCLIFF_CONDITION
Why is this Needed?
The current implementation of
vesting_conditions
is based on a linear branched flow through thenext_condition_ids
array. In the example below you would resolve the vesting start date condition then move to the cliff condition and then to the recurring vesting period condition. The problem emerges when we try to generate an actual vesting schedule from this process and determine the quantity of shares for each vesting period.Using our classic example of 18 shares over four months, what is the number of shares that would be given at a 2 month cliff? Is it 9 shares or is it 8 shares or is it 10 shares? All three are possible depending on the allocation type. If
allocation_type
isCUMULATIVE_ROUNDING
orCUMULATIVE_ROUNDDOWN
the cliff quantity would be 9 shares. Ifallocation_type
isBACK_LOADED
orBACK_LOADED_TO_SINGLE_TRANCHE
, it would be 8 shares. Ifallocation_type
isFRONT_LOADED
orFRONT_LOADED_TO_SINGLE_TRANCHE
, it would be 10 shares.With the current implementation, you need to skip over the
cliff_condition
and calculate themonthly_vesting_condition
first and then know to go back to thecliff_condition
and apply it. There is no way I can see that a system would be able to do this because there is nothing specifically signposting thecliff_condition
as the cliff of themonthly_vesting_condition
The new proposed implementation is an attempt to solve it.
CURRENT IMPLEMENTATION OF VESTING CONDITIONS
PROPOSED IMPLEMENTATION
Essentially, we want to be able to signpost conditions as cliffs related to specific relative vesting conditions. The following implementation would provide systems the ability to track and calculate cliffs. Here is the above example vesting terms in the proposed implementation.
In this implementation, we point from the
start_condition
directly to themonthly_vesting_condition
which is used to calculate the vesting period without a cliff as an intermediate step. Themonthly_vesting_condition
has a new optionalcliff_condition
variable which points the system to a cliff condition if required. Thecliff_condition
object has a description of the cliff with its unique type of trigger and the duration of the cliff. The cliff condition would be used to roll up the appropriate vesting periods into a single vesting period with the correct quantity based on theallocation_type
.