This module offers capabalities for running a Vesting contract : 1. There are `N` vesting periods. 2. Each vesting period involves `P` tokens. 3. The Provider initially deposits `N * P` tokens into the contract. 4. At the end of each vesting period, `P` tokens are transferred from the Provider account to the Claimer account. 5. During each vesting period, the Provider may cancel the contract, receiving back the *unvested* funds from their account and distributing the *vested* funds to the claimer.

  1. Also during each vesting period, the Claimer may withdraw once any of the funds in their account. The Provider can still cancel the contract during the vesting period after the claimer has withdrawn funds during that vesting period.

  2. When the contract's ultimate timeout is reached, vested and unvested funds are distributed to the Claimer and Provider, respectively.

  3. The Provider may cancel the contract during the first vesting period.

  4. The Provider may not cancel the contract after all funds have been vested.


Without Merkleization, this contract can't be deployed above 3 periods of time without reaching the Plutus constraints when running on chain our Marlowe/Plutus Validators.



Vesting Contract DSL Generation

Vesting Request

Vesting State