amora
Privacy SDK for Starknet
Stealth addresses enable private payments without revealing recipient identity. Send and receive tokens with complete transaction unlinkability.
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.
Simple Integration
A clean TypeScript SDK that abstracts away cryptographic complexity.
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