Files
staking-reward-streamer/.gas-snapshot
r4bbit 56d98ed44e feat(Karma): add ability to slash Karma
This commit introduces the ability for accounts with the necessary
privileges to slash other accounts. The amount to be slashed is
controlled via the `slashPercentage`.

The amount to be slashed will be calculated from the account's current
Karma balance, which is the total Karma across all distributors, minus
the known `slashAmount` for that account.
Under the hood, it calculates the slash amount for each item
(distributor or internal balance). This ensure we reduce the slash
amount correctly, if a reward distributor is removed.

**Example**:

For example, if the account has 100 Karma and hasn't been slashed
before, the account's balances would look like this:

```
rawBalance: 100
slashAmount: 0
balance: 100
```

Therefore, `balanceOf(account)` will return `100`.
If slashing burns 10% of the account's balance, then, after calling
`slash(account)`, the `slashAmount` will be increased accordingly:

```
rawBalance: 100
slashAmount: 10
balance: 90
```

Notice that `rawBalance` isn't actually a new contract property, but
there's a new internal function `_rawBalanceAndSlashAmountOf(account)`, which is used
by `balanceOf(account)` to determine the effective balance of an
account.

**Authorization**

In order to slash accounts, the message sender needs to have the newly
introduced `SLASHER_ROLE`.

Closes #212
2025-06-05 14:03:00 +02:00

214 lines
13 KiB
Plaintext

AddRewardDistributorTest:testAddKarmaDistributorOnlyAdmin() (gas: 438258)
AddRewardDistributorTest:testAddRewardDistributorAsOtherAdmin() (gas: 182935)
AddRewardDistributorTest:testBalanceOf() (gas: 456642)
AddRewardDistributorTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83805)
AddRewardDistributorTest:testMintOnlyAdmin() (gas: 429097)
AddRewardDistributorTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163471)
AddRewardDistributorTest:testRemoveUnknownKarmaDistributor() (gas: 41666)
AddRewardDistributorTest:testTotalSupply() (gas: 359391)
AddRewardDistributorTest:testTransfersNotAllowed() (gas: 61947)
AddRewardDistributorTest:test_RevertWhen_SenderIsNotDefaultAdmin() (gas: 68406)
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 93554)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 336067)
EmergencyExitTest:test_EmergencyExitBasic() (gas: 524580)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 937615)
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 479110)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 452444)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 484810)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39176)
FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1009, μ: 583242, ~: 549046)
FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1009, μ: 808244, ~: 777237)
FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1001, μ: 588167, ~: 578267)
FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1008, μ: 961506, ~: 961235)
FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1008, μ: 600126, ~: 574225)
FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1001, μ: 650444, ~: 653254)
FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1008, μ: 377931, ~: 346087)
FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1009, μ: 803049, ~: 780598)
FuzzTests:testFuzz_UpdateVault(uint128,uint64,uint64) (runs: 1009, μ: 583265, ~: 549069)
IntegrationTest:testStakeFoo() (gas: 2348931)
KarmaNFTTest:testApproveNotAllowed() (gas: 10507)
KarmaNFTTest:testGetApproved() (gas: 10531)
KarmaNFTTest:testIsApprovedForAll() (gas: 10705)
KarmaNFTTest:testSafeTransferNotAllowed() (gas: 10688)
KarmaNFTTest:testSafeTransferWithDataNotAllowed() (gas: 10884)
KarmaNFTTest:testSetApprovalForAllNotAllowed() (gas: 8519)
KarmaNFTTest:testSetMetadataGenerator() (gas: 1012377)
KarmaNFTTest:testSetMetadataGeneratorRevert() (gas: 1006937)
KarmaNFTTest:testTokenURI() (gas: 1112435)
KarmaNFTTest:testTransferNotAllowed() (gas: 10701)
KarmaOwnershipTest:testAddKarmaDistributorOnlyAdmin() (gas: 438246)
KarmaOwnershipTest:testBalanceOf() (gas: 456642)
KarmaOwnershipTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83827)
KarmaOwnershipTest:testInitialOwner() (gas: 20587)
KarmaOwnershipTest:testMintOnlyAdmin() (gas: 429119)
KarmaOwnershipTest:testOwnershipTransfer() (gas: 94420)
KarmaOwnershipTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163392)
KarmaOwnershipTest:testRemoveUnknownKarmaDistributor() (gas: 41654)
KarmaOwnershipTest:testTotalSupply() (gas: 359391)
KarmaOwnershipTest:testTransfersNotAllowed() (gas: 61947)
KarmaTest:testAddKarmaDistributorOnlyAdmin() (gas: 438224)
KarmaTest:testBalanceOf() (gas: 456642)
KarmaTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83805)
KarmaTest:testMintOnlyAdmin() (gas: 429097)
KarmaTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163437)
KarmaTest:testRemoveUnknownKarmaDistributor() (gas: 41654)
KarmaTest:testTotalSupply() (gas: 359391)
KarmaTest:testTransfersNotAllowed() (gas: 61925)
LeaveTest:test_LeaveShouldKeepFundsLockedInStakeVault() (gas: 9938411)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 10011059)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 333238)
LeaveTest:test_TrustNewStakeManager() (gas: 9944491)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1008, μ: 384560, ~: 384588)
LockTest:test_LockFailsWithNoStake() (gas: 89700)
LockTest:test_LockFailsWithZero() (gas: 343310)
LockTest:test_LockMultipleTimesExceedMaxLock() (gas: 746921)
LockTest:test_LockWithPriorLock() (gas: 681021)
LockTest:test_LockWithoutPriorLock() (gas: 521888)
LockTest:test_RevertWhenVaultToLockIsEmpty() (gas: 89700)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 2056691)
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 5240)
MathTest:test_CalcAccrueMP() (gas: 8599)
MathTest:test_CalcBonusMP() (gas: 30744)
MathTest:test_CalcInitialMP() (gas: 5836)
MathTest:test_CalcMaxAccruedMP() (gas: 4886)
MathTest:test_CalcMaxTotalMP() (gas: 31506)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 918979)
NFTMetadataGeneratorSVGTest:testGenerateMetadata() (gas: 92580)
NFTMetadataGeneratorSVGTest:testSetImageStrings() (gas: 77581)
NFTMetadataGeneratorSVGTest:testSetImageStringsRevert() (gas: 35891)
NFTMetadataGeneratorURLTest:testGenerateMetadata() (gas: 108341)
NFTMetadataGeneratorURLTest:testSetBaseURL() (gas: 59131)
NFTMetadataGeneratorURLTest:testSetBaseURLRevert() (gas: 36066)
OverflowTest:testAddKarmaDistributorOnlyAdmin() (gas: 438246)
OverflowTest:testBalanceOf() (gas: 456642)
OverflowTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83805)
OverflowTest:testMintOnlyAdmin() (gas: 429097)
OverflowTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163437)
OverflowTest:testRemoveUnknownKarmaDistributor() (gas: 41666)
OverflowTest:testTotalSupply() (gas: 359391)
OverflowTest:testTransfersNotAllowed() (gas: 61925)
OverflowTest:test_RevertWhen_MintingCausesOverflow() (gas: 129592)
OverflowTest:test_RevertWhen_SettingRewardCausesOverflow() (gas: 127920)
RLNTest:test_initial_state() (gas: 65400)
RLNTest:test_register_fails_when_amount_lt_minimal_deposit() (gas: 161453)
RLNTest:test_register_fails_when_duplicate_identity_commitments() (gas: 444949)
RLNTest:test_register_fails_when_index_exceeds_set_size() (gas: 2824923)
RLNTest:test_register_succeeds() (gas: 579610)
RLNTest:test_release_fails_when_freeze_period() (gas: 529887)
RLNTest:test_release_fails_when_no_withdrawal() (gas: 38343)
RLNTest:test_release_succeeds() (gas: 576511)
RLNTest:test_slash_fails_when_invalid_proof() (gas: 399809)
RLNTest:test_slash_fails_when_not_registered() (gas: 59667)
RLNTest:test_slash_fails_when_receiver_is_zero() (gas: 351215)
RLNTest:test_slash_fails_when_self_slashing() (gas: 360067)
RLNTest:test_slash_succeeds() (gas: 1024025)
RLNTest:test_withdraw_fails_when_already_underways() (gas: 468594)
RLNTest:test_withdraw_fails_when_invalid_proof() (gas: 399356)
RLNTest:test_withdraw_fails_when_not_registered() (gas: 57129)
RLNTest:test_withdraw_succeeds() (gas: 480413)
RemoveRewardDistributorTest:testAddKarmaDistributorOnlyAdmin() (gas: 438248)
RemoveRewardDistributorTest:testBalanceOf() (gas: 456715)
RemoveRewardDistributorTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83783)
RemoveRewardDistributorTest:testMintOnlyAdmin() (gas: 429087)
RemoveRewardDistributorTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163461)
RemoveRewardDistributorTest:testRemoveRewardDistributor() (gas: 162967)
RemoveRewardDistributorTest:testRemoveRewardDistributorAsOtherAdmin() (gas: 243532)
RemoveRewardDistributorTest:testRemoveUnknownKarmaDistributor() (gas: 41672)
RemoveRewardDistributorTest:testTotalSupply() (gas: 359464)
RemoveRewardDistributorTest:testTransfersNotAllowed() (gas: 61925)
RemoveRewardDistributorTest:test_RevertWhen_SenderIsNotDefaultAdmin() (gas: 66543)
SetRewardTest:testAddKarmaDistributorOnlyAdmin() (gas: 438280)
SetRewardTest:testBalanceOf() (gas: 456642)
SetRewardTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83827)
SetRewardTest:testMintOnlyAdmin() (gas: 429119)
SetRewardTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163404)
SetRewardTest:testRemoveUnknownKarmaDistributor() (gas: 41666)
SetRewardTest:testSetRewardAsAdmin() (gas: 135089)
SetRewardTest:testSetRewardAsOperator() (gas: 143840)
SetRewardTest:testSetRewardAsOtherAdmin() (gas: 204104)
SetRewardTest:testTotalSupply() (gas: 359436)
SetRewardTest:testTransfersNotAllowed() (gas: 61969)
SetRewardTest:test_RevertWhen_SenderIsNotDefaultAdmin() (gas: 43572)
SetRewardTest:test_RevertWhen_SenderIsNotOperator() (gas: 61893)
SlashAmountOfTest:testAddKarmaDistributorOnlyAdmin() (gas: 438224)
SlashAmountOfTest:testBalanceOf() (gas: 456642)
SlashAmountOfTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83783)
SlashAmountOfTest:testFuzz_SlashAmountOf(uint256,uint256,uint256) (runs: 1002, μ: 407788, ~: 408571)
SlashAmountOfTest:testMintOnlyAdmin() (gas: 429075)
SlashAmountOfTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163437)
SlashAmountOfTest:testRemoveUnknownKarmaDistributor() (gas: 41654)
SlashAmountOfTest:testTotalSupply() (gas: 359391)
SlashAmountOfTest:testTransfersNotAllowed() (gas: 61990)
SlashAmountOfTest:test_SlashAmountOf() (gas: 327608)
SlashTest:testAddKarmaDistributorOnlyAdmin() (gas: 438270)
SlashTest:testBalanceOf() (gas: 456648)
SlashTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83827)
SlashTest:testFuzz_Slash(uint256) (runs: 1009, μ: 280204, ~: 280146)
SlashTest:testMintOnlyAdmin() (gas: 429131)
SlashTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163461)
SlashTest:testRemoveRewardDistributorShouldReduceSlashAmount() (gas: 610762)
SlashTest:testRemoveUnknownKarmaDistributor() (gas: 41683)
SlashTest:testTotalSupply() (gas: 359420)
SlashTest:testTransfersNotAllowed() (gas: 61969)
SlashTest:test_RevertWhen_KarmaBalanceIsInvalid() (gas: 71550)
SlashTest:test_RevertWhen_SenderIsNotDefaultAdminOrSlasher() (gas: 43232)
SlashTest:test_Slash() (gas: 428385)
SlashTest:test_SlashRemainingBalanceIfBalanceIsLow() (gas: 251800)
StakeManager_RewardsTest:testRewardsBalanceOf() (gas: 2712133)
StakeManager_RewardsTest:testSetRewards() (gas: 278149)
StakeManager_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 63800)
StakeManager_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 103558)
StakeManager_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39367)
StakeManager_RewardsTest:testTotalRewardsSupply() (gas: 1280822)
StakeTest:test_StakeMultipleAccounts() (gas: 666808)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 721800)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1324461)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 615074)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 645732)
StakeTest:test_StakeMultipleTimesDoesNotExceedsMaxMP() (gas: 1780357)
StakeTest:test_StakeMultipleTimesWithLockIncreaseAtSameBlock() (gas: 691504)
StakeTest:test_StakeMultipleTimesWithLockZeroAfterMaxLock() (gas: 1191100)
StakeTest:test_StakeOneAccount() (gas: 390362)
StakeTest:test_StakeOneAccountAndRewards() (gas: 445417)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 825302)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 714792)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 381583)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 382223)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 382268)
StakeVaultMigrationTest:testMigrateToVault() (gas: 1157152)
StakeVaultMigrationTest:test_RevertWhenDestinationVaultIsNotRegistered() (gas: 166681)
StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 631911)
StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 70563)
StakeVaultTest:testOwner() (gas: 15331)
StakingTokenTest:testOwner() (gas: 15331)
StakingTokenTest:testStakeToken() (gas: 13156)
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 2021691)
UnstakeTest:test_RevertWhen_FundsLocked() (gas: 461737)
UnstakeTest:test_StakeMultipleAccounts() (gas: 666787)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 721844)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1324527)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 615140)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 645731)
UnstakeTest:test_StakeMultipleTimesDoesNotExceedsMaxMP() (gas: 1780413)
UnstakeTest:test_StakeMultipleTimesWithLockIncreaseAtSameBlock() (gas: 691459)
UnstakeTest:test_StakeMultipleTimesWithLockZeroAfterMaxLock() (gas: 1191111)
UnstakeTest:test_StakeOneAccount() (gas: 390384)
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 445416)
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 825301)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 714772)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 381605)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 382223)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 382268)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 754339)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 1037350)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 1322871)
UnstakeTest:test_UnstakeOneAccount() (gas: 759178)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 719489)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 673681)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 722241)
UpdateVaultTest:test_UpdateAccount() (gas: 2587427)
UpgradeTest:test_RevertWhenNotOwner() (gas: 3696209)
UpgradeTest:test_UpgradeStakeManager() (gas: 9855347)
VaultRegistrationTest:test_VaultRegistration() (gas: 90138)
WithdrawTest:testOwner() (gas: 15365)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 373408)