Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Project Setup

Wire up signers, chains, and environment variables for a real project.

Pick a chain

The SDK ships four chain configs:

import { local, devnet, testnet, mainnet } from "@left-curve/sdk"
ChainidURL
locallocaldango-1http://localhost:8080
devnetdev-9https://api-devnet.dango.zone
testnetdango-testnet-1https://api-testnet.dango.zone
mainnetdango-1https://api-mainnet.dango.zone

Override the URL by passing it to createTransport(url).

Add a signer

createSignerClient requires a Signer. The SDK ships PrivateKeySigner for server-side and CLI usage.

import { createSignerClient, createTransport, testnet, PrivateKeySigner } from "@left-curve/sdk"
 
const signer = PrivateKeySigner.fromMnemonic(process.env.DANGO_MNEMONIC!)
 
const client = createSignerClient({
  chain: testnet,
  transport: createTransport(),
  signer,
})

Other signer paths:

  • PrivateKeySigner.fromPrivateKey(bytes) — bring your own bytes
  • PrivateKeySigner.fromRandomKey() — generate a fresh ephemeral key
  • createSessionSigner(session) — sign with a session credential

See Concepts: Signers & Authentication for the full breakdown.

Environment variables

Treat the mnemonic like a private key. Use .env and never commit it.

DANGO_MNEMONIC="your twelve or twenty four word seed phrase here"
DANGO_RPC_URL="https://api-testnet.dango.zone"
import "dotenv/config"
import { createSignerClient, createTransport, testnet, PrivateKeySigner } from "@left-curve/sdk"
 
const signer = PrivateKeySigner.fromMnemonic(process.env.DANGO_MNEMONIC!)
 
const client = createSignerClient({
  chain: testnet,
  transport: createTransport(process.env.DANGO_RPC_URL),
  signer,
})

Browser caveats

PrivateKeySigner works in the browser but exposes the mnemonic in memory. For wallets, use passkeys (createWebAuthnCredential) or session keys backed by a stored authorization.

Next