> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stable.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Quick start

> Connect to Stable testnet, fund a wallet from the faucet, and send your first USDT0 transaction

The only tools you need are Node.js, some USDT0 from the faucet and a private key. Stable uses USDT0 as its gas token, so you only need USDT0 to transact. There is no separate gas asset to fund.

<Note>
  Prefer a typed client? The [Stable SDK](/en/explanation/sdk-overview?utm_source=docs\&utm_medium=quick-start) wraps viem with `transfer`, `bridge`, and `swap` methods so you skip the manual ABI and decimals work.
</Note>

## Prerequisites

* Node.js 20 or later
* A private key you control (a fresh test key is fine)

## 1. Install and configure

Create a project, install `ethers`, and save the testnet config.

```bash theme={"dark"}
mkdir stable-quickstart && cd stable-quickstart
npm init -y && npm install ethers
```

```text theme={"dark"}
added 1 package, audited 2 packages in 1s
```

Save your private key to `.env`:

```bash theme={"dark"}
echo "PRIVATE_KEY=0xYOUR_PRIVATE_KEY_HERE" > .env
```

Create `config.ts`:

```typescript theme={"dark"}
// config.ts
import { ethers } from "ethers";
import "dotenv/config";

export const STABLE_TESTNET_RPC = "https://rpc.testnet.stable.xyz";
export const CHAIN_ID = 2201;

export const provider = new ethers.JsonRpcProvider(STABLE_TESTNET_RPC);
export const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
```

## 2. Fund the wallet

Print your address, then request testnet USDT0 from the faucet.

```typescript theme={"dark"}
// address.ts
import { wallet } from "./config";

console.log("Wallet address:", wallet.address);
```

```bash theme={"dark"}
npx tsx address.ts
```

```text theme={"dark"}
Wallet address: 0x1234...abcd
```

Go to [https://faucet.stable.xyz](https://faucet.stable.xyz), paste the address, and select the button to receive testnet USDT0. The faucet sends 1 USDT0, enough for thousands of native transfers.

## 3. Send your first transaction

Send 0.001 USDT0 natively. On Stable, USDT0 is the native asset, so a simple value transfer is the cheapest path (21,000 gas).

```typescript theme={"dark"}
// send.ts
import { ethers } from "ethers";
import { provider, wallet } from "./config";

const recipient = "0xRecipientAddress"; // replace with any address
const amount = ethers.parseEther("0.001"); // 0.001 USDT0 (18 decimals, native)

const block = await provider.getBlock("latest");
const baseFee = block!.baseFeePerGas!;

const tx = await wallet.sendTransaction({
  to: recipient,
  value: amount,
  maxFeePerGas: baseFee * 2n,
  maxPriorityFeePerGas: 0n, // always 0 on Stable
});

const receipt = await tx.wait(1);
console.log("Tx:", receipt!.hash);
console.log("Explorer:", `https://testnet.stablescan.xyz/tx/${receipt!.hash}`);
```

```bash theme={"dark"}
npx tsx send.ts
```

```text theme={"dark"}
Tx: 0x8f3a...2d41
Explorer: https://testnet.stablescan.xyz/tx/0x8f3a...2d41
```

Open the explorer link to confirm the transaction. Block time is roughly 0.7 seconds, so it should already be final.

<Warning>
  `maxPriorityFeePerGas` is ignored by Stable and must be set to `0`. See [Gas pricing](/en/reference/gas-pricing-api) for how the base-fee-only model changes transaction construction.
</Warning>

## Where to go next

<CardGroup cols={3}>
  <Card title="Deploy a smart contract" icon="file-code" href="/en/tutorial/smart-contract">
    Scaffold a Foundry project and deploy to Stable testnet.
  </Card>

  <Card title="Build a payment app" icon="credit-card" href="/en/how-to/build-p2p-payments">
    Create wallet, send, receive, and query payment history.
  </Card>

  <Card title="Develop with AI" icon="sparkles" href="/en/how-to/develop-with-ai">
    Wire MCP servers and agent skills into your AI editor.
  </Card>
</CardGroup>
