Smart Contract
Introduzione
Gli Smart Contract di Rocket Pool costituiscono le fondamenta del protocollo Rocket Pool. Sono il livello base di infrastruttura su cui sono costruiti tutti gli altri elementi della rete, lo stack software Smart Node e tutte le interfacce web o applicative.
L'interazione diretta con i contratti solitamente non è necessaria ed è facilitata attraverso l'uso di altri software. Questa sezione fornisce una descrizione dettagliata del design dei contratti e informazioni su come costruire sopra Rocket Pool per gli sviluppatori che desiderano estenderlo. Tutti gli esempi di codice sono forniti in Solidity v0.7.6.
Design dei Contratti
I contratti di rete di Rocket Pool sono costruiti con l'aggiornabilità in mente, utilizzando un'architettura hub-and-spoke. Il fulcro centrale della rete è il contratto RocketStorage, che è responsabile della memorizzazione dello stato dell'intero protocollo. Questo è implementato attraverso l'uso di mappe per l'archiviazione chiave-valore e metodi getter e setter per leggere e scrivere valori per una chiave.
Il contratto RocketStorage memorizza anche gli indirizzi di tutti gli altri contratti di rete (indicizzati per nome) e limita la modifica dei dati solo a quei contratti. Utilizzando questa architettura, il protocollo può essere aggiornato distribuendo nuove versioni di un contratto esistente e aggiornando il suo indirizzo nello storage. Questo fornisce a Rocket Pool la flessibilità necessaria per correggere bug o implementare nuove funzionalità per migliorare il protocollo.
Interagire con Rocket Pool
Per iniziare a interagire con la rete Rocket Pool, crea prima un'istanza del contratto RocketStorage usando la sua interfaccia:
Il costruttore sopra dovrebbe essere chiamato con l'indirizzo del contratto RocketStorage sulla rete appropriata.
A causa dell'architettura di Rocket Pool, gli indirizzi degli altri contratti non dovrebbero essere usati direttamente ma recuperati dalla blockchain prima dell'uso. Potrebbero essere avvenuti aggiornamenti di rete dall'interazione precedente, risultando in indirizzi obsoleti. RocketStorage non può mai cambiare indirizzo, quindi è sicuro memorizzarne un riferimento.
Altre istanze di contratti possono essere create usando l'interfaccia appropriata presa dal repository Rocket Pool, ad esempio:
I contratti Rocket Pool, come definiti in RocketStorage, sono:
rocketVault- Memorizza ETH detenuto dai contratti di rete (interno, non aggiornabile)rocketAuctionManager- Gestisce l'asta di RPL tagliato dallo stake dei node operatorrocketDepositPool- Accetta ETH depositato dagli utenti e gestisce l'assegnazione ai minipoolrocketSmoothingPool- Riceve priority fees e MEVrocketMinipoolBase- Contiene la logica di inizializzazione e aggiornamento delegato per i minipoolrocketMinipoolBondReducer- Gestisce la finestra di riduzione del bond e la cancellazione del trusted noderocketMinipoolFactory- Gestisce la creazione dei contratti minipoolrocketMinipoolDelegate- Contratto utility minipool (interno)rocketMinipoolManager- Crea e gestisce tutti i minipool nella reterocketMinipoolQueue- Organizza i minipool in una coda per l'assegnazione ETHrocketMinipoolStatus- Gestisce gli aggiornamenti dello stato del minipool dai nodi watchtowerrocketMinipoolPenalty- Memorizza le penalità applicate ai node operator dalla oDAOrocketNetworkBalances- Gestisce gli aggiornamenti del saldo di rete dai nodi watchtowerrocketNetworkFees- Calcola i tassi di commissione del nodo in base alla domanda di nodi della reterocketNetworkPrices- Gestisce gli aggiornamenti del prezzo RPL e dello stake effettivo dai nodi watchtowerrocketNetworkWithdrawal- Gestisce l'elaborazione dei prelievi del validator della beacon chainrocketNetworkPenalties- Gestisce le penalità dei minipoolrocketRewardsPool- Gestisce la distribuzione delle ricompense a ciascun contratto di ricompenserocketClaimDAO- Gestisce la richiesta di ricompense per la pDAOrocketNodeDeposit- Gestisce i depositi dei nodi per la creazione di minipoolrocketMerkleDistributorMainnet- Gestisce la distribuzione delle ricompense RPL ed ETHrocketNodeDistributorDelegate- Contiene la logica per i RocketNodeDistributorrocketNodeDistributorFactory- Gestisce la creazione dei contratti RocketNodeDistributorrocketNodeManager- Registra e gestisce tutti i nodi nella reterocketNodeStaking- Gestisce lo staking e l'unstaking dei nodirocketDAOProposal- Contiene funzionalità comuni a oDAO e pDAOrocketDAONodeTrusted- Gestisce le proposte relative alla oDAOrocketDAONodeTrustedProposals- Contiene funzionalità delle proposte oDAO (interno)rocketDAONodeTrustedActions- Contiene funzionalità delle azioni oDAO (interno)rocketDAONodeTrustedUpgrade- Gestisce la funzionalità di aggiornamento del contratto oDAO (interno)rocketDAONodeTrustedSettingsMembers- Gestisce le impostazioni relative ai membri trustedrocketDAONodeTrustedSettingsProposals- Gestisce le impostazioni relative alle proposterocketDAONodeTrustedSettingsMinipool- Gestisce le impostazioni relative ai minipoolrocketDAONodeTrustedSettingsRewards- Gestisce le impostazioni relative alle ricompenserocketDAOProtocol- Gestisce le proposte relative alla pDAOrocketDAOProtocolProposals- Gestisce la funzionalità delle proposte pDAO (interno)rocketDAOProtocolActions- Gestisce la funzionalità delle azioni pDAO (interno)rocketDAOProtocolSettingsInflation- Gestisce le impostazioni relative all'inflazionerocketDAOProtocolSettingsRewards- Gestisce le impostazioni relative alle ricompenserocketDAOProtocolSettingsAuction- Gestisce le impostazioni relative al sistema d'astarocketDAOProtocolSettingsNode- Gestisce le impostazioni relative ai node operatorrocketDAOProtocolSettingsNetwork- Gestisce le impostazioni relative alla reterocketDAOProtocolSettingsDeposit- Gestisce le impostazioni relative ai depositirocketDAOProtocolSettingsMinipool- Gestisce le impostazioni relative ai minipoolrocketTokenRETH- Il contratto del token rETH (non aggiornabile)rocketTokenRPL- Il contratto del token RPL (non aggiornabile)rocketUpgradeOneDotOne- Ha gestito l'upgrade del protocollo Rocket Pool Redstone.rocketUpgradeOneDotTwo- Ha gestito l'upgrade del protocollo Rocket Pool AtlasaddressQueueStorage- Un contratto utility (interno)addressSetStorage- Un contratto utility (interno)
I contratti legacy di Rocket Pool, che sono stati rimossi da RocketStorage dalla distribuzione iniziale, sono:
rocketClaimNode- Gestiva la richiesta di ricompense per i node operatorrocketClaimTrustedNode- Gestiva la richiesta di ricompense per la oDAO
I contratti contrassegnati come "interni" non forniscono metodi accessibili al pubblico generale e quindi generalmente non sono utili per l'estensione. Per informazioni su metodi specifici dei contratti, consulta le loro interfacce nel repository Rocket Pool.
Depositi
Il motivo principale per estendere la rete Rocket Pool è implementare una logica di deposito personalizzata che incanala i depositi degli utenti nella deposit pool. Ad esempio, un fund manager potrebbe voler mettere in stake l'ETH dei propri utenti in Rocket Pool tramite i propri smart contract e astrarre l'uso di Rocket Pool stesso dai propri utenti.
Nota: l'indirizzo del contratto RocketDepositPool non dovrebbe essere codificato nei tuoi contratti, ma recuperato da RocketStorage dinamicamente. Vedi Interagire con Rocket Pool per maggiori dettagli.
Implementazione
Di seguito viene descritto un esempio di contratto base che inoltra l'ETH depositato in Rocket Pool e restituisce rETH mintato al chiamante: