@oasisprotocol/sapphire-ethers-v6

Sapphire + Ethers.js v6

version size downloads

Integrate your Ethereum-based applications with the privacy features of Oasis Sapphire when using the Ethers.js library (version 6). This README provides a guide on how to get started with the @oasisprotocol/sapphire-ethers-v6 package.

It may be necessary to use this package to enable automatic end-to-end encryption between the application and the smart contracts deployed on Sapphire. It does this by exporting two useful functions:

  • wrapEthersProvider - encrypts eth_call and eth_estimateGas
  • wrapEthersSigner - encrypts eth_signTransaction + Wallet signing

Many browser-based dApps can use the lightweight @oasisprotocol/sapphire-paratime package if they rely entirely on the injected EIP-1193 wallet provider to communicate with and sign transactions on Sapphire. However, server-side apps, test suites and dApps using account abstraction (or those which directly use a Wallet) will need to use this Ethers v6 integration package.

Prerequisites

  • Node.js (version 18.x or higher)
  • An active internet connection, or the sapphire-localnet docker container.
  • Optionally, an EIP-1193 compatible Ethereum wallet provider (e.g. MetaMask, Rabby)

Usage

Add the Sapphire Ethers.js wrapper to your project:

pnpm add 'ethers@6.x' '@oasisprotocol/sapphire-ethers-v6'

In the Browser

To use Oasis Sapphire with Ethers.js in a browser environment:

import { BrowserProvider } from 'ethers';
import { wrapEthersSigner } from '@oasisprotocol/sapphire-ethers-v6';

const signer = wrapEthersSigner(
new BrowserProvider(window.ethereum).getSigner()
);

In Node.js

import { getDefaultProvider, Wallet } from 'ethers';
import { NETWORKS, wrapEthersSigner } from '@oasisprotocol/sapphire-ethers-v6';

const defaultProvider = getDefaultProvider(NETWORKS.testnet.defaultGateway);
const signer = wrapEthersSigner(new Wallet('YOUR_PRIVATE_KEY').connect(defaultProvider));

Using Just a Provider

Where no transactions require signing the Sapphire wrapper can be used with a Provider, this will transparently encrypt both gas estimates and view calls (queries).

import { getDefaultProvider } from 'ethers';
import { NETWORKS, wrapEthersProvider } from '@oasisprotocol/sapphire-ethers-v6';

const defaultProvider = getDefaultProvider(NETWORKS.testnet.defaultGateway);
const provider = wrapEthersProvider(defaultProvider);