Build a wallet app

A checklist and walkthrough for making your own wallet on AUREN, in any language.

What a wallet must do

  1. Make and store keys safely.
  2. Show a balance and activity.
  3. Send payments with a preview.
  4. Receive (show an address).
  5. Optionally: staking, names, security settings.

1. Keys

Generate 32 random bytes (the seed). From it make an Ed25519 key pair. The address is Bech32 of the scheme byte and the first 20 bytes of sha256(scheme ‖ public key) with the network prefix (aur, taur, daur). The same seed works on all networks; only the prefix differs. Details and code: Integrate.

Store the seed encrypted with a user password (a slow password hash such as PBKDF2 or Argon2, then AES-GCM). Offer a printed recovery key. Never send it anywhere or write it to logs.

Device keys (passkeys, security keys) use scheme 2. The private key never leaves the device and signing goes through WebAuthn.

2. Connect

Let the user pick Devnet, Testnet or Mainnet. Ask a node for aur_status. Check status.network matches what the user picked, and refuse to continue if not. Pin the genesis hash from networks/networks.json.

3. Balance and activity

curl http://NODE:9650/account/ADDRESS          # balance, spendable, nonce, stake
curl "http://NODE:9650/account/ADDRESS/txs?limit=30"

Show spendable as the headline number. Show amounts in AUR, never sparks.

4. Send with a preview

const tx = await wallet.build(node, 'transfer', { to, amount });    // fills in nonce and fee
const sim = await node.simulate(tx);                                // ok? fee? effects?
// show the user: recipient, amount, fee, "should go through"
const { hash } = await node.sendTx(tx);
const t = await node.wait(hash);                                    // confirmed

Always preview with aur_simulate and show the fee and result. If sim.ok is false, show the reason and do not send.

5. Names

Before paying a name, resolve it with aur_resolve and verify the proof (website/anr.js). If the same name gives different addresses on different networks, refuse and ask for the address. Show the verified name next to the address the user is paying.

6. Receive

Show the address with a copy button. Optionally a QR code. On test networks add a faucet button (POST /drip on the faucet).

Reference implementations

LanguageCode
Browser JavaScriptwebsite/aurlib.js, website/wallet.js
Node.jssdk/js/index.js
Pythonsdk/python/auren.py

Both SDKs produce byte-identical signatures; the test suite checks it.

Test it

Run a local devnet (node scripts/devnet.js --clean), take coins from its faucet, and exercise every flow before touching a real network. See the Developer quickstart.

Edit this page on GitHub