Working with the chain · ≈ 13 min

Sending a transaction, and knowing it worked

The full lifecycle with real timings, measured by paying out this academy's own lesson rewards.

Sending is two RPC calls and a wait:

tx.sendRawTransaction   { "rawTx": "0x…" }   → a transaction hash
tx.getStatus            { "txHash": "0x…" }  → where it has got to

Note the parameter names: rawTx and txHash. Not raw, not hash. And the decoder is tx.decodeRawTransaction, not tx.decodeRaw.

From the CLI, which handles signing for you:

animica tx send --from anim1… --to anim1… --value 10

Real measurements, taken by paying out this academy's own lesson rewards on 2026-08-20 — two 10 ANM transactions from the treasury:

StageMeasured
sign + submit (ML-DSA-65)~8 seconds
pendingconfirmed~60-90 seconds
block interval~121 seconds average
fee21,000 nANM (0.000021 ANM)

Transaction 0xfe8c0cd8… landed in block 78,792 and 0xb569a271… in block 78,794. The recipients went from a zero balance to exactly 10.000000000 ANM.

Design for those numbers. Anything that polls for confirmation with a 30-second timeout will report failure on transactions that are perfectly fine — a mistake that has already cost this codebase a false FAILED on a real settlement.

Confirmed is not final. tx.getStatus returns a rich picture, and the fields mean different things:

"status": "confirmed",  "state": "included_block",
"included_height": 78792,  "confirmations": 1,
"finalized": false,  "reorged_out": false

confirmations: 1 means it is in the chain tip's block — which can still be reorganised away. For anything you cannot undo, wait for more confirmations, or for finalized.

And there is no nonce. Animica transactions carry a salt plus a validity window (validAfter/validUntil, default TTL 120 blocks ≈ 4 hours). A transaction that misses its window is not delayed — it is dead, and must be re-signed. Do not build a queue that assumes a stale transaction will eventually land.

And the rule the deployment track already gave you, which applies to every transaction, not just deployments: inclusion is not execution. A transaction can sit in a block, fully confirmed, having reverted. Read the receipt status. "It is on-chain" answers a different question from "it worked".

Stuck? Ask

Answered by Animica's own free inference network. It is donated GPU capacity, so give it 20-30 seconds.