Skip to content

Commit 93ff017

Browse files
authored
Merge pull request #536 from movementlabsxyz/529-mst-7-acceptgenesisceremony-function-can-be-called-multiple-times
Genesis can only be ran once if successful per domain
2 parents f6d3f18 + 5c20d36 commit 93ff017

File tree

4 files changed

+10
-1
lines changed

4 files changed

+10
-1
lines changed

protocol-units/settlement/mcr/contracts/src/staking/MovementStaking.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ contract MovementStaking is
6060

6161
function acceptGenesisCeremony() public {
6262
address domain = msg.sender;
63-
63+
if (domainGenesisAccepted[domain]) revert GenesisAlreadyAccepted();
64+
domainGenesisAccepted[domain] = true;
6465
// roll over from 0 (genesis) to current epoch by block time
6566
currentEpochByDomain[domain] = getEpochByBlockTime(domain);
6667

protocol-units/settlement/mcr/contracts/src/staking/MovementStakingStorage.sol

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ contract MovementStakingStorage {
3535
mapping(uint256 epoch =>
3636
mapping(address attester => uint256 stake))) public epochTotalStakeByDomain;
3737

38+
mapping(address domain => bool) public domainGenesisAccepted;
39+
3840
// the whitelist role needed to stake/unstake
3941
bytes32 public constant WHITELIST_ROLE = keccak256("WHITELIST_ROLE");
4042
}

protocol-units/settlement/mcr/contracts/src/staking/interfaces/IMovementStaking.sol

+2
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ interface IMovementStaking {
9797
);
9898

9999
event EpochRolledOver(address indexed domain, uint256 epoch);
100+
100101
error StakeExceedsGenesisStake();
101102
error CustodianTransferAmountMismatch();
103+
error GenesisAlreadyAccepted();
102104
}

protocol-units/settlement/mcr/contracts/test/staking/MovementStaking.t.sol

+4
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ contract MovementStakingTest is Test {
122122
staking.getCurrentEpochStake(domain, address(moveToken), staker),
123123
100
124124
);
125+
126+
vm.expectRevert(IMovementStaking.GenesisAlreadyAccepted.selector);
127+
vm.prank(domain);
128+
staking.acceptGenesisCeremony();
125129
}
126130

127131
function testSimpleRolloverEpoch() public {

0 commit comments

Comments
 (0)