Function: createMetavest(metavestType _type, address _grantee, BaseAllocation.Allocation _allocation, BaseAllocation.Milestone[] _milestones, uint256 _exercisePrice, address _paymentToken, uint256 _shortStopDuration, uint256 _longStopDate)
This function is used to create a new allocation contract.
Inputs
_typeControl: Arbitrary.
Constraints: Should be one of the metavest types.
Impact: Type of metavest to create.
_granteeControl: Arbitrary.
Constraints: None.
Impact: Address of the grantee.
_allocationControl: Arbitrary.
Constraints: None.
Impact: Struct of the allocation including
Allocationfields:tokenStreamTotal,vestingCliffCredit,unlockingCliffCredit,vestingRate,vestingStartTime,unlockRate,unlockStartTime, andtokenContract.
_milestonesControl: Arbitrary.
Constraints: None.
Impact: Array of
Milestone. Struct of the milestone includingmilestoneAward,unlockOnCompletion,complete, and an array ofconditionContractsaddresses.
_exercisePriceControl: Arbitrary.
Constraints: None.
Impact: Value of exercise price.
_paymentTokenControl: Arbitrary.
Constraints: None.
Impact: Address of payment token.
_shortStopDurationControl: Arbitrary.
Constraints: None.
Impact: Value of short stop duration.
_longStopDateControl: Arbitrary.
Constraints: None.
Impact: Value of long stop date.
Branches and code coverage
Intended branches
Call the corresponding allocation-creation function based on the
_type.
Negative behavior
Revert if the caller is not the authority.
Revert if not all the conditions about this function signature are met.
Revert if the metavest type is not valid.
Function call analysis
this.createVestingAllocation(_grantee, _allocation, _milestones) -> this.validateTokenApprovalAndBalance(_allocation.tokenContract, _total) -> IERC20M(tokenContract).allowance(this.authority, address(this))What is controllable?
_grantee,_allocation,_milestones, and_allocation.tokenContract.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createVestingAllocation(_grantee, _allocation, _milestones) -> this.validateTokenApprovalAndBalance(_allocation.tokenContract, _total) -> IERC20M(tokenContract).balanceOf(this.authority)What is controllable?
_grantee,_allocation,_milestones, and_allocation.tokenContract.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createVestingAllocation(_grantee, _allocation, _milestones) -> IAllocationFactory(this.vestingFactory).createAllocation(AllocationType.Vesting, _grantee, address(this), _allocation, _milestones, address(0), 0, 0)What is controllable?
_grantee,_allocation, and_milestones.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createVestingAllocation(_grantee, _allocation, _milestones) -> this.safeTransferFrom(_allocation.tokenContract, this.authority, vestingAllocation, _total)What is controllable?
_grantee,_allocation,_milestones, and_allocation.tokenContract.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createTokenOptionAllocation(_grantee, _exercisePrice, _paymentToken, _shortStopDuration, _allocation, _milestones) -> this.createAndInitializeTokenOptionAllocation(_grantee, _paymentToken, _exercisePrice, _shortStopDuration, _allocation, _milestones) -> IAllocationFactory(this.tokenOptionFactory).createAllocation(AllocationType.TokenOption, _grantee, address(this), _allocation, _milestones, _paymentToken, _exercisePrice, _shortStopDuration)What is controllable?
_grantee,_exercisePrice,_paymentToken,_shortStopDuration,_allocation, and_milestones.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createTokenOptionAllocation(_grantee, _exercisePrice, _paymentToken, _shortStopDuration, _allocation, _milestones) -> this.safeTransferFrom(_allocation.tokenContract, this.authority, tokenOptionAllocation, _total)What is controllable?
_grantee,_exercisePrice,_paymentToken,_shortStopDuration,_allocation,_milestones, and_allocation.tokenContract.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createRestrictedTokenAward(_grantee, _exercisePrice, _paymentToken, _shortStopDuration, _allocation, _milestones) -> this.createAndInitializeRestrictedTokenAward(_grantee, _paymentToken, _repurchasePrice, _shortStopDuration, _allocation, _milestones) -> IAllocationFactory(this.restrictedTokenFactory).createAllocation(AllocationType.RestrictedToken, _grantee, address(this), _allocation, _milestones, _paymentToken, _repurchasePrice, _shortStopDuration)What is controllable?
_grantee,_exercisePrice,_paymentToken,_shortStopDuration,_allocation, and_milestones.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.
this.createRestrictedTokenAward(_grantee, _exercisePrice, _paymentToken, _shortStopDuration, _allocation, _milestones) -> this.safeTransferFrom(_allocation.tokenContract, this.authority, restrictedTokenAward, _total)What is controllable?
_grantee,_exercisePrice,_paymentToken,_shortStopDuration,_allocation,_milestones, and_allocation.tokenContract.If the return value is controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters or does other unusual control flow? N/A.