Smart Contracts
Einführung
Die Rocket Pool Smart Contracts bilden die Grundlage des Rocket Pool Protokolls. Sie sind die Basisinfrastruktur, auf der alle anderen Elemente des Netzwerks aufgebaut sind, der Smart Node Software-Stack und alle Web- oder Anwendungsschnittstellen.
Eine direkte Interaktion mit den Contracts ist normalerweise nicht erforderlich und wird durch die Verwendung anderer Software erleichtert. Dieser Abschnitt bietet eine detaillierte Beschreibung des Contract-Designs und Informationen zum Aufbau auf Rocket Pool für Entwickler, die es erweitern möchten. Alle Code-Beispiele sind in Solidity v0.7.6 angegeben.
Contract-Design
Die Rocket Pool Netzwerk-Contracts sind mit Blick auf Upgradierbarkeit gebaut und verwenden eine Hub-and-Spoke-Architektur. Der zentrale Hub des Netzwerks ist der RocketStorage Contract, der für die Speicherung des Zustands des gesamten Protokolls verantwortlich ist. Dies wird durch die Verwendung von Maps für Key-Value-Speicherung und Getter- und Setter-Methoden zum Lesen und Schreiben von Werten für einen Schlüssel implementiert.
Der RocketStorage Contract speichert auch die Adressen aller anderen Netzwerk-Contracts (nach Namen verschlüsselt) und beschränkt die Datenänderung nur auf diese Contracts. Mit dieser Architektur kann das Protokoll aktualisiert werden, indem neue Versionen eines bestehenden Contracts bereitgestellt und seine Adresse im Speicher aktualisiert werden. Dies gibt Rocket Pool die erforderliche Flexibilität, um Fehler zu beheben oder neue Funktionen zur Verbesserung des Protokolls zu implementieren.
Interaktion mit Rocket Pool
Um mit dem Rocket Pool Netzwerk zu interagieren, erstellen Sie zunächst eine Instanz des RocketStorage Contracts mit seinem Interface:
Der obige Konstruktor sollte mit der Adresse des RocketStorage Contracts im entsprechenden Netzwerk aufgerufen werden.
Aufgrund der Architektur von Rocket Pool sollten die Adressen anderer Contracts nicht direkt verwendet, sondern vor der Verwendung aus der Blockchain abgerufen werden. Netzwerk-Upgrades können seit der vorherigen Interaktion stattgefunden haben, was zu veralteten Adressen führt. RocketStorage kann niemals die Adresse ändern, daher ist es sicher, eine Referenz darauf zu speichern.
Andere Contract-Instanzen können mit dem entsprechenden Interface aus dem Rocket Pool Repository erstellt werden, z.B.:
Die Rocket Pool Contracts, wie in RocketStorage definiert, sind:
rocketVault- Stores ETH held by network contracts (internal, not upgradeable)rocketAuctionManager- Handles the auctioning of RPL slashed from node operators' stakerocketDepositPool- Accepts user-deposited ETH and handles assignment to minipoolsrocketSmoothingPool- Receives priority fees and MEVrocketMinipoolBase- Contains the initialisation and delegate upgrade logic for minipoolsrocketMinipoolBondReducer- Handles bond reduction window and trusted node cancellationrocketMinipoolFactory- Handles creation of minipool contractsrocketMinipoolDelegate- Minipool utility contract (internal)rocketMinipoolManager- Creates & manages all minipools in the networkrocketMinipoolQueue- Organises minipools into a queue for ETH assignmentrocketMinipoolStatus- Handles minipool status updates from watchtower nodesrocketMinipoolPenalty- Stores penalties applied to node operators by the oDAOrocketNetworkBalances- Handles network balance updates from watchtower nodesrocketNetworkFees- Calculates node commission rates based on network node demandrocketNetworkPrices- Handles RPL price and effective stake updates from watchtower nodesrocketNetworkWithdrawal- Handles processing of beacon chain validator withdrawalsrocketNetworkPenalties- Handles minipool penaltiesrocketRewardsPool- Handles the distribution of rewards to each rewards contractrocketClaimDAO- Handles the claiming of rewards for the pDAOrocketNodeDeposit- Handles node deposits for minipool creationrocketMerkleDistributorMainnet- Handles distribution of RPL and ETH rewardsrocketNodeDistributorDelegate- Contains the logic for RocketNodeDistributorsrocketNodeDistributorFactory- Handles creation of RocketNodeDistributor contractsrocketNodeManager- Registers & manages all nodes in the networkrocketNodeStaking- Handles node staking and unstakingrocketDAOProposal- Contains common oDAO and pDAO functionalityrocketDAONodeTrusted- Handles oDAO related proposalsrocketDAONodeTrustedProposals- Contains oDAO proposal functionality (internal)rocketDAONodeTrustedActions- Contains oDAO action functionality (internal)rocketDAONodeTrustedUpgrade- Handles oDAO contract upgrade functionality (internal)rocketDAONodeTrustedSettingsMembers- Handles settings relating to trusted membersrocketDAONodeTrustedSettingsProposals- Handles settings relating to proposalsrocketDAONodeTrustedSettingsMinipool- Handles settings relating to minipoolsrocketDAONodeTrustedSettingsRewards- Handles settings relating to rewardsrocketDAOProtocol- Handles pDAO related proposalsrocketDAOProtocolProposals- Handles pDAO proposal functionality (internal)rocketDAOProtocolActions- Handles pDAO action functionality (internal)rocketDAOProtocolSettingsInflation- Handles settings related to inflationrocketDAOProtocolSettingsRewards- Handles settings related to rewardsrocketDAOProtocolSettingsAuction- Handles settings related to auction systemrocketDAOProtocolSettingsNode- Handles settings related to node operatorsrocketDAOProtocolSettingsNetwork- Handles settings related to the networkrocketDAOProtocolSettingsDeposit- Handles settings related to depositsrocketDAOProtocolSettingsMinipool- Handles settings related to minipoolsrocketTokenRETH- The rETH token contract (not upgradeable)rocketTokenRPL- The RPL token contract (not upgradeable)rocketUpgradeOneDotOne- Handled the Rocket Pool protocol Redstone upgrade.rocketUpgradeOneDotTwo- Handled the Rocket Pool protocol Atlas upgradeaddressQueueStorage- A utility contract (internal)addressSetStorage- A utility contract (internal)
Legacy Rocket Pool Contracts, die seit der ersten Bereitstellung aus RocketStorage entfernt wurden, sind:
rocketClaimNode- Verarbeitete die Beanspruchung von Belohnungen für Node-BetreiberrocketClaimTrustedNode- Verarbeitete die Beanspruchung von Belohnungen für die oDAO
Contracts, die als "internal" gekennzeichnet sind, stellen keine Methoden bereit, die der allgemeinen Öffentlichkeit zugänglich sind, und sind daher im Allgemeinen nicht für Erweiterungen nützlich. Für Informationen zu spezifischen Contract-Methoden konsultieren Sie deren Interfaces im Rocket Pool Repository.
Deposits
Der Hauptgrund für die Erweiterung des Rocket Pool Netzwerks besteht darin, benutzerdefinierte Einzahlungslogik zu implementieren, die Nutzereinzahlungen in den Deposit Pool leitet. Beispielsweise möchte ein Fondsmanager möglicherweise das ETH seiner Nutzer über eigene Smart Contracts in Rocket Pool staken und die Verwendung von Rocket Pool selbst von seinen Nutzern abstrahieren.
Hinweis: Die RocketDepositPool Contract-Adresse sollte nicht in Ihren Contracts fest codiert werden, sondern dynamisch aus RocketStorage abgerufen werden. Siehe Interaktion mit Rocket Pool für weitere Details.
Implementierung
Das Folgende beschreibt einen grundlegenden Beispiel-Contract, der eingezahltes ETH an Rocket Pool weiterleitet und geprägtes rETH an den Aufrufer zurückgibt: