-
Notifications
You must be signed in to change notification settings - Fork 42
Description
Description of Enhancement :
Introduce additional trigger types to indicate EARLIER_OF and **LATER_OF relationships.
In addition:
- Add
VESTING_RELATIONSHIP_EARLIER_OFandVESTING_RELATIONSHIP_LATER_OF toEnum - Vesting Trigger Type` - Create a new
Enum - Later of Calculation Typeto provide methods to calculate the amount of vested shares when using a trigger with typeVESTING_RELATIONSHIP_LATER_OF - Remove the assumption that only one sibling node may enter the execution path. The ordering of
next_condition_idsis given priority only when two sibling nodes in an EARLIER_OF Relationship are triggered on the same date.
To reign in complexity and avoid ambiguous relationships, enforce the following constraints:
- If a node references an EARLIER_OF relationship in its
next_condition_idsarray, then any other vesting condition referenced in thenext_condition_idsarray must be a descendant of the EARLIER_OF* relationship. - If a node references a LATER_OF relationship in its
next_condition_idsarray, then thenext_condition_idsarray cannot include any other vesting conditions.
These constraints ensure that:
-
A node cannot directly reference more than one relationship. This ensures that relationships can be evaluated sequentially and that the priority of relationships is determined solely based on where they sit in vesting graph.
-
A node cannot have a direct edge to a relationship and other nodes at the same time. This makes it easier to reason about how relationships will influence the execution path. However, in the case of an EARLIER_OF relationship, the node can point to a descendant of the EARLIER_OF relationship, thereby indicating how the execution path should proceed in the event that the node occurs first. See Two-Tier Vesting example below.
-
Relationships can be nested within other relationships, as shown in the Interdependent Events With Expiration Dates example below.
-
A vesting installment is created only once all relationships applicable to a node have been resolved.
-
An EARLIER_OF relationship selects one of its parent nodes to include in the execution path, thereby enforcing an XOR logical relationship.
-
A LATER_OF relationship creates a vesting installment from its parent nodes, utilizing its calculation_type field to determine the number of shares that vest. All parent nodes must be included in the execution path in order for the LATER_OF relationship to resolve, thereby enforcing an AND logical relationship.
-
See #540 for proposed implementation.
Why is this Needed?
See #540 for rationale and discussion of vesting scenarios.