Skip to content

Commit 5c20d36

Browse files
committed
genesis can only be ran once if successful per domain
1 parent e608512 commit 5c20d36

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

Lines changed: 2 additions & 1 deletion
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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 4 additions & 0 deletions
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)