# Javascript
# Introduction
The Rocket Pool JavaScript library is the primary means of interaction with the Rocket Pool network for users and applications. It is used by applications such as the Rocket Pool website to retrieve information about the network and facilitate user interaction. It provides wrapper methods which load the Rocket Pool contracts with web3.js and abstractions to use many of their features easily.
This guide assumes familiarity with JavaScript and provides all code samples as JS.
# Getting Started
# Installation
The Rocket Pool JavaScript library can be added to your application via NPM, and requires web3.js (opens new window):
npm install @rocketpool/api
npm install web3
# Initialization
The library must be initialized with a web3 instance and a Truffle (opens new window) RocketStorage
contract artifact:
import Web3 from 'web3';
import RocketPool from 'rocketpool';
import RocketStorage from './contracts/RocketStorage.json';
const web3 = new Web3('http://localhost:8545');
const rp = new RocketPool(web3, RocketStorage);
Alternatively you can also initialize it using a Contract Storage Address:
import Web3 from 'web3';
import RocketPool from 'rocketpool';
const web3 = new Web3('http://localhost:8545');
const RocketStorage = "0xd8Cd47263414aFEca62d6e2a3917d6600abDceB3"; // Current Testnet Storage Contract
const rp = new RocketPool(web3, RocketStorage);
# Usage
The Rocket Pool library is divided into several modules, each for interacting with a different aspect of the network:
auction
: Handles interactions with Auctionscontracts
: Handles dynamic loading of the Rocket Pool contractsdeposit
: Handles user depositsdao
: Handles DAO related interactionsminipool
: Manages minipools in the Rocket Pool networknetwork
: Handles miscellaneous network functionalitynode
: Manages the nodes making up the Rocket Pool networkrewards
: Handles interactions with rewardssettings
: Provides information on settingstokens
: Manages token interactionsvault
: Handles interactions with the vault
All methods typically return promises due to the asynchronous nature of working with the Ethereum network. Getters return promises which resolve to their value, while mutators (methods which send transactions) return promises which resolve to a transaction receipt. Mutators also accept a transaction options object, and an onConfirmation
callback handler to handle specific confirmation numbers on transactions.
When using the Rocket Pool library in your project, you may handle the promises returned in the traditional way, or use async/await syntax if supported, e.g.:
rp.contracts.get('rocketDepositPool')
.then(rocketDepositPool => rocketDepositPool.methods.getBalance().call())
.then(balance => { console.log(balance); });
or:
let rocketDepositPool = await rp.contracts.get('rocketDepositPool');
let balance = await rocketDepositPool.methods.getBalance().call();
console.log(balance);
# Contracts
# Overview
The contracts
module loads Rocket Pool contract ABIs and addresses from RocketStorage
, where all network contracts are registered. Contract ABIs and addresses are loaded from the chain, the ABIs are decompressed and decoded, and then web3 contract instances are created from them. This is performed dynamically because Rocket Pool contracts can be upgraded and their ABIs and addresses may change.
This module is used by other library modules internally, and generally does not need to be used directly. However, it is exposed publicly for when direct access to web3 contract instances is desired, or the library wrapper methods are insufficient.
# Loading Contracts & ABIs
Network contracts can be loaded via the contracts.get()
method, which accepts either a single contract name as a string, or a list of contract names as an array of strings. If a single contract name is passed, this method returns a promise resolving to a web3 contract instance. If a list of contract names is passed, it returns a promise resolving to an array of web3 contract instances, in the same order.
Contract addresses and ABIs can be loaded in a similar fashion via the contracts.address()
and contracts.abi()
methods, which accept either a single contract name, or a list of names, to retrieve data for.
# Creating Contract Instances
Some network contracts, such as RocketMinipool
, have multiple instances deployed at a number of different addresses. To create an instance of one of these contracts, use the contracts.make(name, address)
method. It accepts the name of the contract and the address of the specific instance required, both as strings, and returns a promise resolving to a web3 contract instance.
# Alternate Contract Versions
When Rocket Pool network contracts are upgraded, old versions remain on the chain and can still be accessed if required. A “contract version set”, consisting of all versions of a contract by name, can be loaded with the contracts.versions(name)
method. This method accepts the name of the contract to load, and returns a promise resolving to the version set object.
Contract version sets are primarily used for accessing old event data. They provide the following methods:
versionSet.current()
: Returns the current version of the contractversionSet.first()
: Returns the first version of the contract deployedversionSet.at(index)
: Returns the version of the contract at the specified version index (0 = first version)versionSet.getPastEvents(eventName, options)
: As per web3’s contract.getPastEvents (opens new window), but returns a promise resolving to the events for all versions of the contract
# API Reference
For more information and examples please review the API Reference.