Testnet apps
The Aeva testnet runs a small market on top of the chain: six test assets that pay a test dividend every hour, a DEX, a trade desk, a lender, an asset launcher, quests and network stats. Each has a page in the app at aevachain.app and a public API; these guides drive them from a shell, so you can see every transaction for what it is.
Testnet, tokens have no value. The test stocks are not shares of any company, their dividends are paid in testnet aeUSD, and the network may be reset at any time.
| Guide | App page | What it does |
|---|---|---|
| Hold a test stock | /faucet | claim a test stock, watch the hourly dividend accrue, claim it |
| Swap and pools | /swap , /pools | quote and swap on the Uniswap v2 DEX with cast |
| Trade desk | /trade | sell a dividend strip to the desk in one settlement |
| Borrow against your stock | /borrow | pledge shares, receive aeUSD, repay, get them back |
| Launch an asset | /launch | register metadata, create and issue your own asset |
| Quests and badges | /quests | read your quest progress and the leaderboard |
| Network stats | explorer /stats | totals, daily activity and TVL from the indexer and the pools |
| Build on Aeva | /ecosystem | the pieces every app above is built from |
Set up the shell
You need: aevad (download and verify),
curl and jq; the swap guide also uses cast.
Every guide below starts from this block. It uses a throwaway keyring in
~/.aeva-apps and one faucet claim.
export AEVA_NODE=${AEVA_NODE:-https://rpc.aevachain.com}
export AEVA_INDEXER=${AEVA_INDEXER:-https://indexer.aevachain.com}
export AEVA_EVM=${AEVA_EVM:-https://evm.aevachain.com}
export AEVA_APP=${AEVA_APP:-https://aevachain.app}
export AEVA_FAUCET=${AEVA_FAUCET:-https://faucet.aevachain.com}
export AEVA_EXPLORER=${AEVA_EXPLORER:-https://explorer.aevachain.com}
export AEVA_CHAIN_ID=${AEVA_CHAIN_ID:-aeva-testnet-1}
export AEVA_HOME=${AEVA_HOME:-$HOME/.aeva-apps}
alias_tx() { aevad tx "$@" --node "$AEVA_NODE" --chain-id "$AEVA_CHAIN_ID" --home "$AEVA_HOME" --keyring-backend test --gas 400000 --fees 10000000000000000aaeva -y -o json; }
wait_tx() { local t=""; for _ in $(seq 1 30); do t=$(aevad query tx "$1" --node "$AEVA_NODE" -o json 2>/dev/null) && break; sleep 1; done; [ -n "$t" ] || { echo "tx $1 not found" >&2; return 1; }; [ "$(jq -r '.code // 0' <<<"$t")" = 0 ] || { jq -r '"tx refused: code \(.code) (\(.codespace)): \(.raw_log)"' <<<"$t" >&2; return 1; }; echo "$t"; }
aevad keys add me --home "$AEVA_HOME" --keyring-backend test --no-backup >/dev/null 2>&1 || true
ME=$(aevad keys show me -a --home "$AEVA_HOME" --keyring-backend test)
echo "me: $ME"alias_tx pays a fee of 0.01 AEVA (400 000 gas at 25 gwei); wait_tx waits
for the transaction’s block and prints the reason if the chain refused it.
One wallet at a time
A MetaMask transaction and a Keplr one from the same account cannot wait in
the mempool together: while an EVM transaction (a swap, an approve) is
pending, a native one from the same address is refused with address already reserved. Wait for the first to be in a block, a second or two, and sign
the next. The launch load test hit it three times in 3 300 steps
(bench/LAUNCH-LOAD.md).