GSN Helpers is in maintenance mode. We are no longer actively developing new features for this project, and will only be releasing fixes for high severity issues until July 2020. Read here for more info.

API Reference

Command Line Interface

The following commands are available via the CLI:

  • deploy-relay-hub: deploys the singleton RelayHub instance.

  • run-relayer: downloads and runs a relayer binary, and registers it, deploying a RelayHub if needed.

  • register-relayer: stakes for a relayer and fund it.

  • fund-recipient: funds a recipient contract so that it can receive relayed calls.

  • balance: queries a recipient or relayer owner GSN balance.

  • withdraw: withdraws a relayer’s owner revenue.

To use a command, run:

$ npx oz-gsn <command> <options>

For example:

$ npx oz-gsn deploy-relay-hub --ethereumNodeURL http://localhost:8545
Deploying singleton RelayHub instance
RelayHub deployed at 0xd216153c06e857cd7f72665e0af1d7d82172f494

To learn about a command’s options and usage, run:

$ npx oz-gsn <command> --help

JavaScript Interface

The CLI commands are also exported as JavaScript functions.

Most functions receive an options object: these values are optional unless noted, and their defaults are listed here.

deployRelayHub

async function deployRelayHub(web3, {
  from: web3.eth.accounts[0],
});

Deploys a RelayHub instance.

runRelayer

async function runRelayer(web3, {
  relayUrl: 'http://localhost:8090',
  workdir: process.cwd(), // defaults to a tmp dir
  devMode: true,
  ethereumNodeURL: 'http://localhost:8545',
  gasPricePercent: 0,
  port: 8090,
  quiet: true,
});

Downloads the platform-specific binary and runs a relayer.

registerRelay

async function registerRelay({
  relayUrl: 'http://localhost:8090',
  stake: ether('1'),
  unstakeDelay: 604800, // 1 week
  funds: ether('5'),
  from: web3.eth.accounts[0],
});

Registers a relayer on RelayHub. Requires the relayer process to be running.

fundRecipient

async function fundRecipient(web3, {
  recipient: RECIPIENT_ADDRESS, // required
  amount: ether('1'),
  from: web3.eth.accounts[0],
});

Funds a recipient contract.

balance

async function balance(web3, {
  recipient: RECIPIENT_ADDRESS, // required
});

Queries a recipient’s or owner’s GSN balance.

withdraw

async function withdraw(web3, {
  from: OWNER_ADDRESS, // required
  to: OWNER_ADDRESS,
  amount: await balance(web3, { recipient: from }),
});

Withdraws a relayer owner’s GSN balance.