amora

Privacy SDK for Starknet

Stealth addresses enable private payments without revealing recipient identity. Send and receive tokens with complete transaction unlinkability.

Built for Privacy

How it Works

Amora implements ERC-5564 style stealth addresses, adapted for Starknet's STARK curve and native account abstraction.

Stealth Addresses

Generate unique one-time addresses for every payment. Recipients can receive funds without revealing their main address.

View-Only Access

Share viewing keys with accountants or services without giving spending access. Monitor all incoming payments safely.

Efficient Scanning

View tags enable 256x faster scanning of announcements. Find your payments without processing the entire chain.

Native Account Abstraction

Built on Starknet's native AA. Stealth accounts are SNIP-6 compliant smart contract wallets, not just EOAs.

Developer Experience

Simple Integration

A clean TypeScript SDK that abstracts away cryptographic complexity.

example.ts
import { Amora, generateKeys, encodeMetaAddress } from 'amora-sdk';

// Generate recipient's stealth keys
const keys = generateKeys();
const metaAddress = encodeMetaAddress(keys);
// → "st:starknet:0x123...abc:0x456...def"

// Sender creates a stealth address
const amora = new Amora({ provider, amoraAddress, accountClassHash });
const { stealthAddress, ephemeralPubKey, viewTag } =
  amora.generateStealthAddress(metaAddress);

// Send tokens privately
await amora.send(account, ETH_ADDRESS, amount, {
  stealthAddress, ephemeralPubKey, viewTag
});

// Recipient scans for payments
const payments = await amora.scan(keys, fromBlock);
for (const payment of payments) {
  await amora.deployAndWithdraw(
    payment.stealthPrivateKey,
    destinationAddress
  );
}
$pnpm add amora-sdk