Update contracts to use new SafeMath functions
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibFeeMath.sol";
|
||||
import "../libs/LibStakingRichErrors.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
@@ -69,7 +69,7 @@ contract MixinExchangeFees is
|
||||
uint256 amount = msg.value;
|
||||
bytes32 poolId = getStakingPoolIdOfMaker(makerAddress);
|
||||
uint256 _feesCollectedThisEpoch = protocolFeesThisEpochByPool[poolId];
|
||||
protocolFeesThisEpochByPool[poolId] = _feesCollectedThisEpoch._add(amount);
|
||||
protocolFeesThisEpochByPool[poolId] = _feesCollectedThisEpoch.safeAdd(amount);
|
||||
if (_feesCollectedThisEpoch == 0) {
|
||||
activePoolsThisEpoch.push(poolId);
|
||||
}
|
||||
@@ -174,10 +174,10 @@ contract MixinExchangeFees is
|
||||
// compute weighted stake
|
||||
uint256 totalStakeDelegatedToPool = getTotalStakeDelegatedToPool(poolId);
|
||||
uint256 stakeHeldByPoolOperator = getActivatedAndUndelegatedStake(getStakingPoolOperator(poolId));
|
||||
uint256 weightedStake = stakeHeldByPoolOperator._add(
|
||||
uint256 weightedStake = stakeHeldByPoolOperator.safeAdd(
|
||||
totalStakeDelegatedToPool
|
||||
._mul(REWARD_PAYOUT_DELEGATED_STAKE_PERCENT_VALUE)
|
||||
._div(100)
|
||||
.safeMul(REWARD_PAYOUT_DELEGATED_STAKE_PERCENT_VALUE)
|
||||
.safeDiv(100)
|
||||
);
|
||||
|
||||
// store pool stats
|
||||
@@ -186,8 +186,8 @@ contract MixinExchangeFees is
|
||||
activePools[i].weightedStake = weightedStake;
|
||||
|
||||
// update cumulative amounts
|
||||
totalFeesCollected = totalFeesCollected._add(activePools[i].feesCollected);
|
||||
totalWeightedStake = totalWeightedStake._add(activePools[i].weightedStake);
|
||||
totalFeesCollected = totalFeesCollected.safeAdd(activePools[i].feesCollected);
|
||||
totalWeightedStake = totalWeightedStake.safeAdd(activePools[i].weightedStake);
|
||||
}
|
||||
|
||||
// sanity check - this is a gas optimization that can be used because we assume a non-zero
|
||||
@@ -216,7 +216,7 @@ contract MixinExchangeFees is
|
||||
|
||||
// record reward in vault
|
||||
_recordDepositInStakingPoolRewardVault(activePools[i].poolId, reward);
|
||||
totalRewardsPaid = totalRewardsPaid._add(reward);
|
||||
totalRewardsPaid = totalRewardsPaid.safeAdd(reward);
|
||||
|
||||
// clear state for gas refunds
|
||||
protocolFeesThisEpochByPool[activePools[i].poolId] = 0;
|
||||
|
@@ -18,7 +18,7 @@
|
||||
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "./LibSafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
|
||||
|
||||
/// @dev This library contains logic for computing the reward balances of staking pool members.
|
||||
@@ -47,8 +47,8 @@ library LibRewardMath {
|
||||
returns (uint256)
|
||||
{
|
||||
uint256 combinedPayout = amountDelegatedByOwner
|
||||
._mul(totalAmountOfShadowAsset._add(totalAmountOfRealAsset))
|
||||
._div(totalAmountDelegated);
|
||||
.safeMul(totalAmountOfShadowAsset.safeAdd(totalAmountOfRealAsset))
|
||||
.safeDiv(totalAmountDelegated);
|
||||
|
||||
// we round up the amount of shadow assets when computing buy-ins.
|
||||
// the result is that sometimes the amount of actual assets in the pool
|
||||
@@ -85,8 +85,8 @@ library LibRewardMath {
|
||||
)
|
||||
{
|
||||
payoutInShadowAsset = amountOfShadowAssetHeldByOwner
|
||||
._mul(partialAmountDelegatedByOwner)
|
||||
._div(amountDelegatedByOwner);
|
||||
.safeMul(partialAmountDelegatedByOwner)
|
||||
.safeDiv(amountDelegatedByOwner);
|
||||
|
||||
payoutInRealAsset = _computePayoutDenominatedInRealAsset(
|
||||
partialAmountDelegatedByOwner,
|
||||
@@ -120,8 +120,8 @@ library LibRewardMath {
|
||||
return 0;
|
||||
}
|
||||
return amountToDelegateByOwner
|
||||
._mul(totalAmountOfShadowAsset._add(totalAmountOfRealAsset))
|
||||
._add(totalAmountDelegated._sub(1)) // we round up when computing shadow asset
|
||||
._div(totalAmountDelegated);
|
||||
.safeMul(totalAmountOfShadowAsset.safeAdd(totalAmountOfRealAsset))
|
||||
.safeAdd(totalAmountDelegated.safeSub(1)) // we round up when computing shadow asset
|
||||
.safeDiv(totalAmountDelegated);
|
||||
}
|
||||
}
|
||||
|
@@ -18,6 +18,8 @@
|
||||
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMathRihErrors.sol";
|
||||
|
||||
library LibSafeDowncast {
|
||||
|
||||
@@ -29,10 +31,12 @@ library LibSafeDowncast {
|
||||
returns (uint96 b)
|
||||
{
|
||||
b = uint96(a);
|
||||
require(
|
||||
uint256(b) == a,
|
||||
"VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT96"
|
||||
);
|
||||
if (uint256(b) != a) {
|
||||
LibRichErrors.rrevert(LibSafeMathRichErrors.Uint256DowncastError(
|
||||
LibSafeMathRichErrors.DowncastErrorCodes.VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT96,
|
||||
a
|
||||
));
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
@@ -44,10 +48,12 @@ library LibSafeDowncast {
|
||||
returns (uint64 b)
|
||||
{
|
||||
b = uint64(a);
|
||||
require(
|
||||
uint256(b) == a,
|
||||
"VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT96"
|
||||
);
|
||||
if (uint256(b) != a) {
|
||||
LibRichErrors.rrevert(LibSafeMathRichErrors.Uint256DowncastError(
|
||||
LibSafeMathRichErrors.DowncastErrorCodes.VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT64,
|
||||
a
|
||||
));
|
||||
}
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@
|
||||
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../immutable/MixinConstants.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
import "../interfaces/IStakingEvents.sol";
|
||||
@@ -122,13 +122,13 @@ contract MixinDelegatedStake is
|
||||
);
|
||||
|
||||
// increment how much stake the owner has delegated
|
||||
delegatedStakeByOwner[owner] = _delegatedStakeByOwner._add(amount);
|
||||
delegatedStakeByOwner[owner] = _delegatedStakeByOwner.safeAdd(amount);
|
||||
|
||||
// increment how much stake the owner has delegated to the input pool
|
||||
delegatedStakeToPoolByOwner[owner][poolId] = _delegatedStakeToPoolByOwner._add(amount);
|
||||
delegatedStakeToPoolByOwner[owner][poolId] = _delegatedStakeToPoolByOwner.safeAdd(amount);
|
||||
|
||||
// increment how much stake has been delegated to pool
|
||||
delegatedStakeByPoolId[poolId] = _delegatedStakeByPoolId._add(amount);
|
||||
delegatedStakeByPoolId[poolId] = _delegatedStakeByPoolId.safeAdd(amount);
|
||||
}
|
||||
|
||||
/// @dev Undelegates stake of `owner` from the staking pool with id `poolId`
|
||||
@@ -157,12 +157,12 @@ contract MixinDelegatedStake is
|
||||
);
|
||||
|
||||
// decrement how much stake the owner has delegated
|
||||
delegatedStakeByOwner[owner] = _delegatedStakeByOwner._sub(amount);
|
||||
delegatedStakeByOwner[owner] = _delegatedStakeByOwner.safeSub(amount);
|
||||
|
||||
// decrement how much stake the owner has delegated to the input pool
|
||||
delegatedStakeToPoolByOwner[owner][poolId] = _delegatedStakeToPoolByOwner._sub(amount);
|
||||
delegatedStakeToPoolByOwner[owner][poolId] = _delegatedStakeToPoolByOwner.safeSub(amount);
|
||||
|
||||
// decrement how much stake has been delegated to pool
|
||||
delegatedStakeByPoolId[poolId] = _delegatedStakeByPoolId._sub(amount);
|
||||
delegatedStakeByPoolId[poolId] = _delegatedStakeByPoolId.safeSub(amount);
|
||||
}
|
||||
}
|
||||
|
@@ -19,8 +19,8 @@
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibStakingRichErrors.sol";
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "../libs/LibRewardMath.sol";
|
||||
import "../immutable/MixinConstants.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
@@ -143,8 +143,8 @@ contract MixinStake is
|
||||
));
|
||||
}
|
||||
|
||||
activatedStakeByOwner[owner] = activatedStakeByOwner[owner]._add(amount);
|
||||
totalActivatedStake = totalActivatedStake._add(amount);
|
||||
activatedStakeByOwner[owner] = activatedStakeByOwner[owner].safeAdd(amount);
|
||||
totalActivatedStake = totalActivatedStake.safeAdd(amount);
|
||||
}
|
||||
|
||||
/// @dev Deactivate & TimeLock stake that is currently in the Activated state.
|
||||
@@ -161,8 +161,8 @@ contract MixinStake is
|
||||
));
|
||||
}
|
||||
|
||||
activatedStakeByOwner[owner] = activatedStakeByOwner[owner]._sub(amount);
|
||||
totalActivatedStake = totalActivatedStake._sub(amount);
|
||||
activatedStakeByOwner[owner] = activatedStakeByOwner[owner].safeSub(amount);
|
||||
totalActivatedStake = totalActivatedStake.safeSub(amount);
|
||||
_timeLockStake(owner, amount);
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ contract MixinStake is
|
||||
_depositFromOwnerIntoZrxVault(owner, amount);
|
||||
|
||||
// mint stake
|
||||
stakeByOwner[owner] = stakeByOwner[owner]._add(amount);
|
||||
stakeByOwner[owner] = stakeByOwner[owner].safeAdd(amount);
|
||||
|
||||
// emit stake event
|
||||
emit StakeMinted(
|
||||
@@ -192,7 +192,7 @@ contract MixinStake is
|
||||
internal
|
||||
{
|
||||
// burn stake
|
||||
stakeByOwner[owner] = stakeByOwner[owner]._sub(amount);
|
||||
stakeByOwner[owner] = stakeByOwner[owner].safeSub(amount);
|
||||
|
||||
// withdraw equivalent amount of ZRX from vault
|
||||
_withdrawToOwnerFromZrxVault(owner, amount);
|
||||
|
@@ -19,7 +19,7 @@
|
||||
pragma solidity ^0.5.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../interfaces/IStructs.sol";
|
||||
import "../immutable/MixinConstants.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
@@ -84,7 +84,7 @@ contract MixinStakeBalances is
|
||||
view
|
||||
returns (uint256)
|
||||
{
|
||||
return getTotalStake(owner)._sub(getActivatedStake(owner));
|
||||
return getTotalStake(owner).safeSub(getActivatedStake(owner));
|
||||
}
|
||||
|
||||
/// @dev Returns the activated & undelegated stake for a given owner.
|
||||
@@ -96,7 +96,7 @@ contract MixinStakeBalances is
|
||||
view
|
||||
returns (uint256)
|
||||
{
|
||||
return activatedStakeByOwner[owner]._sub(getStakeDelegatedByOwner(owner));
|
||||
return activatedStakeByOwner[owner].safeSub(getStakeDelegatedByOwner(owner));
|
||||
}
|
||||
|
||||
/// @dev Returns the stake that can be activated for a given owner.
|
||||
@@ -108,7 +108,7 @@ contract MixinStakeBalances is
|
||||
view
|
||||
returns (uint256)
|
||||
{
|
||||
return getDeactivatedStake(owner)._sub(getTimeLockedStake(owner));
|
||||
return getDeactivatedStake(owner).safeSub(getTimeLockedStake(owner));
|
||||
}
|
||||
|
||||
/// @dev Returns the stake that can be withdrawn for a given owner.
|
||||
|
@@ -18,7 +18,8 @@
|
||||
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibSafeDowncast.sol";
|
||||
import "../libs/LibRewardMath.sol";
|
||||
import "../immutable/MixinConstants.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
@@ -84,6 +85,7 @@ contract MixinTimeLockedStake is
|
||||
MixinScheduler
|
||||
{
|
||||
|
||||
using LibSafeDowncast for uint256;
|
||||
using LibSafeMath for uint256;
|
||||
|
||||
/// @dev Forces the timeLock data structure to sync to state.
|
||||
@@ -103,7 +105,7 @@ contract MixinTimeLockedStake is
|
||||
internal
|
||||
{
|
||||
(IStructs.TimeLock memory ownerTimeLock,) = _getSynchronizedTimeLock(owner);
|
||||
uint96 downcastAmount = amount._downcastToUint96();
|
||||
uint96 downcastAmount = amount.downcastToUint96();
|
||||
ownerTimeLock.total += downcastAmount;
|
||||
timeLockedStakeByOwner[owner] = ownerTimeLock;
|
||||
}
|
||||
@@ -133,7 +135,7 @@ contract MixinTimeLockedStake is
|
||||
uint64 currentTimeLockPeriod = getCurrentTimeLockPeriod();
|
||||
ownerTimeLock = timeLockedStakeByOwner[owner];
|
||||
isOutOfSync = false;
|
||||
if (currentTimeLockPeriod == ownerTimeLock.lockedAt._add(1)) {
|
||||
if (currentTimeLockPeriod == ownerTimeLock.lockedAt.safeAdd(1)) {
|
||||
// shift n periods
|
||||
ownerTimeLock.pending = ownerTimeLock.total;
|
||||
isOutOfSync = true;
|
||||
|
@@ -20,8 +20,8 @@ pragma solidity ^0.5.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibStakingRichErrors.sol";
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "../libs/LibSignatureValidator.sol";
|
||||
import "../libs/LibEIP712Hash.sol";
|
||||
import "../interfaces/IStructs.sol";
|
||||
@@ -327,6 +327,6 @@ contract MixinStakingPool is
|
||||
pure
|
||||
returns (bytes32)
|
||||
{
|
||||
return bytes32(uint256(poolId)._add(POOL_ID_INCREMENT_AMOUNT));
|
||||
return bytes32(uint256(poolId).safeAdd(POOL_ID_INCREMENT_AMOUNT));
|
||||
}
|
||||
}
|
||||
|
@@ -19,8 +19,8 @@
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibStakingRichErrors.sol";
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "../libs/LibRewardMath.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
import "../immutable/MixinConstants.sol";
|
||||
@@ -118,8 +118,8 @@ contract MixinStakingPoolRewards is
|
||||
}
|
||||
|
||||
// update shadow rewards
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId]._add(amount);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId]._add(amount);
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId].safeAdd(amount);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId].safeAdd(amount);
|
||||
|
||||
// perform withdrawal
|
||||
_withdrawFromMemberInStakingPoolRewardVault(poolId, amount);
|
||||
@@ -138,8 +138,8 @@ contract MixinStakingPoolRewards is
|
||||
uint256 amount = computeRewardBalanceOfStakingPoolMember(poolId, member);
|
||||
|
||||
// update shadow rewards
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId]._add(amount);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId]._add(amount);
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId].safeAdd(amount);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId].safeAdd(amount);
|
||||
|
||||
// perform withdrawal and return amount withdrawn
|
||||
_withdrawFromMemberInStakingPoolRewardVault(poolId, amount);
|
||||
@@ -250,8 +250,8 @@ contract MixinStakingPoolRewards is
|
||||
|
||||
// the buy-in will be > 0 iff there exists a non-zero reward.
|
||||
if (buyIn > 0) {
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId]._add(buyIn);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId]._add(buyIn);
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId].safeAdd(buyIn);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId].safeAdd(buyIn);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,8 +302,8 @@ contract MixinStakingPoolRewards is
|
||||
}
|
||||
|
||||
// update shadow rewards
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId]._sub(payoutInShadowAsset);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId]._sub(payoutInShadowAsset);
|
||||
shadowRewardsInPoolByOwner[member][poolId] = shadowRewardsInPoolByOwner[member][poolId].safeSub(payoutInShadowAsset);
|
||||
shadowRewardsByPoolId[poolId] = shadowRewardsByPoolId[poolId].safeSub(payoutInShadowAsset);
|
||||
|
||||
// withdraw payout for member
|
||||
if (payoutInRealAsset > 0) {
|
||||
|
@@ -19,9 +19,10 @@
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibStakingRichErrors.sol";
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "../libs/LibSafeMath64.sol";
|
||||
import "../libs/LibSafeDowncast.sol";
|
||||
import "../immutable/MixinConstants.sol";
|
||||
import "../immutable/MixinStorage.sol";
|
||||
import "../interfaces/IStructs.sol";
|
||||
@@ -41,6 +42,7 @@ contract MixinScheduler is
|
||||
MixinStorage
|
||||
{
|
||||
|
||||
using LibSafeDowncast for uint256;
|
||||
using LibSafeMath for uint256;
|
||||
using LibSafeMath64 for uint64;
|
||||
|
||||
@@ -85,7 +87,7 @@ contract MixinScheduler is
|
||||
view
|
||||
returns (uint64)
|
||||
{
|
||||
return getCurrentEpochStartTimeInSeconds()._add(getEpochDurationInSeconds());
|
||||
return getCurrentEpochStartTimeInSeconds().safeAdd(getEpochDurationInSeconds());
|
||||
}
|
||||
|
||||
/// @dev Returns the current timeLock period.
|
||||
@@ -128,7 +130,7 @@ contract MixinScheduler is
|
||||
view
|
||||
returns (uint64)
|
||||
{
|
||||
return getCurrentTimeLockPeriodStartEpoch()._add(getTimeLockDurationInEpochs());
|
||||
return getCurrentTimeLockPeriodStartEpoch().safeAdd(getTimeLockDurationInEpochs());
|
||||
}
|
||||
|
||||
/// @dev Moves to the next epoch, given the current epoch period has ended.
|
||||
@@ -139,7 +141,7 @@ contract MixinScheduler is
|
||||
{
|
||||
// get current timestamp
|
||||
// solhint-disable-next-line not-rely-on-time
|
||||
uint64 currentBlockTimestamp = block.timestamp._downcastToUint64();
|
||||
uint64 currentBlockTimestamp = block.timestamp.downcastToUint64();
|
||||
|
||||
// validate that we can increment the current epoch
|
||||
uint64 epochEndTime = getCurrentEpochEarliestEndTimeInSeconds();
|
||||
@@ -151,11 +153,11 @@ contract MixinScheduler is
|
||||
}
|
||||
|
||||
// incremment epoch
|
||||
uint64 nextEpoch = currentEpoch._add(1);
|
||||
uint64 nextEpoch = currentEpoch.safeAdd(1);
|
||||
currentEpoch = nextEpoch;
|
||||
currentEpochStartTimeInSeconds = currentBlockTimestamp;
|
||||
uint64 earliestEndTimeInSeconds = currentEpochStartTimeInSeconds._add(getEpochDurationInSeconds());
|
||||
|
||||
uint64 earliestEndTimeInSeconds = currentEpochStartTimeInSeconds.safeAdd(getEpochDurationInSeconds());
|
||||
|
||||
// notify of epoch change
|
||||
emit EpochChanged(
|
||||
currentEpoch,
|
||||
@@ -165,10 +167,10 @@ contract MixinScheduler is
|
||||
|
||||
// increment timeLock period, if needed
|
||||
if (getCurrentTimeLockPeriodEndEpoch() <= nextEpoch) {
|
||||
currentTimeLockPeriod = currentTimeLockPeriod._add(1);
|
||||
currentTimeLockPeriod = currentTimeLockPeriod.safeAdd(1);
|
||||
currentTimeLockPeriodStartEpoch = currentEpoch;
|
||||
uint64 endEpoch = currentEpoch._add(getTimeLockDurationInEpochs());
|
||||
|
||||
uint64 endEpoch = currentEpoch.safeAdd(getTimeLockDurationInEpochs());
|
||||
|
||||
// notify
|
||||
emit TimeLockPeriodChanged(
|
||||
currentTimeLockPeriod,
|
||||
|
@@ -19,7 +19,8 @@
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "@0x/contracts-utils/contracts/src/LibRichErrors.sol";
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "../libs/LibSafeDowncast.sol";
|
||||
import "../libs/LibSafeMath96.sol";
|
||||
import "../libs/LibStakingRichErrors.sol";
|
||||
import "./MixinVaultCore.sol";
|
||||
@@ -44,6 +45,7 @@ contract StakingPoolRewardVault is
|
||||
MixinVaultCore
|
||||
{
|
||||
|
||||
using LibSafeDowncast for uint256;
|
||||
using LibSafeMath for uint256;
|
||||
using LibSafeMath96 for uint96;
|
||||
|
||||
@@ -115,7 +117,7 @@ contract StakingPoolRewardVault is
|
||||
}
|
||||
|
||||
// update balance and transfer `amount` in ETH to staking contract
|
||||
balanceByPoolId[poolId].operatorBalance -= amount._downcastToUint96();
|
||||
balanceByPoolId[poolId].operatorBalance -= amount.downcastToUint96();
|
||||
stakingContractAddress.transfer(amount);
|
||||
|
||||
// notify
|
||||
@@ -140,7 +142,7 @@ contract StakingPoolRewardVault is
|
||||
}
|
||||
|
||||
// update balance and transfer `amount` in ETH to staking contract
|
||||
balanceByPoolId[poolId].membersBalance -= amount._downcastToUint96();
|
||||
balanceByPoolId[poolId].membersBalance -= amount.downcastToUint96();
|
||||
stakingContractAddress.transfer(amount);
|
||||
|
||||
// notify
|
||||
@@ -225,14 +227,14 @@ contract StakingPoolRewardVault is
|
||||
pure
|
||||
{
|
||||
// balances are stored as uint96; safely downscale.
|
||||
uint96 amount = amount256Bit._downcastToUint96();
|
||||
uint96 amount = amount256Bit.downcastToUint96();
|
||||
|
||||
// compute portions. One of the two must round down: the operator always receives the leftover from rounding.
|
||||
uint96 operatorPortion = amount._computePercentageCeil(balance.operatorShare);
|
||||
uint96 poolPortion = amount._sub(operatorPortion);
|
||||
uint96 poolPortion = amount.safeSub(operatorPortion);
|
||||
|
||||
// update balances
|
||||
balance.operatorBalance = balance.operatorBalance._add(operatorPortion);
|
||||
balance.membersBalance = balance.membersBalance._add(poolPortion);
|
||||
balance.operatorBalance = balance.operatorBalance.safeAdd(operatorPortion);
|
||||
balance.membersBalance = balance.membersBalance.safeAdd(poolPortion);
|
||||
}
|
||||
}
|
||||
|
@@ -18,8 +18,8 @@
|
||||
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "../libs/LibSafeMath.sol";
|
||||
import "../interfaces/IZrxVault.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibSafeMath.sol";
|
||||
import "@0x/contracts-asset-proxy/contracts/src/interfaces/IAssetProxy.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
|
||||
import "./MixinVaultCore.sol";
|
||||
@@ -105,7 +105,7 @@ contract ZrxVault is
|
||||
onlyNotInCatastrophicFailure
|
||||
{
|
||||
// update balance
|
||||
balances[owner] = balances[owner]._add(amount);
|
||||
balances[owner] = balances[owner].safeAdd(amount);
|
||||
|
||||
// notify
|
||||
emit ZrxDepositedIntoVault(msg.sender, owner, amount);
|
||||
@@ -167,7 +167,7 @@ contract ZrxVault is
|
||||
// update balance
|
||||
// note that this call will revert if trying to withdraw more
|
||||
// than the current balance
|
||||
balances[owner] = balances[owner]._sub(amount);
|
||||
balances[owner] = balances[owner].safeSub(amount);
|
||||
|
||||
// notify
|
||||
emit ZrxWithdrawnFromVault(msg.sender, owner, amount);
|
||||
|
Reference in New Issue
Block a user