← Writing

I learned finance in the wrong order

I learned to use wallets, swaps and bridges years before I ever sent a bank wire. This month I did both, two days apart: a Swiss bank froze a ten-euro transfer, a tokenised Nvidia share quoted $77 in fees, and a bridge page tried to send my dollars to the wrong kind of address, so I didn't sign. What each system charges, and what each one checks.

Rabby wallet's signing screen for a Circle CCTP bridge: the receiver is an Ethereum address, blurred, and the Danger row reads Unknown address.

Most people learn finance in the obvious order: a bank account, a card, maybe a brokerage, and much later, if ever, crypto. I did it the other way round. I made my first swap on a decentralised exchange in 2020, before I had ever sent money abroad from a bank. This month I had to do both within two days, and the comparison was so lopsided that I want to write it down while I’m still annoyed.

The bank

I had a small position in US stocks at Swissquote, a Swiss online bank and broker, and wanted to move most of it out. The first problem was the payment form. Its field for the beneficiary bank’s address stopped at 35 characters, the line width of the SWIFT payment message [1], which is not enough for an address in Singapore. The second problem was the price. An outgoing payment in euros cost a flat ten euros [2], so the habit I have from crypto, sending a small test first, made no sense; a ten-euro test would have cost as much again in fees. Even a small sale of shares came with a commission of more than one percent [3].

So I tried the smallest thing I could: moving ten euros internally, from my trading account to an account at the same bank. It was put on hold for “incorrect beneficiary details”.

Swissquote's Payment details screen in September 2024: Payment on Stand by, Incorrect beneficiary details; a transfer of 10.00 EUR from a trading account to Swissquote Bank SA, fees free, status to verify. Account numbers and the date are blurred.
Ten euros, from Swissquote to Swissquote, on hold. Account numbers blurred.

Meanwhile, at home, a transfer between two Singapore banks is free and arrives in seconds [4]. The Swiss system is not slow because moving money is hard. It is slow because each payment carries a message through a chain of banks, each of which checks it, charges for it and can stop it. Swift’s own figures say most payments now reach the recipient’s bank within an hour, but far fewer reach the customer’s account that fast [5], and the World Bank’s latest count puts the average cost of sending $200 abroad at 6.65%, or 13.4% through a bank [6].

The chain

The next evening I did the on-chain half: moving dollars I held as USDC between networks, and looking at a tokenised share of Nvidia as an alternative to buying it through a broker.

The first thing I noticed was that the fees were printed in front of me. My wallet, Rabby, charges 0.25% on swaps and says so on the screen, next to MetaMask’s 0.875% [7] [8]. A bridge aggregator, LI.FI, quoted a route from Optimism to Arbitrum through Circle’s Cross-Chain Transfer Protocol, CCTP, with a cost of one cent and an estimate of 25 minutes. CCTP does not wrap anything. It burns USDC on one chain and Circle mints the same amount on the other, so there is no intermediary token that can depeg [9].

Rabby's fee explainer: Rabby Wallet will always find the best possible rate from top aggregators; Rabby charges a 0.25% fee, included in the quote. Fee rate: MetaMask 0.875%, Rabby Wallet 0.25%. A bridge quote for USDC from Optimism: LI.FI via Circle CCTP, best route, cost $0.01, about 25 minutes. The amounts and wallet balance are blurred.
Fees on the screen before you sign: Rabby's swap fee, and a CCTP bridge quote of one cent.

Tokenised stocks were less impressive. Dinari sells tokenised US shares on Arbitrum, paid for in USDC, and only issues them while the US market is open [10]. Its quote screen for Nvidia, before I had even typed an amount, listed an estimated service fee of 50 USDC and a network fee of almost 27 more. That is not cheaper than a broker. It is a broker, with a blockchain at the end.

Dinari's Trade USDC for NVIDIA Corporation screen: you receive NVDA.d; the following estimated fees will be added: service fee 50.0000 USDC, network fee 26.9334 USDC; outside of US trading hours, orders will fill in the next trading session.
A tokenised share of Nvidia, and $77 of estimated fees.

The signature I didn’t give

Then I tried to bridge USDC from Optimism to my Solana wallet, using Jupiter’s CCTP bridge page. When the signing screen came up, the receiver was not my Solana address. It was an Ethereum address, and Rabby flagged it in red: “Unknown address”. That is the screenshot at the top of this post, with the address blurred.

I didn’t sign. It took me a couple of minutes to work out what had happened. My Solana wallet, Phantom, also holds an Ethereum address [11], and the bridge page had picked that one up as the destination. A Solana address and an Ethereum address are different things: one is a 32-byte public key written in base58, the other 20 bytes written in hexadecimal [12], and dollars sent to the wrong one on the wrong chain would not have been easy to get back. The bridge would have done exactly what I told it. Nothing checked whether I meant it, except the warning in my wallet and my own habit of reading the receiver line.

So I went to the Portal bridge, built on Wormhole, which offers a CCTP route to Solana, live since March [13], and asks for the destination wallet explicitly. I connected the right Solana wallet and watched it complete.

The Portal bridge's route from Optimism to Solana: route provided by Circle, Circle CCTP, approve transfer with destination wallet, estimated time 17 minutes 4 seconds. Wallet addresses, amounts and balances are blurred.
The second attempt: the same CCTP route on the Portal bridge, which asks for the destination wallet explicitly. Addresses, amounts and balances blurred.
Transaction complete: the bridge is now complete; see USDC token on Solana Explorer.
Done.

What each system checks

The two evenings were not really a contest between fast and slow.

First, the bank checks everything except what I want. My ten euros were stopped for a formatting problem in a beneficiary field, between two accounts of the same bank. The bridge checked nothing about the beneficiary at all.

Second, on-chain, the checking is my job. The bridge would have sent my money to an address I didn’t intend, and the only things standing in the way were a wallet warning and my reading of one line. I now read the receiver of every signature as carefully as I read the amount.

Third, the costs are visible on-chain and hidden in the bank. A quarter of a percent, one cent, 25 minutes, all on the screen before I sign. The bank’s fees were in a tariff document, and the real cost was the test transfer I couldn’t afford to make.

Fourth, tokenising an asset doesn’t remove the intermediary. The tokenised Nvidia share came with broker fees and market hours, because there is a broker behind it.

Learning crypto first made me impatient with banks. It also gave me a habit that banks never taught me, because they never needed to: read the address before you sign, because nobody else will.

References

  1. SWIFT MT103 field specifications: beneficiary and account-with-institution fields of 4 lines of 35 characters. iotafinance.com.
  2. Swissquote. Payment fees. Archived copy: 23 June 2024.
  3. Swissquote. Stock trading fees. Archived copy: 14 September 2024.
  4. The Association of Banks in Singapore. FAST and PayNow.
  5. Swift. Swift's cross-border payments processing speed surpasses G20 target. 22 August 2023. Archived copy: swift.com.
  6. World Bank. Remittance Prices Worldwide, issue 50, Q2 2024. PDF.
  7. Rabby Wallet. Announcement of a 0.25% swap fee. X, 5 July 2024. x.com.
  8. MetaMask. User guide: swaps. support.metamask.io.
  9. Circle. Circle delivers USDC interoperability across ecosystems with mainnet launch of Cross-Chain Transfer Protocol. 26 April 2023. circle.com.
  10. Dinari. User guide: FAQ and fees. Archived copies: FAQ, 19 September 2024; fees, 8 August 2024.
  11. TechCrunch. Crypto wallet Phantom adds public multichain support for Ethereum and Polygon. 26 April 2023. techcrunch.com.
  12. Ethereum.org, Ethereum accounts; Solana, accounts.
  13. LI.FI. Circle CCTP is live on Solana. 1 April 2024. lifi.substack.com.

More writing →