Comment by rwmj
14 hours ago
Wait, the balance is stored on the card? I'm fairly sure the balance is shown in the JR app too, so presumably that cannot be the case. [Update: or maybe not? I opened the app now and it's asking me to enable NFC and hold it up to the card.]
Anyway I love my Suica. I got it a good decade or more ago, I have a few thousand yen on there, and it's always ready for me when I go back to Japan. Useful on the Metro, trains and in shops. Easy to top up at the plentiful, dedicated top up machines. I also loaded Shinkansen tickets on it last time and travelled "ticketless".
Yes, they do store the value. There was a blogpost posted to HN last year that discusses the cryptographic features of these cards [1,2]. It's amazing that these cards are almost solving the problem of secure digital money.
[1] https://web.archive.org/web/20250517082035/https://aruarian....
Alt link because archive.org is down now: https://archive.ph/V8H5s
The card definitely stores the balance. They probably sync the transaction records to their servers, but during the transaction the value on the card is presumed to be the truth AFAICT.
Remember when the system was designed in the early 2000s the Internet was much less available and reliable, and when so many transactions happen every day, you don't want to get thousands of passengers stuck inside a metro station only because some Wifi router was down.
This is basically a limitation of the CAP theorem, in these situations there's really no choice but to sacrifice "consistency" and settle for eventual consistency.
I think even credit card payments for transit also make that sacrifice. I had a weird experience using a Visa card to pay for a tram ride because they were promoting it and had a discount. The machine indicated success and let me through, but since I rarely used the card, somehow the payment didn't go through afterwards (the credit card was in a very weird state). If they insisted that all the payment transactions complete successfully for a transit payment, it would be too inconvenient and unreliable to use.
Credit card payments have an "offline" mode for the same reason - before ubiquitous broadband, a shop may have to dial-up to the bank to verify a card, which is slow. Debit cards that run on the credit networks can have that enabled or disabled depending on trust.
Remember originally credit card payments worked by putting the card under a slip of carbon-copy paper and rubbing off the raised digits. All the digital stuff ontop of that was just for efficiency.
The original Dutch system used a very similar approach: the card not only stores the balance, but also a history of taps, and information about the travel products. Your travel history is available on a website, but new trips are only shown after a terminal has asynchronously uploaded your new data.
Fixed terminals (like at a train station) near-instantly upload it, movable terminals (like in a bus) have a bit of a delay and sometimes only upload when the bus arrives back at the depot. It is possible to add new travel products or balance from an app / website, but you have to visit a special "pick-up terminal" to update the card.
Op mentions that server side sync occurs outside of 200ms card/reader interaction.
I'm fairly sure the balance is shown in the app too
Can confirm that Suica shows the balance in Apple Wallet.