Skip to content

[Enhancement]: EARLIER_OF and LATER_OF Relationships #542

@MattCantor

Description

@MattCantor

Description of Enhancement :

Introduce additional trigger types to indicate EARLIER_OF and **LATER_OF relationships.

In addition:

  • Add VESTING_RELATIONSHIP_EARLIER_OF and VESTING_RELATIONSHIP_LATER_OF to Enum - Vesting Trigger Type`
  • Create a new Enum - Later of Calculation Type to provide methods to calculate the amount of vested shares when using a trigger with type VESTING_RELATIONSHIP_LATER_OF
  • Remove the assumption that only one sibling node may enter the execution path. The ordering of next_condition_ids is 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:

  1. If a node references an EARLIER_OF relationship in its next_condition_ids array, then any other vesting condition referenced in the next_condition_ids array must be a descendant of the EARLIER_OF* relationship.
  2. If a node references a LATER_OF relationship in its next_condition_ids array, then the next_condition_ids array 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Vesting ModelIssues relating to the vesting life cycleenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions