Contrats intelligents
Introduction
Les contrats intelligents de Rocket Pool forment la fondation du protocole Rocket Pool. Ils constituent la couche de base de l'infrastructure sur laquelle tous les autres éléments du réseau sont construits, la pile logicielle du Smart Node et toutes les interfaces web ou d'application.
L'interaction directe avec les contrats n'est généralement pas nécessaire et est facilitée par l'utilisation d'autres logiciels. Cette section fournit une description détaillée de la conception des contrats et des informations sur la façon de construire au-dessus de Rocket Pool pour les développeurs souhaitant l'étendre. Tous les exemples de code sont donnés en Solidity v0.7.6.
Conception des contrats
Les contrats réseau de Rocket Pool sont construits avec l'évolutivité à l'esprit, en utilisant une architecture en étoile. Le centre central du réseau est le contrat RocketStorage, qui est responsable du stockage de l'état de l'ensemble du protocole. Cela est implémenté par l'utilisation de cartes pour le stockage clé-valeur, et des méthodes getter et setter pour lire et écrire des valeurs pour une clé.
Le contrat RocketStorage stocke également les adresses de tous les autres contrats réseau (indexés par nom), et restreint la modification des données à ces contrats uniquement. En utilisant cette architecture, le protocole peut être mis à niveau en déployant de nouvelles versions d'un contrat existant et en mettant à jour son adresse dans le stockage. Cela donne à Rocket Pool la flexibilité nécessaire pour corriger les bugs ou implémenter de nouvelles fonctionnalités pour améliorer le protocole.
Interagir avec Rocket Pool
Pour commencer à interagir avec le réseau Rocket Pool, créez d'abord une instance du contrat RocketStorage en utilisant son interface :
Le constructeur ci-dessus doit être appelé avec l'adresse du contrat RocketStorage sur le réseau approprié.
En raison de l'architecture de Rocket Pool, les adresses des autres contrats ne doivent pas être utilisées directement mais récupérées de la blockchain avant utilisation. Des mises à niveau du réseau peuvent avoir eu lieu depuis l'interaction précédente, entraînant des adresses obsolètes. RocketStorage ne peut jamais changer d'adresse, il est donc sûr d'en stocker une référence.
D'autres instances de contrat peuvent être créées en utilisant l'interface appropriée tirée du dépôt Rocket Pool, par exemple :
Les contrats Rocket Pool, tels que définis dans RocketStorage, sont :
rocketVault- Stocke l'ETH détenu par les contrats réseau (interne, non évolutif)rocketAuctionManager- Gère la mise aux enchères du RPL confisqué de la mise des opérateurs de nœudsrocketDepositPool- Accepte l'ETH déposé par les utilisateurs et gère l'attribution aux minipoolsrocketSmoothingPool- Reçoit les frais de priorité et le MEVrocketMinipoolBase- Contient la logique d'initialisation et de mise à niveau du délégué pour les minipoolsrocketMinipoolBondReducer- Gère la fenêtre de réduction de caution et l'annulation du nœud de confiancerocketMinipoolFactory- Gère la création de contrats minipoolrocketMinipoolDelegate- Contrat utilitaire de minipool (interne)rocketMinipoolManager- Crée et gère tous les minipools du réseaurocketMinipoolQueue- Organise les minipools dans une file d'attente pour l'attribution d'ETHrocketMinipoolStatus- Gère les mises à jour de statut des minipools à partir des nœuds de surveillancerocketMinipoolPenalty- Stocke les pénalités appliquées aux opérateurs de nœuds par l'oDAOrocketNetworkBalances- Gère les mises à jour de solde du réseau à partir des nœuds de surveillancerocketNetworkFees- Calcule les taux de commission des nœuds en fonction de la demande de nœuds du réseaurocketNetworkPrices- Gère les mises à jour du prix RPL et de la mise effective à partir des nœuds de surveillancerocketNetworkWithdrawal- Gère le traitement des retraits de validateur de la beacon chainrocketNetworkPenalties- Gère les pénalités des minipoolsrocketRewardsPool- Gère la distribution des récompenses à chaque contrat de récompensesrocketClaimDAO- Gère la réclamation des récompenses pour la pDAOrocketNodeDeposit- Gère les dépôts de nœuds pour la création de minipoolsrocketMerkleDistributorMainnet- Gère la distribution des récompenses RPL et ETHrocketNodeDistributorDelegate- Contient la logique pour les RocketNodeDistributorsrocketNodeDistributorFactory- Gère la création de contrats RocketNodeDistributorrocketNodeManager- Enregistre et gère tous les nœuds du réseaurocketNodeStaking- Gère la mise et le retrait de mise des nœudsrocketDAOProposal- Contient des fonctionnalités communes oDAO et pDAOrocketDAONodeTrusted- Gère les propositions liées à l'oDAOrocketDAONodeTrustedProposals- Contient les fonctionnalités de proposition oDAO (interne)rocketDAONodeTrustedActions- Contient les fonctionnalités d'action oDAO (interne)rocketDAONodeTrustedUpgrade- Gère les fonctionnalités de mise à niveau du contrat oDAO (interne)rocketDAONodeTrustedSettingsMembers- Gère les paramètres relatifs aux membres de confiancerocketDAONodeTrustedSettingsProposals- Gère les paramètres relatifs aux propositionsrocketDAONodeTrustedSettingsMinipool- Gère les paramètres relatifs aux minipoolsrocketDAONodeTrustedSettingsRewards- Gère les paramètres relatifs aux récompensesrocketDAOProtocol- Gère les propositions liées à la pDAOrocketDAOProtocolProposals- Gère les fonctionnalités de proposition pDAO (interne)rocketDAOProtocolActions- Gère les fonctionnalités d'action pDAO (interne)rocketDAOProtocolSettingsInflation- Gère les paramètres liés à l'inflationrocketDAOProtocolSettingsRewards- Gère les paramètres liés aux récompensesrocketDAOProtocolSettingsAuction- Gère les paramètres liés au système d'enchèresrocketDAOProtocolSettingsNode- Gère les paramètres liés aux opérateurs de nœudsrocketDAOProtocolSettingsNetwork- Gère les paramètres liés au réseaurocketDAOProtocolSettingsDeposit- Gère les paramètres liés aux dépôtsrocketDAOProtocolSettingsMinipool- Gère les paramètres liés aux minipoolsrocketTokenRETH- Le contrat du jeton rETH (non évolutif)rocketTokenRPL- Le contrat du jeton RPL (non évolutif)rocketUpgradeOneDotOne- A géré la mise à niveau du protocole Rocket Pool Redstone.rocketUpgradeOneDotTwo- A géré la mise à niveau du protocole Rocket Pool AtlasaddressQueueStorage- Un contrat utilitaire (interne)addressSetStorage- Un contrat utilitaire (interne)
Les anciens contrats Rocket Pool, qui ont été supprimés de RocketStorage depuis le déploiement initial, sont :
rocketClaimNode- Gérait la réclamation des récompenses pour les opérateurs de nœudsrocketClaimTrustedNode- Gérait la réclamation des récompenses pour l'oDAO
Les contrats marqués comme "internes" ne fournissent pas de méthodes accessibles au grand public, et ne sont donc généralement pas utiles pour l'extension. Pour des informations sur les méthodes de contrat spécifiques, consultez leurs interfaces dans le dépôt Rocket Pool.
Dépôts
La raison principale d'étendre le réseau Rocket Pool est de mettre en œuvre une logique de dépôt personnalisée qui canalise les dépôts des utilisateurs dans le pool de dépôt. Par exemple, un gestionnaire de fonds peut souhaiter miser l'ETH de ses utilisateurs dans Rocket Pool via ses propres contrats intelligents, et abstraire l'utilisation de Rocket Pool elle-même de ses utilisateurs.
Remarque : l'adresse du contrat RocketDepositPool ne doit pas être codée en dur dans vos contrats, mais récupérée dynamiquement depuis RocketStorage. Voir Interagir avec Rocket Pool pour plus de détails.
Implémentation
Ce qui suit décrit un exemple de contrat de base qui transfère l'ETH déposé dans Rocket Pool et le rETH frappé à l'appelant :