Commit Graph

89 Commits

Author SHA1 Message Date
Ricardo Guilherme Schmidt 5d204fee27 refactor: remove restake ability from the same vault 2024-08-31 00:15:06 -03:00
Ricardo Guilherme Schmidt 9e1192dc00 fix: revert line_lenght to 110 2024-08-28 16:36:32 -03:00
Ricardo Guilherme Schmidt 99370f1a23 fix: ran foundryup, reverted to 120 max chars and ran forge fmt 2024-08-28 16:13:53 -03:00
Ricardo Guilherme Schmidt 5af8d35e97 fix: update foundry.toml line_lenght to 110 to fix conflict with prettier 2024-08-27 13:34:54 -03:00
Ricardo Guilherme Schmidt 7bf91d45b2 fix: adorno and workaroud test 2024-08-27 12:56:58 -03:00
Ricardo Guilherme Schmidt 6744ce19ec WIP: add estimatied MPs to migration system 2024-08-15 00:35:10 -03:00
Ricardo Guilherme Schmidt 522e4ae174 fix: shift mps not minted in stake epoch to final epoch of account MP generation 2024-08-09 15:57:49 -03:00
Ricardo Guilherme Schmidt e213629cc5 WIP: improve gas, fix halfway epoch stake estimation, reject too low stake amount, fix doubling totalSupply of epochs, add view to calculate MPs for externally any amount for any delta time 2024-08-07 20:09:34 -03:00
Ricardo Guilherme Schmidt ca0fb9a9d9 chore: remove old comments 2024-08-07 11:59:31 -03:00
Ricardo Guilherme Schmidt 99ee39d170 chore: remove console.logs and old comments 2024-08-07 11:58:23 -03:00
Ricardo Guilherme Schmidt 2453e18d69 fix: remove from estimation mps that would not be minted in currentEpoch when account starts staking in middle of epoch 2024-08-05 16:36:32 -03:00
Ricardo Guilherme Schmidt c1f283876c fix: mp estimation to exact correct values 2024-08-01 12:51:03 -03:00
r4bbit 60d80bf4b2
WIP: more mp estimation debugging 2024-07-19 17:01:43 +02:00
r4bbit be137c7a9e
WIP: fixing one-off error for MP estimation 2024-07-19 14:23:22 +02:00
r4bbit ec98278081
WIP: continue implementing mp estimation 2024-07-18 14:28:59 +02:00
r4bbit 95f06b4d70
WIP: make code compile again 2024-07-17 16:20:02 +02:00
r4bbit 97e50b2ee1
WIP: custom revert when restaking 2024-07-17 16:19:36 +02:00
Ricardo Guilherme Schmidt 4cca1db698 WIP estimated MP 2024-07-17 09:50:13 -03:00
r4bbit 4a699ef8e6
WIP 2024-07-03 13:36:47 +02:00
Ricardo Guilherme Schmidt e6df0a6587 wip mp estimate 2024-07-02 10:18:26 -03:00
Ricardo Guilherme Schmidt 0aa19d276b WIP mp estimate 2024-07-02 09:37:38 -03:00
r4bbit 4a04b46e14 refactor(StakeManager): initialMP -> bonusMP, currentMP -> totalMP
After discussing this offline, we've decided that the naming of these
properties was misleading. This commit performs the following changes:

- `account.initialMP` becomes `account.bonusMP`
- `account.currentMP` becomes `account.totalMP`

Rationale:

`initialMP` indicates that this is an immutable field which is not the
case as in scenarios where accounts increase the `lock()` time, they'll
also increase their bonus multiplier (`initialMP`).

`currentMP` was misleading in combination with `initialMP`. Really what
it reflects is the total multiplier points of an account **including**
its bonus multiplier points.
2024-06-25 13:13:02 -03:00
r4bbit d18df07b28 refactor(StakeManager): make function names more descriptive
Some of the functions on our contracts were confusing.
This commit changes them so they describe what they actually do.
2024-06-20 15:48:27 -03:00
Ricardo Guilherme Schmidt cbd40aef8a fix(StakeManager): lock function checks for MIN_LOCKUP_PERIOD 2024-03-12 11:41:41 -03:00
Ricardo Guilherme Schmidt 694608a629 chore(StakeManager): removed duplicate error type 2024-03-12 11:41:41 -03:00
Ricardo Guilherme Schmidt c764142909 chore(StakeManager): change revert to use custom error 2024-03-12 11:41:41 -03:00
r4bbit da007451a4 fix(StakeManager): ensure `currentEpoch` is `0` when migrating
A previous manager can only migrate once, because the migration address
is locked in. A **new** manager is always aware of its previous manager.

This means, when a migration happens and is initialized, we know for
sure it's always the first time this is happening.

We probably don't want a migration to take place if the new manager has
already processed epochs, so we're adding a check that its
`currentEpoch` must be `0`.

This also ensures one of its invariants isn't violated:

`epochsOnlyIncrease` and `highEpochsAreNull`.
2024-03-05 10:21:26 -03:00
r4bbit 5cdd54a884 fix(StakeManager): don't allow migration initialization while migrating
This is actually a bug that the certora prover found.
The rule `epochStaysSameOnMigration` failed because a previous
`StakeManager` could call `migrationInitialize` and change
`currentEpoch` on a next `StakeManager`, even though the next `StakeManager`
might be in migration itself (which means the `currentEpoch` is now
allowed to change).

This commit fixes this by ensure `migrationInitialize()` will revert if
the `StakeManager` already has a `migration` on going.
2024-03-05 10:21:26 -03:00
Ricardo Guilherme Schmidt 6c358dab9e fix(StakeManager): use OpenZeppelin Math to avoid precision loss in int divisions 2024-02-26 10:07:54 -03:00
Ricardo Guilherme Schmidt 92ff9bff21 refactor(StakeManager): account initialize in currentEpoch 2024-02-26 10:07:54 -03:00
Ricardo Guilherme Schmidt 17f859577a refactor(StakeManager): change MIN_LOCKUP_PERIOD to 2 weeks 2024-02-23 11:56:03 -03:00
Ricardo Guilherme Schmidt 294c691d1a chore(StakeManager): mark TODOs on division precision loss 2024-02-23 10:57:17 -03:00
Ricardo Guilherme Schmidt 2a762d6a41 fix(StakeManager): use a correct MP formula 2024-02-23 10:57:17 -03:00
Ricardo Guilherme Schmidt c356954302 fix(StakeManager): check for valid migration address 2024-02-23 10:57:17 -03:00
Ricardo Guilherme Schmidt f06168c8ce fix(StakeManager): properly init accs and checks init 2024-02-23 10:57:17 -03:00
Ricardo Guilherme Schmidt c9ed9dd833 refactor(StakeManager): refactor multiplier points logic 2024-02-23 10:57:17 -03:00
Ricardo Guilherme Schmidt 03bc6559ae fix: StakeManager migration fixes and certora rules 2024-02-20 09:08:00 +01:00
Nurit Dor 14248a285b chore: certora setup for stakemanager and vault 2024-02-20 09:04:23 +01:00
r4bbit 4e411f2b37 test(StakeManager): add test to check that inital MPs are minted
This adds a test that ensures multiplier points are minted with a 1:1
ratio to the stake token amount.

This scenario covers the case where no lock up time is set during
staking.
2024-01-19 11:44:25 +01:00
r4bbit 74ff357142 fix(StakeVault): make unstaking actually work
Unstaking didn't actually work because it was using `transferFrom()` on the
`StakeVault` with the `from` address being the vault itself.
This would result in an approval error because the vault isn't creating
any approvals to spend its own funds.

The solution is to use `transfer` instead and ensuring the return value
is checked.
2024-01-19 09:57:34 +01:00
r4bbit edc44e0c6a
chore: make linter happy 2024-01-16 12:12:26 +01:00
r4bbit d9a64559a2
fix(StakeManager): add checks for whether lockup period is in range (#39)
This commit introduces `MIN_LOCKUP_PERIOD` and `MAX_LOCKUP_PERIOD` and
makes use of them within `StakeManager.stake()` and
`StakeManager.lock()` accordingly.

When users deposit tokens into their vault via `stake()`, they can
provide an optional lockup time. If the value is `0` it implies users do
not want to lock their stake.

If the value is `> 0` it has to be within the range of
`MIN_LOCKUP_PERIOD` and `MAX_LOCKUP_PERIOD`.

Properly addresses #15
2023-12-06 12:10:07 +01:00
r4bbit f259286e98
feat: introduce `VaultFactory` (#38)
This commit introduces a first version of a `VaultFactory` that later
will be extended to be capable of instantiating reward vaults and
possible keep track of vault instances per owner.

As a first step, this implementation comes with a `createVault()`
function which takes care of creating vaults.

Because `VaultFactory` also knows about `StakeManager` it can derive the
manager's address and stake token from it when creating vaults, allowing
the API to be without arguments.

Partially addresses #37
2023-11-07 09:49:22 +01:00
r4bbit b5e513ce49
refactor(StakeVault): introduce `stakedToken()` API (#36)
Because the `stakedToken` property is `immutable`, solhint recommends to
make it in all caps. This commit changes the property to adhere to that
rule and also makes the property private.

To access the `stakedToken` there's now a `stakedToken()` function on
the contract.
2023-11-07 09:40:38 +01:00
r4bbit 70c74e2c2c
refactor(StakeVault): use custom error over error strings (#35) 2023-11-07 09:38:00 +01:00
r4bbit 6f591dd674
refactor(StakeManager): use custom errors everywhere (#30) 2023-10-10 15:49:34 +02:00
r4bbit 03d2dcf3e8
refactor(StakeManager): add custom `StakeManager__FundsLocked` error (#29) 2023-10-10 15:44:16 +02:00
r4bbit eeffcfe7d7
refactor(StakeManager): use custom error in `onlyVault` modifier (#28)
Also introduce tests that ensure the error is actually emitted.
2023-10-10 15:32:46 +02:00
r4bbit 2e7c5148b4
refactor: migrate repository to foundry-template (#6)
This commit migrates the repo to our foundry template, which ensures we
have consistent tooling across smart contract repositories that are
maintained by Vac.

This removes all hardhat related files and workflows and replaces them
with more perfomant foundry workflows.

It also sets up tests, CI and linting.
2023-09-12 18:37:30 +02:00
Frederico Teixeira 0e95ca428f Vault's contract gets ERC20 and Manager
as arguments
2023-08-21 08:21:59 +02:00