StEver is a staking platform that aggregates real network validators in one place. This platform has the ability to automatically balance between validators.
- Users shouldn't select a validator for them self
- Users shouldn't freeze their money, after stake user will receive StEver tokens based on the current rate
- StEverVault - a contract that aggregates all validators and provides the ability to stake
- User - a person who wants to stake his money
- StEverAccount - a user account that represents user's withdrawal requests
- StEver - a token that represents the user's stake in the StEverVault
- StEverGovernance - a software that manage ever tokens between connected validators
- StEverStrategy - an abstraction that represents a connector to
DePool
contract - StEverCluster - a contract that aggregates strategies owned by a validator
This is the main entry point for each user, owner, governance operations. It keeps all ever assets, and also it is the StEver
token issuer.
Let's dig into the StEverVault
functionality:
- Deposit -
StEver.deposit
user can deposit his ever tokens to theStEverVault
and receiveStEver
tokens in return - Withdraw -
StEver.onAcceptTokensTransfer
user can withdraw his ever tokens from theStEverVault
by sendingStEver
tokens to theStEverVault
. After it inside the user's StEverAccount will be created new withdrawal request (withdraw request can also be canceled by the user). WhenwithfrawHoldTime
will be passed, andStEverGovernance
will process this request, user will receive hisever
tokens reward back
If the validator wants to participate to StEver project he should get in touch with StEver admins. After some checks,
if a validator pass our checks we will create a StEverCluster
contract for him.
Integrate validator functionality
- Admin will call
StEver.createCluster
, after this call new cluster will be added toclusterPools
mapping. Then cluster address will be provided to validator - Validator going to deploy his
DePool
contracts and callStEverCluster.deployStrategies
withDePool
addresses - Each cluster has its own constrains such as
maxStrategiesCount
andassurance
.maxStrategiesCount
is a maximal strategy count that can be created by theCluster
.assurance
is Assurance that should be provided by theclusterOwner
to hisCluster
.assurance
isStEver
value, so theclusterOwner
should make aStEver
token transfer to theCluster
address - When all constraints are satisfied, the validator can obtain strategies addresses, and call
StEverCluster.addStrategies
with strategies addresses. After its strategies will be added to theStEverVault
and will be available for staking
This is software that has access to re-balance ever tokens between connected strategies, and also it manages withdrawals for users.
Re-balance functionality
StEverVault.depositToStrategies
StEverVault.processWithdrawFromStrategies
Withdraw request satisfaction
StEverVault.processSendToUsers
npm i
SEED="{{seed phrase}}" \
MAIN_GIVER_KEY={{giver secret key}} \
npx locklift run --disable-build --network mainnet -s scripts/1_deploy-and-setup-stEverVault.ts
- MultiSig admin(owner) wallet address: StEverVault owner
- TokeRoot address: StEver token root address
- Governance PUBLIC key: bot public key
- StEverVault deploy value (nano ever), min 100 ever
- GainFee (nano ever), min 1 ever: StEverVault will take gainFee from each strategy report to maintain the required gas level (1 ever is recommended)
- StEver platform fee (0..1000), 1% == 10: This fee will aggregate (as a platform fee) for future withdrawal to the admin
npx locklift run --disable-build --network mainnet -s scripts/2_fix_upgrade.ts
This update provides validators the possibility to control their strategies for themselves
(in the previous version only stEverOwner
could add and remove strategies from StEverVault
)
- Cluster entity was added to the StEverVault, now actions like deploy, add and delete strategy only allowed by the
Cluster
contract. Cluster can be created only by thestEverOwner
. Each cluster includes constraints such asmaxStrategiesCount
andassurance
.maxStrategiesCount
- maximal strategy count that can be created by theCluster
assurance
- Assurance that should be provided by theclusterOwner
to hisCluster
.assurance
isStEver
value, so theclusterOwner
should make aStEver
token transfer to theCluster
address
Now interaction with strategies looks like this:
- We need to create a
Cluster
, this method can be called bystEverOnwer
only
- Other operations should be done by
clusterOwner
- Deploy strategies via
Cluster.deployStrategies(_dePools=deppolssAddress[])
- Attach strategies to the StEver
Cluster.addStrategies(_strategies=strategiesAddresses[])
- Remove strategies
Cluster.removeStrategies(_strategies=strategiesAddresses[])
With this update we improve withfrawHoldTime
for each user. This is anti-abuse mechanism
that allows to withdraw only after withfrawHoldTime
from the withdrawal request.
- Filed
withfrawHoldTime
- time that should be passed from the withdrawal request to the withdrawal itself - Each withdrawal request has its own
unlockTime
that is calculated asnow withfrawHoldTime
This update provide reduction factor
for rewards. This factor is used to reduce growing of ever/stEver ratio.
And now users are obtaining their rewards immediately after the stake was made (each second rate are growing).
Instead of obtaining rewards immediately after strategy report.