Skip to content

Commit c2531a9

Browse files
committed
chore: refactor and remove the unnecessary event restrictions
1 parent 0510241 commit c2531a9

2 files changed

Lines changed: 115 additions & 183 deletions

File tree

src/MetaVesTController.sol

Lines changed: 23 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)