Testnet, tokens have no value. Do not send real assets.
Skip to Content
Testnet appsHold a test stock

Hold a test stock, get paid a dividend every hour

The testnet’s market account issued six test assets, five test stocks (tTSLA, tNVDA, tAAPL, tAMZN, tPLTR) and a test note, and pays each one a test dividend of 100 aeUSD every hour to its INCOME kind. Every holder accrues their share pro rata, block by block, and claims whenever they like. Testnet, tokens have no value: the stocks are not shares of any company and aeUSD here is test money.

Run the setup block first.

1. Claim from the faucet

One faucet claim sends, in one transaction, 10 AEVA for gas, 1 000 aeUSD, a testnet.verified credential and 10 shares of one random test stock.

curl -s -X POST -H 'content-type: application/json' -d "{\"address\":\"$ME\"}" "$AEVA_FAUCET/claim" | jq '{tx_hash, equity}'
Expected output
{ "tx_hash": "<64 hex characters>", "equity": { "symbol": "tAAPL", "asset_id": "84f50ea918e0c15c9321362330d513593fd4536b807e1b40a39682dab3e21b55", "shares": 10 } }

The faucet gives one claim per address and per network every 24 hours; see Faucet for the limits.

2. What you hold

A share is a bundle: one unit of each of the asset’s kinds, ECON (economic), INCOME and VOTE, moving together. Amounts have six decimals, so 10 shares are 10000000 units of each kind.

ASSET=$(curl -s "$AEVA_INDEXER/v1/accounts/$ME" | jq -r '.assets[0].asset_id') curl -s "$AEVA_INDEXER/v1/accounts/$ME" | jq -r '.assets[0].positions[] | "kind \(.kind_id) \(.class): \(.units) units"' echo "on the explorer: $AEVA_EXPLORER/address/$ME"
Expected output
kind 0 RIGHT_CLASS_ECONOMIC: 10000000 units kind 1 RIGHT_CLASS_INCOME: 10000000 units kind 2 RIGHT_CLASS_VOTE: 10000000 units on the explorer: https://explorer.aevachain.com/address/aeva1…

3. The hourly dividend

Every distribution is an x/payout deposit against the INCOME kind; the indexer lists them newest first.

curl -s "$AEVA_INDEXER/v1/assets/$ASSET/distributions?limit=3" | jq -r '.distributions[] | "\(.block_time) \(.amount) aeusd base units to kind \(.kind_id), supply \(.supply)"'
Expected output
2026-09-23T15:10:34.…Z 100000000 aeusd base units to kind 1, supply 100000000000 2026-09-23T14:10:47.…Z 100000000 aeusd base units to kind 1, supply 100000000000 …

100 aeUSD over 100 000 shares is 0.001 aeUSD a share an hour, so 10 shares accrue 0.01 aeUSD every hour. Nothing is pushed to you: the chain keeps an index per kind, and your claimable amount is your units times the index growth since you last claimed.

4. Claim it

After the next distribution (they run once an hour), your claimable income is non-zero. claim-all moves every asset’s income to your balance in one transaction.

aevad query payout claimable "$ME" --node "$AEVA_NODE" -o json | jq -r '(.claimable // [])[] | "\(.asset_id[0:8])… kind \(.kind_id): \(.total) \(.denom) base units claimable"' R=$(alias_tx payout claim-all --from me); T=$(wait_tx "$(jq -r .txhash <<<"$R")") jq -r '.events[] | select(.type == "aeva.payout.v1.EventClaimed") | [.attributes[] | {(.key): (.value | fromjson? // .)}] | add | "claimed: \(.amount) \(.denom) base units of \(.asset_id[0:8])…"' <<<"$T"
Expected output
84f50ea9… kind 1: 10000 aeusd base units claimable claimed: 10000 aeusd base units of 84f50ea9…

10000 base units are 0.01 aeUSD, one hour of 10 shares.

What next

Last updated