Invariant
A2
Category
Algorand
Priority
Stretch
Violation class
Service Denial (efficiency)
What it proves
Algorand requires an account to explicitly opt in before it can receive a given Algorand Standard Asset (ASA) — a transfer to a non-opted-in account fails on-chain. A facilitator that only discovers this at broadcast time burns a real transaction fee settling a payment that was always going to fail. A2 asserts the facilitator catches this earlier, at/verify time.
Source: Algorand ASA opt-in requirement (protocol primitive); early detection vs. wasted
on-chain fees.
How it works
1
Generate a fresh account
A brand-new keypair that has never opted into the test ASA (TestNet USDC) is confirmed
not opted in via a direct account-info lookup.
2
Build a payment targeting it
A normal, correctly-signed payment from the funded client account to this never-opted-in
address.
3
Call /verify
A facilitator whose
/verify step runs a full algod simulation (simulateTransactionGroup —
see D7)
catches the doomed transfer before any real settlement attempt.Pass condition
false (otherwise the sub-case
didn’t test the intended condition at all — reported distinctly rather than silently passing), and
/verify must reject the payment.
Reading a failure
If/verify approves a payment to a non-opted-in recipient, the facilitator would burn a real fee
discovering the failure only at /settle — reported as “verify APPROVED a payment to a
non-opted-in recipient — this would fail on-chain and waste a real settlement attempt.”

