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",
});
const turnkeyClient = new TurnkeyClient(
{ baseUrl: "https://api.turnkey.com" },
stamper
);
const { organizationId } = await turnkeyClient.getWhoami({
organizationId: process.env.ORGANIZATION_ID,
});
const { wallets } = await turnkeyClient.getWallets({
organizationId,
});
const walletId = wallets[0].walletId;
const chain = {
chainName: "Ethereum Mainnet",
chainId: "0x1",
rpcUrls: ["https://mainnet.infura.io/v3/your-infura-project-id"],
};
const provider = await createEIP1193Provider({
walletId,
organizationId,
turnkeyClient,
chains: [
chain,
],
});
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" });
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)
- Copy
.env.example
to .env.local
cp .env.example .env
- Start the Anvil node in one shell:
pnpm anvil
- 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.