Commit Graph

193 Commits

Author SHA1 Message Date
r4bbit
e251ec5c8f !refactor(RewardsStreamerMP): rename RewardsStreamerMP to StakeManager
This renames `RewardsStreamerMP` to `StakeManager`. The original name
only exists because the project has started with different versions of
the contract. Since the contract is no longer just dealing with MPs but
actually distributes rewards, it makes sense to make this the official
stake manager of the protocol.

**BREAKING CHANGE:**

- `RewardsStreamerMP` is now `StakeManager`
- `StakingManager__*` error selectors are now `StakeManager__*`
  selectors
2025-03-28 12:57:46 +01:00
r4bbit
d02daad8ef cleanup: specify exact compiler version
This is to avoid running into bugs in the future, in case the compiler
introduces one in the version range that was specified before.
2025-03-28 12:57:21 +01:00
r4bbit
9a6abd16c3 cleanup(KarmaNFT): remove unused Ownable import 2025-03-28 12:48:33 +01:00
r4bbit
7bd0c16872 !refactor(RewardsStreamerMP): remove VaultData.mpStaked
After doing somme work on merging `compound()` into `updateVault()`, we
noticed that both, `vault.mpStaked` and `vault.mpAccrued` are always
equal.

Therefore, we're removing `vault.mpStaked`.

BREAKING CHANGE:

- `VaultData.mpStaked` no longer exists, use `VaultData.mpAccrued`
instead.

- `Compound(address,uint256)` is now `VaultUpdated(address,uint256,uint256)`

- `AccountLeft(address)` is now `VaultLeft(address)`
2025-03-26 13:19:05 +01:00
r4bbit
ce982b9ce5 !refactor(Karma): remove mintAllowance()
This is no longer a necessary requirement.
This commit removes `mintAllowance()`, it's internal counterpart and its
usage.

BREAKING CHANGE:

`mintAllowance()` no longer exists.

Closes #192
2025-03-26 08:33:31 +01:00
r4bbit
695a208804 !refactor: rename getStakedBalance() -> stakedBalanceOf()
This is to align with all the other `mp*Of` and `mp*OfAccount`
functions as discussed in #188

BREAKING CHANGE:

`getStakedBalance(address)` is now `stakedBalanceOf(address)`

Closes #188
2025-03-25 20:25:46 +01:00
r4bbit
8e4aa682c1 !refactor(RewardsStreamerMP): rename internal functions and rewardIndex
This commit does the following changes:

`_getVaultPendingMP()` -> _`vaultPendingMP()`
`_liveTotalMP()` -> `_totalMP()`
`_liveRewardIndex()` -> `_rewardIndex()`
`updateRewardIndex()` -> `_updateRewardIndex()`

BREAKING CHANGE:

The previous public `rewardIndex` field is now called `lastRewardIndex`.

Closes #189
2025-03-25 17:43:41 +01:00
Ricardo Guilherme Schmidt
8df475aab8 fix(StakeManager): Allow extending the lock after increasing stake to allow account reaching absolute max MP
fix(MultiplierPointMath): Fix helper function to correctly estimate avaliable lock time

chore(spec): remove additional field which does not exist anymore
2025-03-25 17:14:17 +01:00
r4bbit
2e01e0d03b refactor(RewardsStreamerMP): merge compound() with _updateVault()
This commit merges `compound()` into `_updateVault()` as there's no
reason not to update vault without compounding it.

This was discussed in #187.

BREAKING CHANGE: A couple of APIs have been removed or replaced.

-> inline _compound into _updateVault()
-> remove compond() in favor of updateVaultMP()
-> rename updateVaultMP() to updateVault()
-> rename compoundAccount() to updateAccount()

Closes #187
2025-03-25 16:09:04 +01:00
Ricardo Guilherme Schmidt
0385522821 chore(tests): use UndefinedError in some cases 2025-03-21 18:21:57 +01:00
Ricardo Guilherme Schmidt
400923aed0 # This is a combination of 6 commits.
# This is the 1st commit message:

feat(RewardsStreamerMP.t): improve fuzz tests to test revert cases

fix(StakeMath): prevent uint256 overflow error
fix(StakeMath): prevent unstaking zero

# This is the commit message #2:

fix(StakeMath): prevent unstaking zero

# This is the commit message #3:

refactor(fuzz-tests): enhance readibility + test for unstake

# This is the commit message #4:

chore(tests): add compoud fuzz test

# This is the commit message #5:

chore(tests): Add Compound Fuzz Test

# This is the commit message #6:

chore (tests): fix fuzz test Unstake to always call compound function before unstake.
2025-03-21 18:21:57 +01:00
Andrea Franz
14eaf35091 test(certora): add rule to check Karma externalSupply is always <= totalDistributorAllocation 2025-03-20 16:28:45 +01:00
r4bbit
dabcf5c990 fix(RewardsStreamerMP): remove double totalMPStaked substraction 2025-03-20 14:03:28 +01:00
Andrea Franz
508885bed5 chore(RewardsStreamerMP): allow users to stake again without increasing the lock period 2025-03-19 15:36:55 +01:00
r4bbit
4fa3eb06e0 feat(RewardsStreamerMP): allow for staking multiple times with lock
This commit enables users to stake multiple times into the same vault
with a lock increase.

If their total lock increase goes beyond the maximum lock period,
staking will revert. In this case users will have to create a new vault.

Closes #152

Co-authored-by: Andrea Franz <andrea@gravityblast.com>
2025-03-19 15:36:55 +01:00
r4bbit
2de338c673 chore(release): 0.1.1 v0.1.1 2025-03-18 11:56:59 +01:00
Andrea Franz
47b9fd0ebe chore(KarmaNFT): update deploy scripts with proper svg strings 2025-03-14 16:01:34 +01:00
r4bbit
28cc5d6b2a chore: add deployment script for metadata generator 2025-03-14 16:01:34 +01:00
r4bbit
5e2dcbabd1 feat(RewardsStreamerMP): add function to compound all MPs for an account
Closes #175
2025-03-14 15:00:26 +01:00
r4bbit
619b541d2a fix(RewardsStreamerMP): prevent attack causes accounts to not accrue MP
Closes #176
2025-03-14 13:25:09 +01:00
Andrea Franz
54fd86ddf4 chore(KarmaNFT): use image_data as field when there's a raw inlined image 2025-03-14 13:16:25 +01:00
r4bbit
ccd4bec8c7 docs: adjust docs to latest changes 2025-03-12 11:18:41 +01:00
Andrea Franz
4d10993cc9 chore(certora): add rule to test the sum of all distributors allocation 2025-03-11 13:25:00 +01:00
Andrea Franz
26926c1d5e test(certora): Karma.totalDistributorAllocation can only increase (#166) 2025-03-11 08:24:57 +01:00
r4bbit
fed4446749 fix(ci): run MPLessEqualMaxMP spec on CI (#171) 2025-03-11 08:24:39 +01:00
r4bbit
ab541a818e refactor: remove unnecessary usage of __Ownable__Init
In this version we only need to call `transferOwnership()` (which is
also what's called by `__Ownable__init`).
2025-03-10 13:16:49 +01:00
r4bbit
828d65ad65 refactor(specs): exclude rule instead of including other rules 2025-03-07 15:05:27 +01:00
r4bbit
6c89793854 fix(certora): fix timeout on certora with specific config 2025-03-07 13:17:46 +01:00
Ricardo Guilherme Schmidt
e4d21b6caf feat(RewardsStreamerMP): enable extending lock period 2025-03-06 16:50:40 +01:00
Andrea Franz
50439be124 test(certora): ensure Karma owneable functions are callable only by the owner 2025-03-06 16:04:27 +01:00
r4bbit
a2b06590d9 docs(README): add sepolia deployment addresses 2025-03-06 12:08:01 +01:00
Andrea Franz
7e30c0b718 test(certora): transfer not allowed in the Karma token 2025-03-06 11:51:40 +01:00
Andrea Franz
32bb2356dc chore(KarmaNFT): use deploy script in tests 2025-03-06 11:50:07 +01:00
Andrea Franz
96e50c6818 chore(KarmaNFT): add deploy script and remove nft address var in the metadata generators 2025-03-05 11:52:30 +01:00
r4bbit
aa1addbfcd chore: downgrade to paris
We put `cancun` as evm version into the foundry toml by mistake and
ended up building on top of it with certain assumptions.

Turns out that the network we're deploying to does not support that
version so we have to compile with `paris`.

This however, also requires a downgrade of the open zeppelin libraries,
which in turn requires changes in our code base. Primarily related to
initialization of `OwnableUpgradeable` and upgrades via UUPSUpgradeable.

This commit makes all the necessary changes.
2025-03-05 11:47:30 +01:00
r4bbit
d7e0d532d1 cleanup: address linter warnings 2025-03-05 11:20:21 +01:00
Andrea Franz
62684698e5 chore(RewardsStreamerMP): remove unused ReentrancyGuardUpgradeable 2025-03-05 10:32:30 +01:00
Andrea Franz
aa3442b577 feat(Karma): make karma upgradeable 2025-02-28 14:39:15 +01:00
r4bbit
ef3abad941 refactor(TrustedCodehashAccess): add storage gap for upgrade safety
Closes #131
2025-02-28 12:07:45 +01:00
r4bbit
60081c14fb refactor: cleanup, move code around, and adjust deployscript 2025-02-28 12:05:18 +01:00
r4bbit
5755138d8a refactor(StakeMath): remove unused errors 2025-02-28 11:48:03 +01:00
Andrea Franz
ed3577f8c4 feat(Karma): allocate external rewards using the Karma contract 2025-02-27 20:48:39 +01:00
Ricardo Guilherme Schmidt
54e80e117f chore(tests): add fuzz test for rewards 2025-02-27 11:25:20 +01:00
r4bbit
48db1bffb6 docs: complete natspec comments 2025-02-26 13:04:36 +01:00
r4bbit
a51d5199ae docs(RewardsStreamerMP): add natspec comments 2025-02-26 08:31:29 +01:00
r4bbit
73e5b38da0 specs(EmergencyMode): add complementary rule for emergency mode
This rule checks explicitly which functions should not be callable when
emegency mode is enabled.
2025-02-26 08:31:09 +01:00
r4bbit
7575e965a2 refactor(RewardsStreamerMP.t.sol): fix test that causes stack too deep
error

One of our tests uses too many local variables and causes stack too deep
errors unless optimized `--via-ir`.

We've introduced `--via-ir` to work around that until a proper fix is
done. The downside of using that option is that compilation times get
significantly longer.

This commit restructures the test such that it doesn't use as many local
variables.
2025-02-25 15:06:58 +01:00
Ricardo Guilherme Schmidt
3bd9c46fb3 chore(tests): Add fuzz tests 2025-02-24 15:29:10 +01:00
Ricardo Guilherme Schmidt
8c982924b8 chore(foundry.toml): fix max_test_rejects 2025-02-24 15:29:10 +01:00
Ricardo Guilherme Schmidt
56fb0f0f38 chore(MultiplierPointsMath): fix MAX_BALANCE 2025-02-24 15:29:10 +01:00