@oasisprotocol/sapphire-ethers-v6
v6.0.1
Published
Ethers v6 support for the Oasis Sapphire ParaTime.
Downloads
44
Readme
Sapphire + Ethers.js v6
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
- encryptseth_call
andeth_estimateGas
wrapEthersSigner
- encryptseth_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 '[email protected]' '@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);