Skip to content

Relayers

Relayer-related SDK call.

Create Relayer

Create a new relayer for a network.

Response

Promise<CreateRelayerResult>;

Just so you understand the properties returned

export interface CreateRelayerResult {
  id: string;
  address: string;
}

Example

// config.ts
import { createClient } from 'rrelayer';
import * as dotenv from 'dotenv';
dotenv.config();
 
export const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
///
 
// create-relayer.ts
import { client, TransactionSpeed } from './config';
 
// returns a CreateRelayerResult - import { CreateRelayerResult } from 'rrelayer';
let created_result = await client.relayer.create(11155111, 'fancy-relayer');
// created_result.id = relayer id
// created_result.address = relayer address
 
// You can then create the relayer client doing this
const relayerClient = await client.getRelayerClient(
  created_result.id,
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);

Get Relayers

Get all the relayers across all networks or a single network.

Response

Promise<PagingResult<Relayer>>;

Just so you understand the properties returned

export interface PagingContext {
  limit: number;
  offset: number;
}
 
export interface PagingResult<T> {
  items: T[];
  next?: PagingContext;
  previous?: PagingContext;
}
 
export interface Relayer {
  id: string;
  name: string;
  chainId: number;
  address: `0x${string}`;
  walletIndex: number;
  maxGasPrice?: number;
  paused: boolean;
  eip1559Enabled: boolean;
  createdAt: Date;
  isPrivateKey: boolean;
}

Example

get-all-relayers.ts
// config.ts
import { createClient } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
export const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
...
 
// get-all-relayers.ts
import { client } from './config';
 
// returns a PagingResult<Relayer> - import { PagingResult, Relayer } from 'rrelayer';
let relayers = await client.relayer.getAll({
  limit: 100,
  offset: 0,
});

Get Relayer

Basic auth can get all relayers information, and API keys can only get the relayer information they have permission to use.

Basic Auth

Response

Promise<GetRelayerResult | null>;

Just so you understand the properties returned

export interface Relayer {
  id: string;
  name: string;
  chainId: number;
  address: `0x${string}`;
  walletIndex: number;
  maxGasPrice?: number;
  paused: boolean;
  eip1559Enabled: boolean;
  createdAt: Date;
  isPrivateKey: boolean;
}
 
export interface GetRelayerResult {
  relayer: Relayer;
  providerUrls: string[];
}
// config.ts
import { createClient } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
export const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
...
 
// get-relayer.ts
import { client } from './config';
 
// returns a GetRelayerResult | null - import { GetRelayerResult } from 'rrelayer';
let relayer = await client.relayer.get('94afb207-bb47-4392-9229-ba87e4d783cb');

API Key Auth

Response

Promise<Relayer | null>;

Just so you understand the properties returned

export interface Relayer {
  id: string;
  name: string;
  chainId: number;
  address: `0x${string}`;
  walletIndex: number;
  maxGasPrice?: number;
  paused: boolean;
  eip1559Enabled: boolean;
  createdAt: Date;
  isPrivateKey: boolean;
}
// config.ts
import { createRelayerClient, TransactionSpeed } from 'rrelayer';
 
export let relayerClient = createRelayerClient({
  serverUrl: 'http://localhost:8000',
  relayerId: '94afb207-bb47-4392-9229-ba87e4d783cb',
  apiKey: 'YOUR_API_KEY',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  speed: TransactionSpeed.FAST,
});
 
...
 
// get-relayer.ts
import { relayerClient } from './config';
 
// returns a Relayer | null - import { Relayer } from 'rrelayer';
let info = await relayerClient.getInfo();

Clone Relayer

Clone a relayer to a network.

Response

Promise<CreateRelayerResult>;

Just so you understand the properties returned

export interface CreateRelayerResult {
  id: string;
  address: string;
}

Example

// config.ts
import { createClient } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
export const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
...
 
/// clone-relayer.ts
import { client, TransactionSpeed } from './config';
 
// returns a CreateRelayerResult - import { CreateRelayerResult } from 'rrelayer';
let clonedResult = await client.relayer.clone(
  '94afb207-bb47-4392-9229-ba87e4d783cb',
  1,
  'cloned-relayer'
);
// cloned_result.id = the new cloned relayer id
// cloned_result.address = the new cloned relayer address
 
// You can then create the relayer client doing this
const relayerClient = await client.getRelayerClient(
  clonedResult.id,
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);

Pause/Unpause Relayer

You can pause and unpause a relayers anytime. When you pause, rrelayer will not accept anymore transactions on it.

Response

Promise<Void>;

Example

pause-relayer.ts
// config.ts
import { createClient, TransactionSpeed } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
export const relayerClient = await client.getRelayerClient(
  // The relayer id you want to connect to
  '94afb207-bb47-4392-9229-ba87e4d783cb',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);
 
...
 
// pause-relayer.ts
import { relayerClient } from './config';
 
await relayerClient.pause();

Update EIP-1559 Status

By default, EIP-1559 transactions are enabled, but you can turn on legacy and toggle this anytime.

Response

Promise<Void>;

Example

disable-eip-1559-status.ts
// config.ts
import { createClient, TransactionSpeed } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
export const relayerClient = await client.getRelayerClient(
  // The relayer id you want to connect to
  '94afb207-bb47-4392-9229-ba87e4d783cb',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);
 
...
 
/// disable-eip-1559-status.ts
import { relayerClient } from './config';
 
await relayerClient.updateEIP1559Status(false);

Update Max Gas Price

You can set the max amount the relayer will bump gas up to, this can protect you about network congression/expensive periods. You must pass in the wei amount.

Response

Promise<Void>;

Example

// config.ts
import { createClient, TransactionSpeed } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
export const relayerClient = await client.getRelayerClient(
  // The relayer id you want to connect to
  '94afb207-bb47-4392-9229-ba87e4d783cb',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);
 
...
 
// update-max-gas-price.ts
import { relayerClient } from './config';
 
// 2 gwei
await relayerClient.updateMaxGasPrice('2000000000');

Remove Max Gas Price

You can remove the max gas price set.

Response

Promise<Void>;

Example

// config.ts
import { createClient, TransactionSpeed } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
export const relayerClient = await client.getRelayerClient(
  // The relayer id you want to connect to
  '94afb207-bb47-4392-9229-ba87e4d783cb',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);
 
...
 
// remove-max-gas-price.ts
import { relayerClient } from './config';
 
await relayerClient.removeMaxGasPrice();

Delete Relayer

Delete a new relayer for a network, it just does a soft delete the database records stay, alongside it will clear the current queue.

Response

Promise<Void>;

Example

// config.ts
import { createClient } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
export const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
...
 
// delete-relayer.ts
import { client } from './config';
 
await client.relayer.delete('94afb207-bb47-4392-9229-ba87e4d783cb');

Get Allowlist

Basic auth can get all relayers allowlists, and API keys can only get the relayer allowlist they have permission to use.

Response

Promise<PagingResult<`0x${string}`>>;

Just so you understand the properties returned

export interface PagingContext {
  limit: number;
  offset: number;
}
 
export interface PagingResult<T> {
  items: T[];
  next?: PagingContext;
  previous?: PagingContext;
}

Basic Auth

// config.ts
import { createClient, TransactionSpeed } from 'rrelayer';
import * as dotenv from "dotenv";
dotenv.config();
 
const client = createClient({
  serverUrl: 'http://localhost:8000',
  auth: {
    username: process.env.RRELAYER_AUTH_USERNAME!,
    password: process.env.RRELAYER_AUTH_PASSWORD!,
  },
});
 
export const relayerClient = await client.getRelayerClient(
  // The relayer id you want to connect to
  '94afb207-bb47-4392-9229-ba87e4d783cb',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  TransactionSpeed.FAST
);
 
...
 
// get-allowlist.ts
import { relayerClient } from './config';
 
// returns a PagingResult<`0x${string}`> - import { PagingResult } from 'rrelayer';
let allowlist = await relayerClient.allowlist.get({
  limit: 100,
  offset: 0,
});

API Key Auth

// config.ts
import { createRelayerClient, TransactionSpeed } from 'rrelayer';
 
export let relayerClient = createRelayerClient({
  serverUrl: 'http://localhost:8000',
  relayerId: '94afb207-bb47-4392-9229-ba87e4d783cb',
  apiKey: 'YOUR_API_KEY',
  // This is optional it defaults to fast and is a fallback
  // You can override this with the transaction request
  speed: TransactionSpeed.FAST,
});
 
...
 
// get-allowlist.ts
import { relayerClient } from './config';
 
// returns a PagingResult<`0x${string}`> - import { PagingResult } from 'rrelayer';
let allowlist = await relayerClient.allowlist.get({
  limit: 100,
  offset: 0,
});