npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

amora-sdk

v0.2.0

Published

Stealth Addresses SDK for Starknet

Readme

amora-sdk

npm version npm downloads License: MIT

Stealth addresses SDK for Starknet. Send and receive private payments without revealing recipient identity.

Installation

pnpm add amora-sdk starknet

Quick Start

import { Amora, generateKeys, encodeMetaAddress, MAINNET_ADDRESSES } from 'amora-sdk';
import { RpcProvider, Account } from 'starknet';

// Initialize
const provider = new RpcProvider({ nodeUrl: 'YOUR_RPC_URL' });
const amora = new Amora({
  provider,
  amoraAddress: MAINNET_ADDRESSES.amoraRegistry,
  accountClassHash: MAINNET_ADDRESSES.stealthAccountClassHash,
});

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

// Send privately (sender)
const stealth = amora.generateStealthAddress(metaAddress);
await amora.send(account, ETH_ADDRESS, amount, stealth);

// Scan for payments (recipient)
const payments = await amora.scan(keys, fromBlock);
for (const payment of payments) {
  await amora.deployAndWithdraw(payment.stealthPrivateKey, destination, ETH_ADDRESS, 'all');
}

Features

  • Private payments - Send tokens without revealing recipient address on-chain
  • One-time addresses - Each payment uses a unique stealth address
  • Efficient scanning - View tags enable 256x faster payment detection
  • Batch sends - Send to multiple recipients in a single multicall
  • Payment links - Shareable amora:// URIs with recipient and payment info
  • Memo support - Attach text messages to payments via felt252 encoding
  • Viewing keys - Export watch-only keys for scanning without spending ability
  • Account abstraction - SNIP-6 compliant smart contract wallets
  • TypeScript - Full type definitions included

Deployed Contracts

Mainnet

import { MAINNET_ADDRESSES } from 'amora-sdk';
// amoraRegistry: 0x067e3fae136321be23894cc3a181c92171a7b991d853fa5e3432ec7dddeb955d
// stealthAccountClassHash: 0x0155bf2341cbc5a8e612ece29cc87476d7a0e102ea197a4583833a5b8a2fa76a

Sepolia

import { SEPOLIA_ADDRESSES } from 'amora-sdk';
// amoraRegistry: 0x0388dfa21daf46e8d230f02df0bee78e42f93b33920db171d0f96d9d30f7a7b2
// stealthAccountClassHash: 0x0155bf2341cbc5a8e612ece29cc87476d7a0e102ea197a4583833a5b8a2fa76a

API

Amora Class

new Amora({ provider, amoraAddress, accountClassHash })

amora.register(account, keys)              // Register meta-address
amora.getMetaAddress(address)              // Fetch meta-address
amora.generateStealthAddress(meta)         // Generate stealth address
amora.send(account, token, amount, stealth) // Send tokens
amora.batchSend(account, payments)         // Send to multiple recipients
amora.scan(keys, fromBlock)                // Scan for payments
amora.deployAndWithdraw(key, dest, token, amount) // Withdraw funds

Key Functions

generateKeys()                  // Generate new stealth keys
keysFromPrivateKeys(s, v)       // Restore from private keys
encodeMetaAddress(keys)         // Encode as string
parseMetaAddress(str)           // Parse from string

Payment Links

generatePaymentLink({ metaAddress, tokenAddress?, amount?, memo? })
parsePaymentLink(link)          // Parse amora:// URI
isValidPaymentLink(link)        // Validate URI

Memo Encoding

encodeMemo(text)                // Encode UTF-8 string to felt252[]
decodeMemo(felts)               // Decode felt252[] back to string

Viewing Keys

exportViewingKey(keys)          // Export watch-only key string
importViewingKey(str)           // Import from string
scanWithViewingKey(announcements, viewingKey, classHash)

Documentation

Links

License

MIT