From ae78cb4eec19480ed9fde23e527e67a98c4a4f9a Mon Sep 17 00:00:00 2001 From: merisman <6125373+merisman@users.noreply.github.com> Date: Wed, 30 Oct 2024 22:36:30 -0600 Subject: [PATCH] Medium 6 additional change --- src/MetaVesTController.sol | 7 +++---- test/amendement.t.sol | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/MetaVesTController.sol b/src/MetaVesTController.sol index ffd8ff9..77d5f6f 100644 --- a/src/MetaVesTController.sol +++ b/src/MetaVesTController.sol @@ -55,7 +55,7 @@ contract metavestController is SafeTransferLib { bool isPending; bytes32 dataHash; address[] voters; - mapping(address => bool) changeApplied; + mapping(address => uint256) appliedProposalCreatedAt; mapping(address => uint256) voterPower; } @@ -143,7 +143,7 @@ contract metavestController is SafeTransferLib { if (isMetavestInSet(_grant)) { bytes32 set = getSetOfMetavest(_grant); MajorityAmendmentProposal storage proposal = functionToSetMajorityProposal[msg.sig][set]; - if(proposal.changeApplied[_grant]) revert MetaVesTController_AmendmentCanOnlyBeAppliedOnce(); + if(proposal.appliedProposalCreatedAt[_grant] == proposal.time) revert MetaVesTController_AmendmentCanOnlyBeAppliedOnce(); if (_data.length>32 && _data.length<69) { if (!proposal.isPending || proposal.totalVotingPower>proposal.currentVotingPower*2 || keccak256(_data[_data.length - 32:]) != proposal.dataHash ) { @@ -606,7 +606,6 @@ contract metavestController is SafeTransferLib { uint256 _votingPower = BaseAllocation(sets[nameHash].at(i)).getMajorityVotingPower(); totalVotingPower += _votingPower; proposal.voterPower[sets[nameHash].at(i)] = _votingPower; - proposal.changeApplied[sets[nameHash].at(i)] = false; } proposal.totalVotingPower = totalVotingPower; @@ -659,7 +658,7 @@ contract metavestController is SafeTransferLib { { bytes32 set = getSetOfMetavest(_grant); MajorityAmendmentProposal storage proposal = functionToSetMajorityProposal[_msgSig][set]; - proposal.changeApplied[_grant] = true; + proposal.appliedProposalCreatedAt[_grant] = proposal.time; setMajorityVoteActive[set] = false; } delete functionToGranteeToAmendmentPending[_msgSig][_grant]; diff --git a/test/amendement.t.sol b/test/amendement.t.sol index d98a21a..205c60f 100644 --- a/test/amendement.t.sol +++ b/test/amendement.t.sol @@ -736,6 +736,46 @@ contract MetaVestControllerTest is Test { controller.updateMetavestTransferability(mockAllocation3, true); } + function testProposeMajorityMetavestAmendmentReAdd() public { + address mockAllocation2 = createDummyVestingAllocation(); + address mockAllocation3 = createDummyVestingAllocation(); + bytes4 msgSig = bytes4(keccak256("updateMetavestTransferability(address,bool)")); + bytes memory callData = abi.encodeWithSelector(msgSig, mockAllocation2, true); + + vm.prank(authority); + controller.addMetaVestToSet("testSet", mockAllocation2); + controller.addMetaVestToSet("testSet", mockAllocation3); + vm.warp(block.timestamp + 1 days); + vm.prank(authority); + controller.proposeMajorityMetavestAmendment("testSet", msgSig, callData); + + vm.prank(grantee); + controller.voteOnMetavestAmendment(mockAllocation2, "testSet", msgSig, true); + + vm.prank(authority); + controller.updateMetavestTransferability(mockAllocation3, true); + + vm.prank(authority); + controller.removeMetaVestFromSet("testSet", mockAllocation3); + // vm.prank(authority); + // controller.updateMetavestTransferability(mockAllocation3, true); + vm.warp(block.timestamp + 90 days); + vm.prank(authority); + controller.proposeMajorityMetavestAmendment("testSet", msgSig, callData); + + vm.prank(grantee); + controller.voteOnMetavestAmendment(mockAllocation2, "testSet", msgSig, true); + + vm.prank(authority); + controller.updateMetavestTransferability(mockAllocation2, true); + + vm.prank(authority); + controller.addMetaVestToSet("testSet", mockAllocation3); + + vm.prank(authority); + controller.updateMetavestTransferability(mockAllocation3, true); + } + function testFailNoPassProposeMajorityMetavestAmendment() public { address mockAllocation2 = createDummyVestingAllocation(); address mockAllocation3 = createDummyVestingAllocation();