From aebaa10321db824cc1fa5aaf83b289753ead9ede Mon Sep 17 00:00:00 2001 From: itofarina Date: Fri, 26 Jul 2024 16:05:49 -0300 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20staking:=20adopt=20safeTra?= =?UTF-8?q?nsfer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gas-snapshot | 90 ++++++++++++++++++++--------------------- contracts/StakedEXA.sol | 10 ++--- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 3bac0afd..4f3320e0 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -461,32 +461,32 @@ StakedEXATest:invariantNoDuplicatedReward() (runs: 10, calls: 5000, reverts: 0) StakedEXATest:invariantRewardsUpOnly() (runs: 10, calls: 5000, reverts: 0) StakedEXATest:invariantShareValueIsOne() (runs: 10, calls: 5000, reverts: 0) StakedEXATest:testAlreadyListedError() (gas: 41653) -StakedEXATest:testAvgIndex(uint256[3],uint256[2]) (runs: 256, μ: 1205749, ~: 1245918) -StakedEXATest:testAvgStartTime(uint256[3],uint256[2]) (runs: 256, μ: 1192122, ~: 1232291) -StakedEXATest:testBalanceOfDeposit(uint80) (runs: 256, μ: 355392, ~: 362436) +StakedEXATest:testAvgIndex(uint256[3],uint256[2]) (runs: 256, μ: 1213306, ~: 1274322) +StakedEXATest:testAvgStartTime(uint256[3],uint256[2]) (runs: 256, μ: 1199679, ~: 1260695) +StakedEXATest:testBalanceOfDeposit(uint80) (runs: 256, μ: 355442, ~: 362487) StakedEXATest:testBalanceOfWithdraw(uint256) (runs: 256, μ: 60547, ~: 60554) -StakedEXATest:testCanChangeRewardsDurationWhenDisabled() (gas: 168214) -StakedEXATest:testClaimAfterHarvest() (gas: 837889) -StakedEXATest:testClaimAndUnstake() (gas: 1477430) -StakedEXATest:testClaimAndWithdrawAfterRefTime() (gas: 1085389) -StakedEXATest:testClaimBeforeFirstHarvest() (gas: 539822) -StakedEXATest:testDepositEvent(uint256) (runs: 256, μ: 364280, ~: 363984) -StakedEXATest:testDepositShouldClaim(uint256[2],uint32) (runs: 256, μ: 827538, ~: 742070) -StakedEXATest:testDepositWithdrawAvgStartTimeAndIndex(uint256[3],uint256,uint256[5]) (runs: 256, μ: 1748072, ~: 1798047) -StakedEXATest:testEarnedWithTime(uint256) (runs: 256, μ: 35406, ~: 35700) +StakedEXATest:testCanChangeRewardsDurationWhenDisabled() (gas: 168929) +StakedEXATest:testClaimAfterHarvest() (gas: 840855) +StakedEXATest:testClaimAndUnstake() (gas: 1486266) +StakedEXATest:testClaimAndWithdrawAfterRefTime() (gas: 1091264) +StakedEXATest:testClaimBeforeFirstHarvest() (gas: 539902) +StakedEXATest:testDepositEvent(uint256) (runs: 256, μ: 364332, ~: 364035) +StakedEXATest:testDepositShouldClaim(uint256[2],uint32) (runs: 256, μ: 832695, ~: 742204) +StakedEXATest:testDepositWithdrawAvgStartTimeAndIndex(uint256[3],uint256,uint256[5]) (runs: 256, μ: 1751346, ~: 1809626) +StakedEXATest:testEarnedWithTime(uint256) (runs: 256, μ: 35420, ~: 35700) StakedEXATest:testEmergencyAdminCanPauseNotUnpause() (gas: 159083) -StakedEXATest:testFinishDistributionEmitEvent() (gas: 402024) -StakedEXATest:testFinishDistributionLetsClaimUnclaimed() (gas: 1504474) -StakedEXATest:testFinishDistributionStopsEmission() (gas: 1484193) -StakedEXATest:testFinishDistributionThatAlreadyFinished() (gas: 435957) -StakedEXATest:testFinishDistributionTransfersRemainingToSavings() (gas: 111488) +StakedEXATest:testFinishDistributionEmitEvent() (gas: 402739) +StakedEXATest:testFinishDistributionLetsClaimUnclaimed() (gas: 1516941) +StakedEXATest:testFinishDistributionStopsEmission() (gas: 1496660) +StakedEXATest:testFinishDistributionThatAlreadyFinished() (gas: 436008) +StakedEXATest:testFinishDistributionTransfersRemainingToSavings() (gas: 112203) StakedEXATest:testGrantRevokeEmergencyAdmin() (gas: 107238) StakedEXATest:testGrantRevokePauser() (gas: 107257) StakedEXATest:testHandlerClaim(uint8) (runs: 256, μ: 302723, ~: 302723) -StakedEXATest:testHandlerDeposit(uint80) (runs: 256, μ: 798931, ~: 810004) -StakedEXATest:testHandlerHarvest(uint64) (runs: 256, μ: 333388, ~: 332884) -StakedEXATest:testHandlerNotifyRewardAmount(uint64) (runs: 256, μ: 128793, ~: 124447) -StakedEXATest:testHandlerSetDuration(uint32) (runs: 256, μ: 144441, ~: 163795) +StakedEXATest:testHandlerDeposit(uint80) (runs: 256, μ: 798962, ~: 810106) +StakedEXATest:testHandlerHarvest(uint64) (runs: 256, μ: 333417, ~: 332884) +StakedEXATest:testHandlerNotifyRewardAmount(uint64) (runs: 256, μ: 128752, ~: 124435) +StakedEXATest:testHandlerSetDuration(uint32) (runs: 256, μ: 145984, ~: 164510) StakedEXATest:testHandlerWithdraw(uint256) (runs: 256, μ: 70017, ~: 70024) StakedEXATest:testHarvest() (gas: 197934) StakedEXATest:testHarvestAmountWithReducedAllowance() (gas: 215352) @@ -494,34 +494,34 @@ StakedEXATest:testHarvestEffectOnRewardData() (gas: 190936) StakedEXATest:testHarvestEmitsRewardAmountNotified() (gas: 188932) StakedEXATest:testHarvestZero() (gas: 236769) StakedEXATest:testInitialValues() (gas: 89096) -StakedEXATest:testInsufficientBalanceError(uint256) (runs: 256, μ: 65350, ~: 65475) -StakedEXATest:testMultipleClaimsVsOne() (gas: 25921528) +StakedEXATest:testInsufficientBalanceError(uint256) (runs: 256, μ: 65339, ~: 65475) +StakedEXATest:testMultipleClaimsVsOne() (gas: 26036303) StakedEXATest:testMultipleHarvests() (gas: 461984) -StakedEXATest:testNoRewardsAfterPeriod(uint256) (runs: 256, μ: 1559522, ~: 1565854) +StakedEXATest:testNoRewardsAfterPeriod(uint256) (runs: 256, μ: 1569722, ~: 1576154) StakedEXATest:testNotPausingRoleError() (gas: 39503) -StakedEXATest:testNotifyRewardAmount(uint256,uint256) (runs: 256, μ: 131160, ~: 131108) -StakedEXATest:testNotifyRewardWithUnderlyingAsset() (gas: 501757) +StakedEXATest:testNotifyRewardAmount(uint256,uint256) (runs: 256, μ: 131174, ~: 131110) +StakedEXATest:testNotifyRewardWithUnderlyingAsset() (gas: 501808) StakedEXATest:testOnlyAdminEnableReward() (gas: 1198763) -StakedEXATest:testOnlyAdminFinishDistribution() (gas: 190251) +StakedEXATest:testOnlyAdminFinishDistribution() (gas: 190966) StakedEXATest:testOnlyAdminNotifyRewardAmount() (gas: 204608) StakedEXATest:testOnlyAdminSetProvider() (gas: 143592) StakedEXATest:testOnlyAdminSetProviderRatio() (gas: 143239) StakedEXATest:testOnlyAdminSetRewardsDuration() (gas: 152845) StakedEXATest:testOnlyAdminSetSavings() (gas: 141010) -StakedEXATest:testPausable() (gas: 1154702) -StakedEXATest:testPausableClaim() (gas: 639287) +StakedEXATest:testPausable() (gas: 1154913) +StakedEXATest:testPausableClaim() (gas: 639338) StakedEXATest:testPausableHarvest() (gas: 344660) StakedEXATest:testPauserCanPauseUnpause() (gas: 157833) StakedEXATest:testPenaltyGrowthRange() (gas: 67211) StakedEXATest:testPenaltyThresholdRange() (gas: 37156) -StakedEXATest:testPermitAndDeposit() (gas: 373033) -StakedEXATest:testResetDepositAfterRefTime(uint256) (runs: 256, μ: 1014800, ~: 1014484) -StakedEXATest:testRewardAmountNotifiedEvent(uint256) (runs: 256, μ: 105804, ~: 106687) +StakedEXATest:testPermitAndDeposit() (gas: 373084) +StakedEXATest:testResetDepositAfterRefTime(uint256) (runs: 256, μ: 1020699, ~: 1020382) +StakedEXATest:testRewardAmountNotifiedEvent(uint256) (runs: 256, μ: 105863, ~: 106687) StakedEXATest:testRewardNotListedError() (gas: 1114684) -StakedEXATest:testRewardPaidEvent(uint256,uint256) (runs: 256, μ: 807785, ~: 751764) -StakedEXATest:testRewardsAmounts(uint256) (runs: 256, μ: 1566769, ~: 1566367) +StakedEXATest:testRewardPaidEvent(uint256,uint256) (runs: 256, μ: 814120, ~: 862889) +StakedEXATest:testRewardsAmounts(uint256) (runs: 256, μ: 1577071, ~: 1576667) StakedEXATest:testRewardsDurationSetEvent(uint40) (runs: 256, μ: 52073, ~: 52056) -StakedEXATest:testSetDuration(uint256,uint40) (runs: 256, μ: 58992, ~: 59260) +StakedEXATest:testSetDuration(uint256,uint40) (runs: 256, μ: 59017, ~: 59260) StakedEXATest:testSetMarketAddressZero() (gas: 37124) StakedEXATest:testSetMarketOnlyAdmin() (gas: 1266966) StakedEXATest:testSetMinTime() (gas: 81993) @@ -530,18 +530,18 @@ StakedEXATest:testSetPenaltyThreshold() (gas: 81958) StakedEXATest:testSetProviderRatioOverOneError() (gas: 37156) StakedEXATest:testSetProviderZeroAddressError() (gas: 37175) StakedEXATest:testSetSavingsZeroAddressError() (gas: 37284) -StakedEXATest:testTotalSupplyDeposit(uint80) (runs: 256, μ: 354885, ~: 361929) +StakedEXATest:testTotalSupplyDeposit(uint80) (runs: 256, μ: 354935, ~: 361980) StakedEXATest:testTotalSupplyWithdraw(uint256) (runs: 256, μ: 61972, ~: 61979) -StakedEXATest:testUntransferable(uint80) (runs: 256, μ: 374550, ~: 382492) -StakedEXATest:testWithdrawEvent(uint256) (runs: 256, μ: 520266, ~: 519960) -StakedEXATest:testWithdrawSameAmountRewardsShouldEqual(uint256,uint256) (runs: 256, μ: 1067053, ~: 1131617) -StakedEXATest:testWithdrawWithRewards(uint256) (runs: 256, μ: 873909, ~: 873603) +StakedEXATest:testUntransferable(uint80) (runs: 256, μ: 374600, ~: 382543) +StakedEXATest:testWithdrawEvent(uint256) (runs: 256, μ: 520347, ~: 520040) +StakedEXATest:testWithdrawSameAmountRewardsShouldEqual(uint256,uint256) (runs: 256, μ: 1077908, ~: 1143318) +StakedEXATest:testWithdrawWithRewards(uint256) (runs: 256, μ: 879786, ~: 879479) StakedEXATest:testZeroRateError() (gas: 59289) -StakingPreviewerTest:testAllClaimable() (gas: 431357) -StakingPreviewerTest:testAllClaimed() (gas: 630691) -StakingPreviewerTest:testAllEarned() (gas: 316375) -StakingPreviewerTest:testAllRewards() (gas: 485872) -StakingPreviewerTest:testStaking() (gas: 528432) +StakingPreviewerTest:testAllClaimable() (gas: 431408) +StakingPreviewerTest:testAllClaimed() (gas: 632923) +StakingPreviewerTest:testAllEarned() (gas: 316426) +StakingPreviewerTest:testAllRewards() (gas: 485923) +StakingPreviewerTest:testStaking() (gas: 528483) SwapperTest:testSwapBasic() (gas: 216831) SwapperTest:testSwapWithAllowance() (gas: 481530) SwapperTest:testSwapWithInaccurateSlippageSendsETHToAccount() (gas: 297968) diff --git a/contracts/StakedEXA.sol b/contracts/StakedEXA.sol index 501726d3..04413bd4 100644 --- a/contracts/StakedEXA.sol +++ b/contracts/StakedEXA.sol @@ -193,14 +193,14 @@ contract StakedEXA is uint256 claimableAmount = Math.max(rawClaimable(reward, account, amount), claimedAmount); // due to excess exposure uint256 claimAmount = claimableAmount - claimedAmount; if (claimAmount != 0) { - reward.transfer(account, claimAmount); + reward.safeTransfer(account, claimAmount); emit RewardPaid(reward, account, claimAmount); } uint256 rawEarned = earned(reward, account, amount); // due to rounding uint256 saveAmount = rawEarned <= claimableAmount + savedAmount ? 0 : rawEarned - claimableAmount - savedAmount; - if (saveAmount != 0) reward.transfer(savings, saveAmount); + if (saveAmount != 0) reward.safeTransfer(savings, saveAmount); } /// @notice Notifies the contract about a reward amount. @@ -388,11 +388,11 @@ contract StakedEXA is if (saveAmount != 0) { saved[msg.sender][reward] = savedAmount + saveAmount; - reward.transfer(savings, saveAmount); + reward.safeTransfer(savings, saveAmount); } } if (claimAmount != 0) { - reward.transfer(msg.sender, claimAmount); + reward.safeTransfer(msg.sender, claimAmount); emit RewardPaid(reward, msg.sender, claimAmount); } } @@ -429,7 +429,7 @@ contract StakedEXA is if (block.timestamp < rewards[reward].finishAt) { uint256 finishAt = rewards[reward].finishAt; rewards[reward].finishAt = uint40(block.timestamp); - reward.transfer(savings, (finishAt - block.timestamp) * rewards[reward].rate); + reward.safeTransfer(savings, (finishAt - block.timestamp) * rewards[reward].rate); } emit DistributionFinished(reward, msg.sender);