@@ -34,58 +34,17 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
3434 using EnumerableSet for EnumerableSet.AddressSet;
3535 using EnumerableSet for EnumerableSet.Bytes32Set;
3636
37- /// @dev opinionated time limit for a MetaVesT amendment, one calendar week in seconds
38- uint256 internal constant AMENDMENT_TIME_LIMIT = 604800 ;
39- uint256 internal constant ARRAY_LENGTH_LIMIT = 20 ;
40-
41- ///
42- /// EVENTS
43- ///
44-
45- event MetaVesTController_AmendmentConsentUpdated (bytes4 indexed msgSig , address indexed grantee , bool inFavor );
46- event MetaVesTController_AmendmentProposed (address indexed grant , bytes4 msgSig );
47- event MetaVesTController_AuthorityUpdated (address indexed newAuthority );
48- event MetaVesTController_ConditionUpdated (address indexed condition , bytes4 functionSig );
49- event MetaVesTController_DaoUpdated (address newDao );
50- event MetaVesTController_MajorityAmendmentProposed (string indexed set , bytes4 msgSig , bytes callData , uint256 totalVotingPower );
51- event MetaVesTController_MajorityAmendmentVoted (string indexed set , bytes4 msgSig , address grantee , bool inFavor , uint256 votingPower , uint256 currentVotingPower , uint256 totalVotingPower );
52- event MetaVesTController_SetCreated (string indexed set );
53- event MetaVesTController_SetRemoved (string indexed set );
54- event MetaVesTController_AddressAddedToSet (string set , address indexed grantee );
55- event MetaVesTController_AddressRemovedFromSet (string set , address indexed grantee );
56- event MetaVesTController_DealProposed (
57- bytes32 indexed agreementId ,
58- address indexed grantee ,
59- MetaVestType MetaVestType ,
60- BaseAllocation.Allocation allocation ,
61- BaseAllocation.Milestone[] milestones ,
62- bool hasSecret ,
63- address registry
64- );
65- event MetaVesTController_DealFinalizedAndMetaVestCreated (
66- bytes32 indexed agreementId ,
67- address indexed recipient ,
68- address metavest
69- );
70-
71- error NotRefImplementation ();
72-
7337 ///
7438 /// FUNCTIONS
7539 ///
7640
7741 modifier conditionCheck () {
78- address failedCondition = MetaVesTControllerStorage.conditionCheck (msg .sig );
79- if (failedCondition != address (0 )) {
80- revert MetaVesTControllerStorage.MetaVesTController_ConditionNotSatisfied (failedCondition);
81- }
42+ MetaVesTControllerStorage.conditionCheck (msg .sig );
8243 _;
8344 }
8445
8546 modifier consentCheck (address _grant , bytes calldata _data ) {
86- bytes4 error = MetaVesTControllerStorage.consentCheck (msg .sig , _grant, _data);
87- // This is a hack because libraries cannot emit events nor errors
88- _checkError (error );
47+ MetaVesTControllerStorage.consentCheck (msg .sig , _grant, _data);
8948 _;
9049 }
9150
@@ -135,7 +94,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
13594 if (msg .sender != grantee) revert MetaVesTControllerStorage.MetaVesTController_OnlyGranteeMayCall ();
13695
13796 st.functionToGranteeToAmendmentPending[_msgSig][_grant].inFavor = _inFavor;
138- emit MetaVesTController_AmendmentConsentUpdated (_msgSig, msg .sender , _inFavor);
97+ emit MetaVesTControllerStorage. MetaVesTController_AmendmentConsentUpdated (_msgSig, msg .sender , _inFavor);
13998 }
14099
141100 /// @notice enables the DAO to toggle whether a function requires Condition contract calls (enabling time delays, signature conditions, etc.)
@@ -151,7 +110,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
151110 if (st.functionToConditions[_functionSig][i] == _condition) revert MetaVesTControllerStorage.MetaVestController_DuplicateCondition ();
152111 }
153112 st.functionToConditions[_functionSig].push (_condition);
154- emit MetaVesTController_ConditionUpdated (_condition, _functionSig);
113+ emit MetaVesTControllerStorage. MetaVesTController_ConditionUpdated (_condition, _functionSig);
155114 }
156115
157116 function removeFunctionCondition (address _condition , bytes4 _functionSig ) external onlyDao {
@@ -164,7 +123,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
164123 break ;
165124 }
166125 }
167- emit MetaVesTController_ConditionUpdated (_condition, _functionSig);
126+ emit MetaVesTControllerStorage. MetaVesTController_ConditionUpdated (_condition, _functionSig);
168127 }
169128
170129 // It can be called by anyone but must have DAO's or delegate's signature
@@ -179,13 +138,6 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
179138 bytes32 secretHash ,
180139 uint256 expiry
181140 ) external returns (bytes32 ) {
182- MetaVesTControllerStorage.MetaVesTControllerData storage st = MetaVesTControllerStorage.getStorage ();
183-
184- // Check: verify inputs
185- if (parties[1 ] != dealDraft.grantee) revert MetaVesTControllerStorage.MetaVesTController_GranteeNotDirectParty ();
186- if (partyValues.length < 2 ) revert MetaVesTControllerStorage.MetaVesTController_CounterPartyNotFound ();
187- if (partyValues[1 ].length != partyValues[0 ].length ) revert MetaVesTControllerStorage.MetaVesTController_PartyValuesLengthMismatch ();
188-
189141 MetaVestDeal memory dealProposed = MetaVesTControllerStorage.proposeAndSignDeal (
190142 templateId,
191143 salt,
@@ -198,11 +150,6 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
198150 expiry
199151 );
200152
201- emit MetaVesTController_DealProposed (
202- dealProposed.agreementId, dealProposed.grantee, dealProposed.metavestType, dealProposed.allocation, dealProposed.milestones,
203- secretHash > 0 ,
204- st.registry
205- );
206153 return dealProposed.agreementId;
207154 }
208155
@@ -214,11 +161,8 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
214161 bytes memory signature ,
215162 string memory secret
216163 ) external conditionCheck () returns (address ) {
217- MetaVesTControllerStorage.MetaVesTControllerData storage st = MetaVesTControllerStorage.getStorage ();
218- MetaVestDeal storage deal = MetaVesTControllerStorage.getStorage ().deals[agreementId];
219-
220164 // Interaction: finalize the deal and create metavest contract
221- (address newMetavest , uint256 total , bytes4 error ) = MetaVesTControllerStorage.signDealAndCreateMetavest (
165+ (address newMetavest , uint256 total ) = MetaVesTControllerStorage.signDealAndCreateMetavest (
222166 grantee,
223167 recipient,
224168 agreementId,
@@ -227,12 +171,12 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
227171 secret
228172 );
229173
230- _checkError ( error );
174+ MetaVesTControllerStorage.MetaVesTControllerData storage st = MetaVesTControllerStorage. getStorage ( );
231175
232176 // Interaction: transfer tokens to escrow
233- safeTransferFrom (deal .allocation.tokenContract, st.authority, newMetavest, total);
177+ safeTransferFrom (st.deals[agreementId] .allocation.tokenContract, st.authority, newMetavest, total);
234178
235- emit MetaVesTController_DealFinalizedAndMetaVestCreated (agreementId, recipient, newMetavest);
179+ emit MetaVesTControllerStorage. MetaVesTController_DealFinalizedAndMetaVestCreated (agreementId, recipient, newMetavest);
236180 return newMetavest;
237181 }
238182
@@ -296,7 +240,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
296240
297241 address _tokenContract = BaseAllocation (_grant).getMetavestDetails ().tokenContract;
298242 if (_milestone.milestoneAward == 0 ) revert MetaVesTControllerStorage.MetaVesTController_ZeroAmount ();
299- if (_milestone.conditionContracts.length > ARRAY_LENGTH_LIMIT) revert MetaVesTControllerStorage.MetaVesTController_LengthMismatch ();
243+ if (_milestone.conditionContracts.length > MetaVesTControllerStorage. ARRAY_LENGTH_LIMIT) revert MetaVesTControllerStorage.MetaVesTController_LengthMismatch ();
300244 if (_milestone.complete == true ) revert MetaVesTControllerStorage.MetaVesTController_MilestoneIndexCompletedOrDoesNotExist ();
301245 if (
302246 IERC20M (_tokenContract).allowance (msg .sender , address (this )) < _milestone.milestoneAward ||
@@ -385,7 +329,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
385329 if (msg .sender != st._pendingAuthority) revert MetaVesTControllerStorage.MetaVesTController_OnlyPendingAuthority ();
386330 delete st._pendingAuthority;
387331 st.authority = msg .sender ;
388- emit MetaVesTController_AuthorityUpdated (msg .sender );
332+ emit MetaVesTControllerStorage. MetaVesTController_AuthorityUpdated (msg .sender );
389333 }
390334
391335 /// @notice allows the 'dao' to propose a replacement to their address. First step in two-step address change, as '_newDao' will subsequently need to call 'acceptDaoRole()'
@@ -404,7 +348,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
404348 if (msg .sender != st._pendingDao) revert MetaVesTControllerStorage.MetaVesTController_OnlyPendingDao ();
405349 delete st._pendingDao;
406350 st.dao = msg .sender ;
407- emit MetaVesTController_DaoUpdated (msg .sender );
351+ emit MetaVesTControllerStorage. MetaVesTController_DaoUpdated (msg .sender );
408352 }
409353
410354 /// @notice for 'authority' to propose a metavest detail amendment
@@ -422,7 +366,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
422366 keccak256 (_callData),
423367 false
424368 );
425- emit MetaVesTController_AmendmentProposed (_grant, _msgSig);
369+ emit MetaVesTControllerStorage. MetaVesTController_AmendmentProposed (_grant, _msgSig);
426370 }
427371
428372 /// @notice for 'authority' to propose a metavest detail amendment
@@ -434,30 +378,17 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
434378 bytes4 _msgSig ,
435379 bytes calldata _callData
436380 ) external onlyAuthority {
437- MetaVesTControllerStorage.MetaVesTControllerData storage st = MetaVesTControllerStorage.getStorage ();
438-
439- // Check: verify inputs
440-
441- if (! doesSetExist (setName)) revert MetaVesTControllerStorage.MetaVesTController_SetDoesNotExist ();
442- if (_callData.length != 68 ) revert MetaVesTControllerStorage.MetaVesTController_LengthMismatch ();
443- bytes32 nameHash = keccak256 (bytes (setName));
444- //if the majority proposal is already pending and not expired, revert
445- if ((st.functionToSetMajorityProposal[_msgSig][nameHash].isPending && block .timestamp < st.functionToSetMajorityProposal[_msgSig][nameHash].time + AMENDMENT_TIME_LIMIT) || st.setMajorityVoteActive[nameHash])
446- revert MetaVesTControllerStorage.MetaVesTController_AmendmentAlreadyPending ();
447-
448- uint256 totalVotingPower = MetaVesTControllerStorage.proposeMajorityMetavestAmendment (setName, _msgSig, _callData);
449-
450- emit MetaVesTController_MajorityAmendmentProposed (setName, _msgSig, _callData, totalVotingPower);
381+ MetaVesTControllerStorage.proposeMajorityMetavestAmendment (setName, _msgSig, _callData);
451382 }
452383
453384 /// @notice for 'authority' to cancel a metavest majority amendment
454385 /// @param _setName name of the set for majority set amendment proposal
455386 /// @param _msgSig function signature of the function in this controller which (if successfully executed) will execute the metavest detail update
456387 function cancelExpiredMajorityMetavestAmendment (string memory _setName , bytes4 _msgSig ) external onlyAuthority {
457388 MetaVesTControllerStorage.MetaVesTControllerData storage st = MetaVesTControllerStorage.getStorage ();
458- if (! doesSetExist (_setName)) revert MetaVesTControllerStorage.MetaVesTController_SetDoesNotExist ();
389+ if (! MetaVesTControllerStorage. doesSetExist (_setName)) revert MetaVesTControllerStorage.MetaVesTController_SetDoesNotExist ();
459390 bytes32 nameHash = keccak256 (bytes (_setName));
460- if (! st.setMajorityVoteActive[nameHash] || block .timestamp < st.functionToSetMajorityProposal[_msgSig][nameHash].time + AMENDMENT_TIME_LIMIT) revert MetaVesTControllerStorage.MetaVesTController_AmendmentCannotBeCanceled ();
391+ if (! st.setMajorityVoteActive[nameHash] || block .timestamp < st.functionToSetMajorityProposal[_msgSig][nameHash].time + MetaVesTControllerStorage. AMENDMENT_TIME_LIMIT) revert MetaVesTControllerStorage.MetaVesTController_AmendmentCannotBeCanceled ();
461392 st.setMajorityVoteActive[nameHash] = false ;
462393 }
463394
@@ -487,7 +418,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
487418 proposal.voters.push (_grant);
488419 proposal.currentVotingPower += _callerPower;
489420 }
490- emit MetaVesTController_MajorityAmendmentVoted (_setName, _msgSig, _grant, _inFavor, _callerPower, proposal.currentVotingPower, proposal.totalVotingPower);
421+ emit MetaVesTControllerStorage. MetaVesTController_MajorityAmendmentVoted (_setName, _msgSig, _grant, _inFavor, _callerPower, proposal.currentVotingPower, proposal.totalVotingPower);
491422 }
492423
493424 /// @notice resets applicable amendment variables because either the applicable amending function has been successfully called or a pending amendment is being overridden with a new one
@@ -508,7 +439,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
508439 MetaVesTControllerStorage.MetaVesTControllerData storage st = MetaVesTControllerStorage.getStorage ();
509440 //check the majority proposal time
510441 bytes32 nameHash = keccak256 (bytes (_setName));
511- return (block .timestamp < st.functionToSetMajorityProposal[_msgSig][nameHash].time + AMENDMENT_TIME_LIMIT);
442+ return (block .timestamp < st.functionToSetMajorityProposal[_msgSig][nameHash].time + MetaVesTControllerStorage. AMENDMENT_TIME_LIMIT);
512443 }
513444
514445 function createSet (string memory _name ) external onlyAuthority {
@@ -519,7 +450,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
519450 if (bytes (_name).length > 512 ) revert MetaVesTControllerStorage.MetaVesTController_StringTooLong ();
520451
521452 st.setNames.add (nameHash);
522- emit MetaVesTController_SetCreated (_name);
453+ emit MetaVesTControllerStorage. MetaVesTController_SetCreated (_name);
523454 }
524455
525456 function removeSet (string memory _name ) external onlyAuthority {
@@ -535,11 +466,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
535466 }
536467
537468 st.setNames.remove (nameHash);
538- emit MetaVesTController_SetRemoved (_name);
539- }
540-
541- function doesSetExist (string memory _name ) internal view returns (bool ) {
542- return MetaVesTControllerStorage.getStorage ().setNames.contains (keccak256 (bytes (_name)));
469+ emit MetaVesTControllerStorage.MetaVesTController_SetRemoved (_name);
543470 }
544471
545472 function isMetavestInSet (address _metavest ) internal view returns (bool ) {
@@ -579,7 +506,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
579506 if (st.setMajorityVoteActive[nameHash]) revert MetaVesTControllerStorage.MetaVesTController_AmendmentAlreadyPending ();
580507
581508 st.sets[nameHash].add (_metaVest);
582- emit MetaVesTController_AddressAddedToSet (_name, _metaVest);
509+ emit MetaVesTControllerStorage. MetaVesTController_AddressAddedToSet (_name, _metaVest);
583510 }
584511
585512 function removeMetaVestFromSet (string memory _name , address _metaVest ) external onlyAuthority {
@@ -590,7 +517,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
590517 if (! st.sets[nameHash].contains (_metaVest)) revert MetaVesTControllerStorage.MetaVestController_MetaVestNotInSet ();
591518
592519 st.sets[nameHash].remove (_metaVest);
593- emit MetaVesTController_AddressRemovedFromSet (_name, _metaVest);
520+ emit MetaVesTControllerStorage. MetaVesTController_AddressRemovedFromSet (_name, _metaVest);
594521 }
595522
596523 function getDeal (bytes32 agreementId ) public view returns (MetaVestDeal memory ) {
@@ -648,52 +575,6 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
648575 );
649576 }
650577
651- /// @notice This is a hack because libraries cannot throw errors, so it returns error codes for the core contract
652- /// to throw accordingly
653- /// @dev As inefficient as it looks, it actually saves 3000+ bytes because otherwise logic that throws errors
654- /// would not be able to move to external libraries
655- function _checkError (bytes4 error ) internal {
656- if (error == 0 ) {
657- return ;
658-
659- } else if (error == MetaVesTControllerStorage.MetaVesTController_ZeroAddress.selector ) {
660- revert MetaVesTControllerStorage.MetaVesTController_ZeroAddress ();
661-
662- } else if (error == MetaVesTControllerStorage.MetaVesTController_CliffGreaterThanTotal.selector ) {
663- revert MetaVesTControllerStorage.MetaVesTController_CliffGreaterThanTotal ();
664-
665- } else if (error == MetaVesTControllerStorage.MetaVesTController_LengthMismatch.selector ) {
666- revert MetaVesTControllerStorage.MetaVesTController_LengthMismatch ();
667-
668- } else if (error == MetaVesTControllerStorage.MetaVesTController_ZeroAmount.selector ) {
669- revert MetaVesTControllerStorage.MetaVesTController_ZeroAmount ();
670-
671- } else if (error == MetaVesTControllerStorage.MetaVesTController_AmountNotApprovedForTransferFrom.selector ) {
672- revert MetaVesTControllerStorage.MetaVesTController_AmountNotApprovedForTransferFrom ();
673-
674- } else if (error == MetaVesTControllerStorage.MetaVesTController_IncorrectMetaVesTType.selector ) {
675- revert MetaVesTControllerStorage.MetaVesTController_IncorrectMetaVesTType ();
676-
677- } else if (error == MetaVesTControllerStorage.MetaVesTController_AmendmentCanOnlyBeAppliedOnce.selector ) {
678- revert MetaVesTControllerStorage.MetaVesTController_AmendmentCanOnlyBeAppliedOnce ();
679-
680- } else if (error == MetaVesTControllerStorage.MetaVesTController_AmendmentNeitherMutualNorMajorityConsented.selector ) {
681- revert MetaVesTControllerStorage.MetaVesTController_AmendmentNeitherMutualNorMajorityConsented ();
682-
683- } else if (error == MetaVesTControllerStorage.MetaVesTController_DealVoided.selector ) {
684- revert MetaVesTControllerStorage.MetaVesTController_DealVoided ();
685-
686- } else if (error == MetaVesTControllerStorage.MetaVesTController_DealAlreadyFinalized.selector ) {
687- revert MetaVesTControllerStorage.MetaVesTController_DealAlreadyFinalized ();
688-
689- } else if (error == MetaVesTControllerStorage.MetaVesTController_CounterPartyValueMismatch.selector ) {
690- revert MetaVesTControllerStorage.MetaVesTController_CounterPartyValueMismatch ();
691-
692- } else {
693- revert MetaVesTControllerStorage.MetaVesTController_UnknownError (error , "" );
694- }
695- }
696-
697578 // ========================
698579 // UUPSUpgradeable
699580 // ========================
@@ -705,7 +586,7 @@ contract metavestController is UUPSUpgradeable, SafeTransferLib {
705586 address newImplementation
706587 ) internal override onlyAuthority {
707588 if (IMetaVesTControllerFactory (MetaVesTControllerStorage.getStorage ().upgradeFactory).getRefImplementation () != newImplementation) {
708- revert NotRefImplementation ();
589+ revert MetaVesTControllerStorage. NotRefImplementation ();
709590 }
710591 }
711592}
0 commit comments