Skip to content

Commit adf105c

Browse files
Merge branch 'delta' into feat/add-reward-caller/transcoder-to-reward-caller
2 parents ae18d5a + 6e6b452 commit adf105c

19 files changed

Lines changed: 2993 additions & 105 deletions

contracts/bonding/BondingManager.sol

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ contract BondingManager is ManagerProxyTarget, IBondingManager {
329329
// Silence unused param compiler warning
330330
_round;
331331

332-
require(isRegisteredTranscoder(_transcoder), "transcoder must be registered");
332+
require(isActiveTranscoder(_transcoder), "transcoder must be active");
333333

334334
uint256 currentRound = roundsManager().currentRound();
335335

@@ -363,12 +363,12 @@ contract BondingManager is ManagerProxyTarget, IBondingManager {
363363

364364
uint256 totalStake = earningsPool.totalStake;
365365
if (prevEarningsPool.cumulativeRewardFactor == 0 && lastRewardRound == currentRound) {
366-
// if transcoder called reward for 'currentRound' but not for 'currentRound - 1' (missed reward call)
367-
// retroactively calculate what its cumulativeRewardFactor would have been for 'currentRound - 1' (cfr. previous lastRewardRound for transcoder)
368-
// based on rewards for currentRound
366+
// if transcoder called reward for 'currentRound' but skipped 'currentRound - 1' (missed reward call)
367+
// retroactively estimate what the cumulativeRewardFactor would have been for 'currentRound - 1'
368+
// based on the current round's mintable rewards and stake proportions.
369369
IMinter mtr = minter();
370370
uint256 rewards = PreciseMathUtils.percOf(
371-
mtr.currentMintableTokens().add(mtr.currentMintedTokens()),
371+
mtr.currentMintableTokens(),
372372
totalStake,
373373
currentRoundTotalActiveStake
374374
);
@@ -586,6 +586,8 @@ contract BondingManager is ManagerProxyTarget, IBondingManager {
586586
// Current bonded amount
587587
uint256 currentBondedAmount = del.bondedAmount;
588588

589+
_ensurePendingDeactivationTranscoderCalledReward(_to);
590+
589591
// Requirements for a third party caller that is not the L2Migrator
590592
if (msg.sender != _owner && msg.sender != l2Migrator()) {
591593
// Does not bond for the zero address
@@ -1645,6 +1647,8 @@ contract BondingManager is ManagerProxyTarget, IBondingManager {
16451647

16461648
address delegate = del.delegateAddress;
16471649

1650+
_ensurePendingDeactivationTranscoderCalledReward(delegate);
1651+
16481652
increaseTotalStake(delegate, amount, _newPosPrev, _newPosNext);
16491653
if (delegate != _delegator) {
16501654
// Avoid double checkpointing of the transcoder if it's a self-rebond
@@ -1751,6 +1755,17 @@ contract BondingManager is ManagerProxyTarget, IBondingManager {
17511755
require(roundsManager().currentRoundInitialized(), "current round is not initialized");
17521756
}
17531757

1758+
/**
1759+
* Ensure the transcoder called reward, if it was deactivated in the current round
1760+
*/
1761+
function _ensurePendingDeactivationTranscoderCalledReward(address _transcoder) internal view {
1762+
Transcoder storage t = transcoders[_transcoder];
1763+
uint256 currentRound = roundsManager().currentRound();
1764+
if (isActiveTranscoder(_transcoder) && t.deactivationRound != MAX_FUTURE_ROUND) {
1765+
require(t.lastRewardRound == currentRound, "transcoder has not yet called reward for the current round");
1766+
}
1767+
}
1768+
17541769
function _autoClaimEarnings(address _delegator) internal {
17551770
uint256 currentRound = roundsManager().currentRound();
17561771
uint256 lastClaimRound = delegators[_delegator].lastClaimRound;

contracts/token/Minter.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ contract Minter is Manager, IMinter {
2828
// Target bonding rate
2929
uint256 public targetBondingRate;
3030

31-
// Current number of mintable tokens. Reset every round
31+
// Number of mintable tokens. Recalculated on each round change
3232
uint256 public currentMintableTokens;
33-
// Current number of minted tokens. Reset every round
33+
// Number of minted tokens. Increased with every reward. Reset to 0 on each round change
3434
uint256 public currentMintedTokens;
3535

3636
// Checks if caller is BondingManager

deployments/arbitrumMainnet/BondingManagerTarget.json

Lines changed: 38 additions & 38 deletions
Large diffs are not rendered by default.

deployments/arbitrumMainnet/solcInputs/2fb71e8c8acec39a97be26c1278983dd.json

Lines changed: 494 additions & 0 deletions
Large diffs are not rendered by default.

deployments/arbitrumMainnet/solcInputs/68b0b6154a921bdff5991504c6ea9303.json

Lines changed: 494 additions & 0 deletions
Large diffs are not rendered by default.

deployments/arbitrumMainnet/solcInputs/8590bebd510ac80735992019b8442a76.json

Lines changed: 494 additions & 0 deletions
Large diffs are not rendered by default.

lib/forge-std

Submodule forge-std updated 65 files

0 commit comments

Comments
 (0)