0.4.17 • Published 2 days ago

@turnkey/viem v0.4.17

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
2 days ago

@turnkey/viem

npm

This package contains helpers to use Viem with Turnkey.

We provide a Turnkey Custom Account (signer) which implements the signing APIs expected by Viem clients.

If you need a lower-level, fully typed HTTP client for interacting with Turnkey API, check out @turnkey/http.

Getting started

$ npm install viem @turnkey/viem
import { createAccount } from "@turnkey/viem";
import { TurnkeyClient } from "@turnkey/http";
import { ApiKeyStamper } from "@turnkey/api-key-stamper";
import { createWalletClient, http } from "viem";
import { sepolia } from "viem/chains";

async function main() {
  // Create a Turnkey HTTP client with API key credentials
  const httpClient = new TurnkeyClient(
    {
      baseUrl: "https://api.turnkey.com",
    },
    // This uses API key credentials.
    // If you're using passkeys, use `@turnkey/webauthn-stamper` to collect webauthn signatures:
    // new WebauthnStamper({...options...})
    new ApiKeyStamper({
      apiPublicKey: "...",
      apiPrivateKey: "...",
    })
  );

  // Create the Viem custom account
  const turnkeyAccount = await createAccount({
    client: httpClient,
    organizationId: "...",
    signWith: "...",
    // optional; will be fetched from Turnkey if not provided
    ethereumAddress: "...",
  });

  // Below: standard Viem APIs are used, nothing special!

  const client = createWalletClient({
    account: turnkeyAccount,
    chain: sepolia,
    transport: http(`https://sepolia.infura.io/v3/$(YOUR_INFURA_API_KEY)`),
  });

  const transactionRequest = {
    to: "0x08d2b0a37F869FF76BACB5Bab3278E26ab7067B7" as `0x${string}`,
    value: 1000000000000000n, // 0.001 ETH
  };

  const txHash = await client.sendTransaction(transactionRequest);
  console.log(`Success! Transaction broadcast with hash ${txHash}`);
}

main().catch((error) => {
  console.error(error);
  process.exit(1);
});

Testing (Local)

See .env.example to get your local testing environment right. In order to run the tests, run an Anvil node in one shell (via pnpm anvil), and run pnpm jest in another.

See also

0.4.17

2 days ago

0.4.16

9 days ago

0.4.15

13 days ago

0.4.14

29 days ago

0.4.13

2 months ago

0.4.12

2 months ago

0.4.11

2 months ago

0.4.9

3 months ago

0.4.10

3 months ago

0.4.8

4 months ago

0.4.7

4 months ago

0.4.5

5 months ago

0.4.6

5 months ago

0.4.4

5 months ago

0.4.3

5 months ago

0.4.1

5 months ago

0.4.0

5 months ago

0.4.2

5 months ago

0.3.4

6 months ago

0.3.3

6 months ago

0.3.2

6 months ago

0.3.0

6 months ago

0.2.7

7 months ago

0.2.6

7 months ago

0.2.5

7 months ago

0.2.4

8 months ago

0.2.3

8 months ago

0.2.2

9 months ago

0.2.1

9 months ago

0.2.0

9 months ago

0.1.1

9 months ago

0.1.0

9 months ago