Skip to content

Commit 0d46f96

Browse files
Add natspec comments
1 parent e6aba36 commit 0d46f96

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/infra/EnergyRedeemer.sol

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ contract EnergyRedeemer is IEnergyRedeemer, Ownable {
2727
event Redeem(address to, uint256 energy, uint256 redeemed);
2828
event RampR(uint96 initialR, uint96 futureR, uint32 initialTime, uint32 futureTime);
2929

30+
/**
31+
* @param _pool address allowed to perform redemptions.
32+
* @param _rewardToken token address which energy is redeemed into.
33+
* @param _base constant redemption rate factor.
34+
* @param _r start value for dynamic part of redemption rate factor, 18 decimals.
35+
*/
3036
constructor(address _pool, address _rewardToken, uint256 _base, uint96 _r) {
3137
require(uint256(_r) <= type(uint256).max / _base, "EnergyRedeemer: overflow");
3238

@@ -36,6 +42,12 @@ contract EnergyRedeemer is IEnergyRedeemer, Ownable {
3642
(initialR, futureR, initialRTime, futureRTime) = (_r, _r, uint32(block.timestamp), uint32(block.timestamp));
3743
}
3844

45+
/**
46+
* @dev Starts changing the rewards multiplication factor R linearly over some time period.
47+
* Callable only by the contract owner.
48+
* @param _futureR target R value.
49+
* @param _duration time duration of R increase/decrease process.
50+
*/
3951
function rampR(uint96 _futureR, uint32 _duration) external onlyOwner {
4052
require(uint256(_futureR) <= type(uint256).max / base, "EnergyRedeemer: overflow");
4153

@@ -46,6 +58,12 @@ contract EnergyRedeemer is IEnergyRedeemer, Ownable {
4658
emit RampR(_initialR, _futureR, t, t + _duration);
4759
}
4860

61+
/**
62+
* @dev Redeems some amount of energy into the fungible token at the current exchange rate.
63+
* Callable only by the whitelisted pool address.
64+
* @param _to redeemed token receiver.
65+
* @param _energy amount of energy to exchange and redeem.
66+
*/
4967
function redeem(address _to, uint256 _energy) external {
5068
require(msg.sender == pool, "EnergyRedeemer: not authorized");
5169

@@ -56,6 +74,11 @@ contract EnergyRedeemer is IEnergyRedeemer, Ownable {
5674
emit Redeem(_to, _energy, redeemAmount);
5775
}
5876

77+
/**
78+
* @dev Tells the current rewards multiplication factor R.
79+
* Takes into account latest rampR operation.
80+
* @return R.
81+
*/
5982
function R() public view returns (uint96) {
6083
(uint96 _initialR, uint96 _futureR, uint32 _initialRTime, uint32 _futureRTime) =
6184
(initialR, futureR, initialRTime, futureRTime);
@@ -71,6 +94,10 @@ contract EnergyRedeemer is IEnergyRedeemer, Ownable {
7194
return _futureR;
7295
}
7396

97+
/**
98+
* @dev Tells the current energy redemption rate based on the R value and information from the pool.
99+
* @return energy redemption rate (18 decimals).
100+
*/
74101
function calculateRedemptionRate() public view returns (uint256) {
75102
IZkBobAccounting accounting = IZkBobPool(pool).accounting();
76103

@@ -84,6 +111,10 @@ contract EnergyRedeemer is IEnergyRedeemer, Ownable {
84111
return rate;
85112
}
86113

114+
/**
115+
* @dev Tells the maximum amount of energy available for redemption at the current rate, given available balance.
116+
* @return maximum amount of energy this contract can redeem at the current rate.
117+
*/
87118
function maxRedeemAmount() external view returns (uint256) {
88119
uint256 balance = IERC20(rewardToken).balanceOf(address(this));
89120
return balance * 1 ether / calculateRedemptionRate();

0 commit comments

Comments
 (0)