Skip to content

Commit

Permalink
StakeForAcceptingEpoch and CustodianStake (#1060)
Browse files Browse the repository at this point in the history
changes variable names for staking
  • Loading branch information
apenzk authored Feb 21, 2025
1 parent c0134ae commit 0ab2b6f
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 53 deletions.
20 changes: 10 additions & 10 deletions protocol-units/settlement/mcr/contracts/src/settlement/MCR.sol
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,13 @@ contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR {
}

// gets the stake for a given attester at a given epoch
function getStakeAtEpoch(
function getStake(
uint256 epoch,
address custodian,
address attester
) public view returns (uint256) {
return
stakingContract.getStakeAtEpoch(
stakingContract.getStake(
address(this),
epoch,
custodian,
Expand All @@ -107,17 +107,17 @@ contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR {
uint256 totalStake = 0;
for (uint256 i = 0; i < custodians.length; i++) {
// for now, each custodian has weight of 1
totalStake += getStakeAtEpoch(epoch, custodians[i], attester);
totalStake += getStake(epoch, custodians[i], attester);
}
return totalStake;
}

// gets the stake for a given attester at the current epoch
function getAcceptingEpochStake(
function getStakeForAcceptingEpoch(
address custodian,
address attester
) public view returns (uint256) {
return getStakeAtEpoch(getAcceptingEpoch(), custodian, attester);
return getStake(getAcceptingEpoch(), custodian, attester);
}

function computeAllStakeFromAcceptingEpoch(
Expand All @@ -127,12 +127,12 @@ contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR {
}

// gets the total stake for a given epoch
function getTotalStakeForEpoch(
function getCustodianStake(
uint256 epoch,
address custodian
) public view returns (uint256) {
return
stakingContract.getTotalStakeForEpoch(
stakingContract.getCustodianStake(
address(this),
epoch,
custodian
Expand All @@ -156,16 +156,16 @@ contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR {
uint256 totalStake = 0;
for (uint256 i = 0; i < custodians.length; i++) {
// for now, each custodian has weight of 1
totalStake += getTotalStakeForEpoch(epoch, custodians[i]);
totalStake += getCustodianStake(epoch, custodians[i]);
}
return totalStake;
}

// gets the total stake for the current epoch for a given custodian
function getTotalStakeForAcceptingEpoch(
function getCustodianStakeForAcceptingEpoch(
address custodian
) public view returns (uint256) {
return getTotalStakeForEpoch(getAcceptingEpoch(), custodian);
return getCustodianStake(getAcceptingEpoch(), custodian);
}

function computeAllTotalStakeForAcceptingEpoch()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ contract MovementStaking is
address custodian = custodiansByDomain[domain].at(j);

// get the genesis stake for the attester
uint256 attesterStake = getStakeAtEpoch(
uint256 attesterStake = getStake(
domain,
0,
custodian,
Expand All @@ -100,8 +100,8 @@ contract MovementStaking is
address attester,
uint256 amount
) internal {
epochStakesByDomain[domain][epoch][custodian][attester] += amount;
epochTotalStakeByDomain[domain][epoch][custodian] += amount;
stakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] += amount;
stakesByDomainEpochCustodian[domain][epoch][custodian] += amount;
}

function _removeStake(
Expand All @@ -111,8 +111,8 @@ contract MovementStaking is
address attester,
uint256 amount
) internal {
epochStakesByDomain[domain][epoch][custodian][attester] -= amount;
epochTotalStakeByDomain[domain][epoch][custodian] -= amount;
stakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] -= amount;
stakesByDomainEpochCustodian[domain][epoch][custodian] -= amount;
}

function _addUnstake(
Expand All @@ -122,7 +122,7 @@ contract MovementStaking is
address attester,
uint256 amount
) internal {
epochUnstakesByDomain[domain][epoch][custodian][attester] += amount;
unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] += amount;
}

function _removeUnstake(
Expand All @@ -132,7 +132,7 @@ contract MovementStaking is
address attester,
uint256 amount
) internal {
epochUnstakesByDomain[domain][epoch][custodian][attester] -= amount;
unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] -= amount;
}

function _setUnstake(
Expand All @@ -142,7 +142,7 @@ contract MovementStaking is
address attester,
uint256 amount
) internal {
epochUnstakesByDomain[domain][epoch][custodian][attester] = amount;
unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] = amount;
}

// gets the would be epoch for the current L1Block time
Expand Down Expand Up @@ -173,23 +173,23 @@ contract MovementStaking is
}

// gets the stake for a given attester at a given epoch
function getStakeAtEpoch(
function getStake(
address domain,
uint256 epoch,
address custodian,
address attester
) public view returns (uint256) {
return epochStakesByDomain[domain][epoch][custodian][attester];
return stakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester];
}

// gets the stake for a given attester at the current epoch
function getAcceptingEpochStake(
function getStakeForAcceptingEpoch(
address domain,
address custodian,
address attester
) public view returns (uint256) {
return
getStakeAtEpoch(
getStake(
domain,
getAcceptingEpoch(domain),
custodian,
Expand All @@ -204,11 +204,11 @@ contract MovementStaking is
address custodian,
address attester
) public view returns (uint256) {
return epochUnstakesByDomain[domain][epoch][custodian][attester];
return unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester];
}

// gets the unstake for a given attester at the current epoch
function getAcceptingEpochUnstake(
function getUnstakeForAcceptingEpoch(
address domain,
address custodian,
address attester
Expand All @@ -223,21 +223,21 @@ contract MovementStaking is
}

// gets the total stake for a given epoch
function getTotalStakeForEpoch(
function getCustodianStake(
address domain,
uint256 epoch,
address custodian
) public view returns (uint256) {
return epochTotalStakeByDomain[domain][epoch][custodian];
return stakesByDomainEpochCustodian[domain][epoch][custodian];
}

// gets the total stake for the current epoch
function getTotalStakeForAcceptingEpoch(
function getCustodianStakeForAcceptingEpoch(
address domain,
address custodian
) public view returns (uint256) {
return
getTotalStakeForEpoch(domain, getAcceptingEpoch(domain), custodian);
getCustodianStake(domain, getAcceptingEpoch(domain), custodian);
}

// stakes for the next epoch
Expand Down Expand Up @@ -318,7 +318,7 @@ contract MovementStaking is
address attester
) internal {
// the amount of stake rolled over is stake[currentAcceptingEpoch] - unstake[nextEpoch]
uint256 stakeAmount = getStakeAtEpoch(
uint256 stakeAmount = getStake(
domain,
epochNumber,
custodian,
Expand Down Expand Up @@ -392,7 +392,7 @@ contract MovementStaking is
) internal {
// stake slash will always target this epoch
uint256 targetEpoch = epoch;
uint256 stakeForEpoch = getStakeAtEpoch(
uint256 stakeForEpoch = getStake(
domain,
targetEpoch,
custodian,
Expand Down Expand Up @@ -427,7 +427,7 @@ contract MovementStaking is
address attester
) internal {
// unstake slash will always target the next epoch
uint256 stakeForEpoch = getStakeAtEpoch(
uint256 stakeForEpoch = getStake(
domain,
epoch,
custodian,
Expand Down Expand Up @@ -465,7 +465,7 @@ contract MovementStaking is
// issue a refund that is the min of the stake balance, the amount to be slashed, and the refund amount
// this is to prevent a Domain from trying to have this contract pay out more than has been staked
uint256 refundAmount = Math.min(
getStakeAtEpoch(
getStake(
msg.sender,
getAcceptingEpoch(attesters[i]),
custodians[i],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,24 @@ contract MovementStakingStorage {
mapping(address domain => EnumerableSet.AddressSet custodian) internal custodiansByDomain;

// preserved records of stake by address per epoch
/// @dev this is a mapping of domain => epoch => custodian => attester => stake
mapping(address domain =>
mapping(uint256 epoch =>
mapping(address custodian =>
mapping(address attester => uint256 stake)))) public epochStakesByDomain;
mapping(address attester => uint256 stake)))) public stakesByDomainEpochCustodianAttester;

// preserved records of unstake by address per epoch
/// @dev this is a mapping of domain => epoch => custodian => attester => unstake
mapping(address domain =>
mapping(uint256 epoch =>
mapping(address custodian =>
mapping(address attester => uint256 stake)))) public epochUnstakesByDomain;
mapping(address attester => uint256 stake)))) public unstakesByDomainEpochCustodianAttester;

// track the total stake of the epoch (computed at rollover)
/// @dev this is a mapping of domain => epoch => custodian => stake
mapping(address domain =>
mapping(uint256 epoch =>
mapping(address attester => uint256 stake))) public epochTotalStakeByDomain;
mapping(address custodian => uint256 stake))) public stakesByDomainEpochCustodian;

mapping(address domain => bool) public domainGenesisAccepted;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ interface IMovementStaking {
function getAcceptingEpoch(address) external view returns (uint256);
function getNextAcceptingEpoch(address) external view returns (uint256);
function getNextPresentEpochWithException(address) external view returns (uint256);
function getStakeAtEpoch(
function getStake(
address domain,
uint256 epoch,
address custodian,
address attester
) external view returns (uint256);
function getAcceptingEpochStake(
function getStakeForAcceptingEpoch(
address domain,
address custodian,
address attester
Expand All @@ -30,17 +30,17 @@ interface IMovementStaking {
address custodian,
address attester
) external view returns (uint256);
function getAcceptingEpochUnstake(
function getUnstakeForAcceptingEpoch(
address domain,
address custodian,
address attester
) external view returns (uint256);
function getTotalStakeForEpoch(
function getCustodianStake(
address domain,
uint256 epoch,
address custodian
) external view returns (uint256);
function getTotalStakeForAcceptingEpoch(
function getCustodianStakeForAcceptingEpoch(
address domain,
address custodian
) external view returns (uint256);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,9 @@ contract MCRTest is Test, IMCR {

// check that roll over happened
assertEq(mcr.getAcceptingEpoch(), mcr.getPresentEpoch());
assertEq(mcr.getAcceptingEpochStake(address(moveToken), alice), 34);
assertEq(mcr.getAcceptingEpochStake(address(moveToken), bob), 33);
assertEq(mcr.getAcceptingEpochStake(address(moveToken), carol), 33);
assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 34);
assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), 33);
assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 33);
MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getAcceptedCommitmentAtSuperBlockHeight(1);
assert(retrievedCommitment.commitment == bc1.commitment);
assert(retrievedCommitment.blockId == bc1.blockId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ contract MovementStakingTest is Test {
vm.prank(staker);
staking.stake(domain, moveToken, 100);
assertEq(moveToken.balanceOf(staker), 0);
assertEq(staking.getStakeAtEpoch(domain, 0, address(moveToken), staker), 100);
assertEq(staking.getStake(domain, 0, address(moveToken), staker), 100);
}

function testSimpleGenesisCeremony() public {
Expand All @@ -106,7 +106,7 @@ contract MovementStakingTest is Test {
vm.prank(domain);
staking.acceptGenesisCeremony();
assertNotEq(staking.currentAcceptingEpochByDomain(domain), 0);
assertEq(staking.getAcceptingEpochStake(domain, address(moveToken), staker), 100);
assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), 100);

vm.expectRevert(IMovementStaking.GenesisAlreadyAccepted.selector);
vm.prank(domain);
Expand Down Expand Up @@ -143,7 +143,7 @@ contract MovementStakingTest is Test {
staking.rollOverEpoch();
uint256 epochAfter = staking.getAcceptingEpoch(domain);
assertEq(epochAfter, epochBefore + 1);
assertEq(staking.getAcceptingEpochStake(domain, address(moveToken), staker), 100);
assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), 100);
}
}

Expand Down Expand Up @@ -175,7 +175,7 @@ contract MovementStakingTest is Test {
// unstake
vm.prank(staker);
staking.unstake(domain, address(moveToken), 10);
assertEq(staking.getAcceptingEpochStake(domain, address(moveToken), staker), 100 - (i * 10));
assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), 100 - (i * 10));
assertEq(moveToken.balanceOf(staker), i * 10);

// roll over
Expand Down Expand Up @@ -222,7 +222,7 @@ contract MovementStakingTest is Test {
staking.stake(domain, moveToken, 5);

// check stake
assertEq(staking.getAcceptingEpochStake(domain, address(moveToken), staker), (100 - (i * 10)) + (i * 5));
assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), (100 - (i * 10)) + (i * 5));
assertEq(moveToken.balanceOf(staker), (50 - (i + 1) * 5) + (i * 10));

// roll over
Expand Down Expand Up @@ -270,7 +270,7 @@ contract MovementStakingTest is Test {

// check stake
assertEq(
staking.getAcceptingEpochStake(domain, address(moveToken), staker), (100 - (i * 10)) + (i * 5) - (i * 1)
staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), (100 - (i * 10)) + (i * 5) - (i * 1)
);
assertEq(moveToken.balanceOf(staker), (50 - (i + 1) * 5) + (i * 10));

Expand All @@ -288,7 +288,7 @@ contract MovementStakingTest is Test {

// slash immediately takes effect
assertEq(
staking.getAcceptingEpochStake(domain, address(moveToken), staker),
staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker),
(100 - (i * 10)) + (i * 5) - ((i + 1) * 1)
);

Expand Down Expand Up @@ -332,9 +332,9 @@ contract MovementStakingTest is Test {
assertEq(moveToken.balanceOf(alice), 0);
assertEq(moveToken.balanceOf(bob), 0);
assertEq(moveToken.balanceOf(address(staking)), 1100);
assertEq(staking.getTotalStakeForEpoch(domain, 0, address(moveToken)), 1100);
assertEq(staking.getStakeAtEpoch(domain, 0, address(moveToken), alice), 1000);
assertEq(staking.getStakeAtEpoch(domain, 0, address(moveToken), bob), 100);
assertEq(staking.getCustodianStake(domain, 0, address(moveToken)), 1100);
assertEq(staking.getStake(domain, 0, address(moveToken), alice), 1000);
assertEq(staking.getStake(domain, 0, address(moveToken), bob), 100);

// Charlie calls reward with himself only to steal tokens
address charlie = vm.addr(4);
Expand Down

0 comments on commit 0ab2b6f

Please sign in to comment.