@turnkey/eip-1193-provider
TypeScript icon, indicating that this package has built-in type declarations

2.0.7 • Public • Published

Turnkey EIP-1193 Provider

The @turnkey/eip-1193-provider package delivers a Turnkey-compatible Ethereum provider that adheres to the EIP-1193 standards. It's built to integrate seamlessly with a broad spectrum of EVM-compatible chains, offering capabilities like account management, transaction signing, and blockchain interaction. This initial setup is intended for use in conjunction with the @turnkey/http and @turnkey/webauthn-stamper package, for initial authentication.

Installation

Before you start using the Turnkey EIP-1193 Provider, make sure to install the necessary packages in your project. This guide assumes you have a Node.js environment ready for development.

Install the required packages using NPM or Yarn:

npm install @turnkey/eip-1193-provider @turnkey/http @turnkey/webauthn-stamper
pnpm add @turnkey/eip-1193-provider @turnkey/http @turnkey/webauthn-stamper
yarn add @turnkey/eip-1193-provider @turnkey/http @turnkey/webauthn-stamper

Initialization

To set up the Turnkey EIP-1193 Provider, you need to initialize it with your configuration, which includes setting up the Turnkey client with your base URL and stamper.

import { WebauthnStamper } from "@turnkey/webauthn-stamper";
import { TurnkeyClient } from "@turnkey/http";

const stamper = new WebauthnStamper({
  rpId: "example.com",
});

// Initialize the Turnkey HTTP client
const turnkeyClient = new TurnkeyClient(
  { baseUrl: "https://api.turnkey.com" },
  stamper
);

// Get the organizationId of the sub-organization connected to the users account
const { organizationId } = await turnkeyClient.getWhoami({
  organizationId: process.env.ORGANIZATION_ID,
});

// Get the user wallets associated with their sub-organization
const { wallets } = await turnkeyClient.getWallets({
  organizationId,
});

// Get the walletId to connect to the provider
const walletId = wallets[0].walletId;

const chain = {
  chainName: "Ethereum Mainnet",
  chainId: "0x1",
  rpcUrls: ["https://mainnet.infura.io/v3/your-infura-project-id"],
};

// Initialize the EIP-1193 Provider with your configuration
const provider = await createEIP1193Provider({
  walletId,
  organizationId,
  turnkeyClient,
  chains: [
    chain,
    // Add more chains as needed
  ],
});

Usage

eth_requestAccounts

Requests the user to provide an Ethereum address for identification, as specified by EIP-1102. This method initiates connectivity with the client and will prompt for passkey authentication.

const accounts = await provider.request({ method: "eth_requestAccounts" });
// Logs the array accounts associated with the provided walletId & organization
console.log(accounts);

Authentication Prompt Methods

The following methods also prompt for passkey authentication:

  • personal_sign: Signs a message with the specified account.
  • eth_sign: Signs data with the specified account.
  • eth_signTransaction: Signs a transaction with the specified account.
  • eth_signTypedData_v4: Signs typed data according to EIP-712 with the specified account.
  • eth_sendTransaction: Submits a transaction to the network for execution.

Testing (Local)

  1. Copy .env.example to .env.local
cp .env.example .env
  1. Start the Anvil node in one shell:
pnpm anvil
  1. Run the tests in a new shell:
pnpm test

Contributing

We welcome contributions to improve the Turnkey EIP-1193 Provider. Please follow the project's contribution guidelines.

License

This project is licensed under LICENSE, with detailed information available in the repository.

Dependencies (1)

Dev Dependencies (2)

Package Sidebar

Install

npm i @turnkey/eip-1193-provider

Weekly Downloads

142

Version

2.0.7

License

Apache-2.0

Unpacked Size

140 kB

Total Files

43

Last publish

Collaborators

  • omkar_turnkey
  • zanetk
  • moe-dev
  • tdawson
  • zekemostov
  • jack-kearney-tkhq
  • r-n-o
  • andrewtk