PostgreSQL chooses to seq scan huge table instead of index lookup
EXISTS will stop executing as soon as a result is found, so if that happens early on, a sequential scan will be very fast. Obviously PostgreSQL estimates that very many rows in account_balance have that address.
The cost estimate on the sequential scan is misleading, since it is for the complete scan. As you see, the final cost is estimated quite low.
Without EXPLAIN (ANALYZE, BUFFERS) it is impossible to say if PostgreSQL is right, but then you only asked for an explanation why it would choose such a plan.