The day before Adopting Bitcoin, I did some more Lightning payments to various merchants around town and had some misadventures with a Chivo Bitcoin ATM.
Juan Valdez is a Colombian coffee chain. My assumption is that they occupy a similar niche as Starbucks, but the coffee is perhaps better. I don’t think they do drip brewing; if you want a large cup of coffee, it’s café americano all the way.
I stopped in here to do some laptop work (probably to work on this blog; how meta). I had a very seamless Lightning payment here thanks to IBEX Mercado. I promise I’m not a paid shill. All I am saying is that every time I interact with their merchant wallet using one of my non-custodial Lightning wallets, it just works.
Street Food Vendor
I went hunting for someplace new to try for lunch and stumbled upon a chef with a food cart who advertised accepting bitcoin.
With my limited Spanish and his limited English combined, we managed to hash out the basic parameters of our transaction: he would prepare for me a hot dog like item, and I would pay him over the Lightning network.
He created a Chivo Lightning invoice, and I paid him with BlueWallet. While the payment showed complete on my end, the payment was nowhere to be seen on his end!
We tried switching over to a local WiFi network and performing the payment again. Same issue: the Lightning payment was a success with my wallet, but was nowhere to be found in Chivo.
I didn’t want him to worry about whether he was getting his payment or not, so I payed him with cash. It was a very cheap lunch, so it wasn’t a big deal to me.
Later that evening, I happened to pass by him again on another street. He told me that he had received both of the Lightning payments later in the day.
What went wrong
An important thing to remember about Lightning payments is that they are atomic, meaning they either succeed or they fail; there is no middle state. If my wallet shows the payment as successful, then Chivo’s node must have received my payment. This seems like an issue with Chivo’s internal infrastructure and not an issue with Bitcoin or Lightning. When their Lightning node receives a payment, they need to be pushing a notification to the user’s phone immediately.
Lightning payments are a faster way to use Bitcoin. If the user has to wait an hour for their service provider’s internal infrastructure to respond, it kind of defeats the purpose of Lightning.
I forget the name of what I ordered for lunch, but it was pretty good. This hardworking street chef got an extra-large tip thanks to the underperformance of his custodial wallet’s cloud infrastructure. 😂
It took me a while to discover my first Chivo ATM. I learned way later than I should have that ATM locations are easily available from the Chivo website.
I decided to try and purchase Bitcoin with cash as well as sell Bitcoin for cash in order to test out the user experience of each. Overall, the Chivo ATM user interfaces are pretty easy to navigate.
I felt it was important to spend some time with these machines. Somebody local told me they that felt ATMs were important for people trusting Bitcoin in El Salvador; the idea that one can easily exchange their bitcoin for paper cash reinforces the idea that bitcoin is money to new users.
Buying Bitcoin for Cash
To buy bitcoin with cash:
- Enter your phone number
- Type in an SMS 2FA code
- Generate a Bitcoin address QR code on your wallet app
- Hold your phone under the laser to scan the QR code
- Insert dollar bills into the machine
- Confirm the transaction on the final screen to receive on-chain payment
Here is an arrangement of screens from the Chivo user flow for purchasing bitcoin laid out in Figma.
You then will receive your bitcoin when the transaction confirms on-chain, but I had issues. More on that later.
Selling Bitcoin for Cash
To sell bitcoin for cash:
- Enter your phone number
- Type in an SMS 2FA code
- Type in the amount of cash you would like to receive
- Use your Bitcoin wallet app to scan the BTC address QR code that the ATM displays
- Send the precise amount of bitcoin that the machine tells you to
- Take the receipt
- Return to the machine later to redeem your cash once your bitcoin transaction has been included in a block
Here is an arrangement of screens from the Chivo user flow for selling bitcoin laid out in Figma.
Out of curiosity, I set my TX fee very low when I sent bitcoin to the ATM’s specified address. After “checking the network” for my TX, the ATM finally spit out a receipt for me with a withdrawal code. Presumably, I need to return to the machine later once my TX has been included in a block and then enter the withdrawal code to claim my cash.
I wonder how a user knows when to return to the machine with their withdrawal code? The machine provided very minimal instructions, as you can see in the above Figma flow. I understand how to check a block explorer for this, but I’m not sure a newer user would understand this. This could be alarming and create the impression that machine has “eaten” their bitcoin.
I noticed that somebody left their receipt in the machine. So I ended up with 3 receipts, 2 for me and one for a stranger.
Is this a security risk? For example, if the receipts display the exact amount of bitcoin sent or received, couldn’t these be looked up in a block explorer? Additionally, the bitcoin purchase receipt displays the exact bitcoin address the money is sent to.
I don’t think a new bitcoin user understands that an on-chain address is easily viewable on the blockchain. In one sense, the user has already been KYCed by entering their phone number and doing the SMS 2FA. On the other hand, some other random stranger could take the receipt if the user leaves it there and stalk their transaction history.
Perhaps I’m over-thinking this; just trying on my infosec hat.
I never received the bitcoin I bought.
I checked mempool.space for my on-chain address and nothing ever showed up. While I was fiddling around with the mempool, a young woman wearing a Chivo shirt approached me to ask if I needed help.
The exchange was awkward with my limited Spanish, but I learned from trying to speak with her and other context clues that she works for Chivo and her job is to sit in a chair within eye-site of the ATM all day and go help people who look confused.
Sure enough, as I sat there repeatedly refreshing mempool.space, she would approach the ATM to answer questions for people who seemed to be having issues.
I tried to ask her how long it would take to receive my bitcoin. She said that because I was not using Chivo, it might take a long time.
I went to cajeroschivo.com, which gave me the option to chat with customer support over Telegram or WhatsApp, the latter of which seems to be the messaging app of choice in Latin America.
I opted for Telegram. First, I spoke with a bot that guided me through a series of menus. The bot then paired me up with a customer service representative.
Ultimately, the issue was that they needed to see my passport. The phone number KYC was not good enough for my non-Salvadoran phone number.
I declined. While I recognize they may be required to KYC people, I wasn’t comfortable sending my passport info over Telegram.
I spoke with other visitors about this. They told me that one alternative is to purchase a phone in El Salvador with a local number. You will be KYCed in person with your passport for the phone, and then the phone will be valid for Chivo ATMs.
On this day, more friends and colleagues began arriving in San Salvador for the conference.
Many of us ended up at Cadejo Brewing again for dinner. I think this place is going to turn out to be the go-to hang out for Bitcoiners visiting San Salvador due to it’s great craft beer selection, easy walking distance to nearby hotels, nice outdoor patio, and smooth Lightning payments.