Testnet, tokens have no value. Do not send real assets.
Skip to Content
Testnet appsBuild on Aeva

Build on Aeva

Every app on the testnet’s ecosystem page  is built from public pieces, nothing in them is privileged. This page lists the pieces and how the testnet’s own apps use them, so you can build yours. Testnet, tokens have no value.

The pieces

PieceWhat it gives youStart here
Native messagesassets, rights, settlements, encumbrances, income, credentials, the chain’s own modules, with policies enforced on every moveConcepts, Messages
TypeScript SDK (@aeva/sdk)message builders (tx.createAsset, tx.propose, tx.pledge, …), a typed indexer client, exact decimal unitsSDK
EVM + AE-20every right kind and every bundle is an ERC-20 at a derived address; any Solidity contract or Ethereum wallet can hold and move rightsThe EVM facade & AE-20, Read rights over the EVM
Indexer APIblocks, transactions, accounts, assets, holders, settlements, distributions, quests and network stats, reconciled against the chain every blockIndexer API
EndpointsRPC, REST, gRPC, EVM JSON-RPC, indexer, faucetEndpoints

How the testnet’s apps are built

AppBuilt from
SwapUniswap v2, unmodified math, deployed on the EVM; its pools hold AE-20s, so every swap is a native transfer under the asset’s policy
Trade deska small service that signs MsgPropose for an RFQ and MsgAccept for settlements proposed to it; prices from the pools
Borrowa service that watches pledges to its address (x/encumbrance), sends aeUSD, accepts repayment settlements and releases in the same transaction
Launchthe SDK’s createAsset, issue and lockIssuance in one transaction, plus a content-addressed metadata store for the meta_hash
Questsindexer queries over events anyone can read
Network statsthe indexer’s totals plus getReserves() on each pool
The hourly dividendsa bot that sends MsgDistribute to each test stock’s INCOME kind every hour

The services are single-signer Go programs of a few hundred lines each: build a message, simulate, sign, broadcast, wait for the block. Nothing they do needs permission from the chain beyond an account with gas.

A first app in four calls

Read an account’s holdings, quote a trade, and propose it as one settlement, with curl and aevad only (see the setup block):

ASSET=84f50ea918e0c15c9321362330d513593fd4536b807e1b40a39682dab3e21b55 # tAAPL curl -s "$AEVA_INDEXER/v1/assets/$ASSET" | jq -r '.asset | "\(.kind_count) kinds, bundle AE-20 \(.bundle_address)"' curl -s "$AEVA_INDEXER/v1/assets/$ASSET/kinds/1/holders?limit=3" | jq -r '.holders[] | "\(.holder): \(.units) INCOME units"' curl -s "$AEVA_APP/api/desk/quotes" | jq -r '.quotes[] | select(.symbol == "tAAPL" and .kind == 1) | "INCOME strip bid: \(.bid)"'
Expected output
3 kinds, bundle AE-20 0x3AcfD0e4c178474d452B61B5e0C57321def4E998 aeva1…: <units> INCOME units … INCOME strip bid: <aeusd base units>

From there, aevad tx settlement propose <counterparty> "give:right:$ASSET:1:<units>,get:coin:<amount>aeusd" --expires-in 1h is a delivery-versus-payment trade with anyone, the pattern the trade desk uses. See Trade: propose, decline, expire.

Rules of the road

  • Say “Testnet, tokens have no value” wherever you show a balance, and never promise rewards, airdrops or returns: test tokens are for testing.
  • Denominate in aeUSD (6 decimals) or AEVA (18 decimals, aaeva on chain), never a bare $ or “USD”.
  • The testnet may be reset. Keep your deployment scripts, not your state.
Last updated