Using ultrasound waves to seamlessly transfer Tokens and NFTs between accounts on Flow blockchain in a easy to use and well designed app

The problem FlowTransfer solves

FlowTransfer is a native well designed and fully functional mobile app which uses ultrasound waves to communicate with nearby devices. Build on top of Flow blockchain, this allows users to quickly find nearby users and transfer tokens and NFTs to nearby users. Users can set their aliases in the app for easier identification by other users. Aside from transferring tokens and NFTs, users can connect their wallet and see their balances and NFTs.


  • Well designed and easy to use app
  • Connect wallet, view balances, view NFTs
  • Seamless transfer of Tokens and NFTs between nearby devices or normal transfer
  • Find nearby users
  • Send and receive NFTs and tokens
  • Mint FlowTransfer NFT on Flow chain
  • Set and edit alias for easier identification of nearby users
  • Fully documented code (with UI and integration tests)
  • Fully native app built using Flow Kotlin SDK

The communication tech used in FlowTransfer is based on data transfer using ultrasound waves which is inaudible to humans


Advantages for using sound based data transfer:

  • Highly cross-platform. Any device with speakers and a microphone can exchange data. Transactions can be made across different devices (browser/ios/android)

  • No pairing. Unlike Bluetooth, sound can be used instantly without the need to pair devices. This reduces the friction and improves the user experience.

  • Can work offline. Transactions can be triggered offline and can be broadcasted to chain through offline mediums such as SMS. Signed transfer transaction can be sent through SMS to a receiver which is online and can broadcast signed tx to chain.

Code - https://github.com/naman14/FlowTransfer
APK - https://github.com/naman14/FlowTransfer/raw/main/assets/app-debug.apk

Challenges I ran into

Choosing the right frequency and frame length for ultrasound waves was the critical part. Different profiles exist to use sound based data transfer but ultimately I used Ultrasound FSK Fast which results in fast but small data chunks to be transferred in a single frame. Other challenges included doing the initial fcl-android authentication setup where WalletConnect doesn't seem to work in latest release. I opened PRs and issues to the fcm-android repo for the same.

Technologies used