stakr-protocol

Par bankrbot · skills

Interagissez avec le protocole Stakr — des vaults ERC-4626 avec staking multi-récompenses. À utiliser lorsque l'utilisateur ou un agent a besoin de travailler avec des vaults Stakr, d'ajouter ou de modifier des récompenses (`addRewardToken`, `addRewards`, `modifyRewardToken`, `modifyReward`), de créer ou gérer un « agent vault » ou un « own vault », de financer des programmes d'incitation, de configurer des calendriers de récompenses, ou d'intégrer Stakr dans des scripts ou des outils. Privilégiez cette skill dès que Stakr, StakrVault, les récompenses, le staking ou la propriété d'un vault sont mentionnés.

npx skills add https://github.com/bankrbot/skills --skill stakr-protocol

Protocole Stakr — Aperçu Agent

Cette skill donne aux agents le contexte pour interagir avec le protocole Stakr : des coffres tokenisés ERC-4626 avec staking multi-récompenses pour tout token ERC-20. Utilisez-la lors de la création d'intégrations, de scripts ou d'outils qui créent des coffres, ajoutent des récompenses, modifient les calendriers de récompenses, ou permettent à un agent d'exploiter son "propre" coffre.


Protocole en un coup d'œil

  • StakrVault : Coffre mono-actif ERC-4626. Les utilisateurs déposent l'actif sous-jacent, reçoivent des parts ; ils peuvent verrouiller les parts pour gagner plusieurs tokens de récompense sur des fenêtres configurables.
  • StakrVaultFactory : Déploie les coffres et gère la configuration des frais de protocole. Une factory par chaîne.
  • Récompenses : Jusqu'à 25 tokens de récompense par coffre. Chaque récompense a startTime, endTime, et un amount total. La distribution est linéaire sur la fenêtre ; la logique est de style Masterchef (récompenses accumulées par part).
  • Propriété : Un coffre peut avoir un owner (adresse pouvant ajouter/modifier des récompenses) ou address(0) pour l'ajout de récompenses sans permission.

Quand on dit qu'un agent a son "propre coffre", cela signifie : l'agent (ou une EOA/contract contrôlée) est le propriétaire du coffre, donc il peut appeler addRewardToken et modifyRewardToken pour financer et ajuster les récompenses sans permission tierce.


Accent : Ajouter et Modifier des Récompenses (Coffres Appartenant à un Agent)

Les agents qui exploitent leur propre coffre utiliseront surtout ces deux fonctions :

1. addRewardToken(token, amount, settings)

Objectif : Démarrer un nouveau programme de récompense pour un token ERC-20 donné.

  • Appelant : Propriétaire du coffre (ou n'importe qui si owner() == address(0)).
  • Paramètres :
    • token : Adresse du token de récompense ERC-20. Ne peut pas être le token de part du coffre address(vault).
    • amount : Montant total de token à distribuer. Les tokens sont retirés de msg.sender ; le protocole peut prélever une commission (voir feeOnAddReward de la factory).
    • settings : Settings{ startTime, endTime }. La distribution est linéaire de startTime à endTime ; les deux doivent être dans le futur et startTime < endTime.
  • Effets : Enregistre la récompense, retire les tokens (moins la commission) dans le coffre, et émet AddReward. Les récompenses ne peuvent pas être retirées une fois ajoutées ; elles ne peuvent être que modifiées (étendues ou complétées) via modifyRewardToken.
  • Limites : Pas de token de récompense en double ; le coffre ne peut pas avoir plus de 25 récompenses actives.

Utilisez ceci quand l'agent veut créer une nouvelle récompense (ex. lancer un programme d'incitation sur son coffre).

2. modifyRewardToken(token, amount, settings)

Objectif : Ajouter plus de montant et/ou étendre (ou reprogrammer) une récompense existante.

  • Appelant : Même chose que addRewardToken (propriétaire du coffre ou sans permission si le propriétaire est zéro).
  • Paramètres :
    • token : Adresse d'un token de récompense déjà actif.
    • amount : Montant supplémentaire de token à ajouter. Retiré de msg.sender ; une commission peut s'appliquer. Ne peut pas réduire le montant existant.
    • settings : Settings{ startTime, endTime }. Règles :
      • Si la récompense n'a pas encore terminé (currentTime <= reward.settings.endTime) : vous ne pouvez qu'étendre endTime (et ajouter plus de montant). startTime ne peut pas être changé.
      • Si la récompense a terminé (currentTime > reward.settings.endTime) : vous pouvez définir une nouvelle fenêtre (startTime, endTime) et ajouter du montant ; accRewardsPerShare est réinitialisé.
  • Effets : Augmente remainingAmount (et le montant total) de amount, met à jour endTime (et possiblement startTime si la récompense a terminé), retire les tokens de msg.sender, et émet ModifyReward.

Utilisez ceci quand l'agent veut compléter une récompense existante ou étendre la période de distribution (ou reprogrammer après qu'elle a terminé).

Résumé pour les agents :

  • Nouvelle récompense → addRewardToken(token, amount, settings).
  • Plus de récompense ou durée plus longue (ou nouvelle fenêtre après la fin) → modifyRewardToken(token, amount, settings).
  • Assurez-vous que le coffre a été créé via la factory et que l'agent (ou son adresse contrôlée) est le propriétaire du coffre pour appeler ces fonctions.

Exécuter des Transactions via Bankr

Pour soumettre tout appel Stakr (création de coffre, addRewardToken, modifyRewardToken), d'abord encodez les données d'appel, puis soumettez la transaction via l'API Bankr wallet.

Utilisez un prompt d'agent Bankr en langage naturel :

bankr agent prompt "Call addRewardToken on vault 0x... with token 0x... amount 1000 USDC starting tomorrow for 7 days"

Ou soumettez directement les données d'appel encodées brutes :

bankr wallet submit --to <vault-address> --data <encoded-calldata> --chain base

Pour l'aide à l'encodage des données d'appel, voir la référence API du coffre.

3. Récompenses en streaming (incitations continues)

Les agents peuvent streamer les récompenses dans le temps au lieu de financer une grande fenêtre d'un seul coup :

  • Motif : Appelez addRewardToken une fois pour démarrer une récompense (montant court si désiré). Puis appelez modifyRewardToken à plusieurs reprises pour ajouter plus de montant et étendre endTime. Chaque appel complète la récompense et repousse la fin de la fenêtre de distribution.
  • Pourquoi : Cela évite de verrouiller un énorme montant pour une longue période. L'agent (ou un script/cron) peut financer le coffre par tranches et étendre la fenêtre selon les besoins, créant effectivement un flux de récompense continu.
  • Règles : Tant que la récompense est active (currentTime <= reward.settings.endTime), modifyRewardToken ne permet que d'étendre endTime et d'ajouter amount ; startTime ne peut pas être changé. Après que la récompense a terminé, l'agent peut définir une toute nouvelle fenêtre avec modifyRewardToken (nouveau startTime et endTime) et continuer le streaming.

Utilisez le streaming quand l'agent veut financer les incitations de manière continue (ex. complétages hebdomadaires, ou extension du programme selon le budget) plutôt que de s'engager sur une seule longue fenêtre.


Créer un Coffre Appartenant à un Agent

  1. Obtenez l'adresse StakrVaultFactory pour la chaîne.
    • Sur Base mainnet, la factory est déployée à 0x7Ef55108fa37472296DA59D2287FdA92cd21A0d0 (voir sur BaseScan).
    • Pour un exemple d'implémentation de coffre Stakr sur Base, voir 0x93125009209e23fBAFf2B78712029F7A7CdD23cD (exemple de coffre sur BaseScan).
  2. Appelez createStakrVault(underlying, name, symbol, description, owner) :
    • underlying : Actif sous-jacent ERC-20.
    • name, symbol : Nom/symbole du token de part du coffre.
    • description : Métadonnées courtes (ex. "Coffre d'incitation agent").
    • owner : Définissez à l'adresse de l'agent (ou l'EOA/contract que l'agent contrôle). Utilisez address(0) pour l'ajout/modification de récompense sans permission par n'importe qui.
  3. Utilisez l'adresse du coffre retournée pour tous les appels ultérieurs (addRewardToken, modifyRewardToken, etc.).

Flux Utilisateur Principaux (pour complétude)

  • Dépôt uniquement : deposit(assets, receiver) (ERC-4626).
  • Dépôt et verrouillage : depositAndLock(assets, user).
  • Verrouiller les parts existantes : lock(shares, user) (le coffre doit être approuvé pour les parts).
  • Récolter : harvest(user) pour envoyer les récompenses en attente à user.
  • Déverrouiller : unlock(shares, user) ; puis optionnellement unlockAndRedeem(shares, receiver) pour échanger les parts contre l'actif sous-jacent.

Paramètres et Types

  • Settings : struct Settings { uint256 startTime; uint256 endTime; }
  • Validation : block.timestamp <= startTime et startTime < endTime pour les récompenses nouvelles ou reprogrammées.
  • Token : Tout ERC-20 sauf le token de part du coffre. L'actif sous-jacent peut être utilisé comme récompense.

Pour les signatures de fonction exactes, les raisons de revert, et les événements, lisez l'API du coffre dans cette skill lors de la mise en œuvre d'appels ou du débogage.

Skills similaires