Project is live at

The project is live at On Google Chrome, you need to disable Content Security Policy in order to use XND (see README on GitHub).


What if you could send XRP to an Ethereum address? This is one of those questions every newbie asks when they are first exposed to the world of cryptocurrencies.

PayID provides the abstraction to represent complex addresses with human-friendly names, which is just what we needed to solve the above problem. Our end goal was to allow users to send some cryptocurrency to a PayID and receive something else on the other side.

What it does

XND is a cryptocurrency wallet with native integration of PayID, but it takes the idea of abstracting addresses to a whole new level.

Each PayID on XND is uniquely associated with an address. When a user transfers some cryptocurrency, XND will automatically exchange the amount into the currency of the address linked to the destination PayID. From a user's perspective, this happens without them ever knowing that a cross-chain transaction took place behind the scenes.

XND is non-custodial, so users are always in control of their private keys.

How we built it

The heart of XND is a swap engine that manages a liquidity pool of several cryptocurrencies. For this hackathon, we only support XRP and ETH. It is also fairly easy to plug in third-party swap services, although we rolled out our own to have better control.

We also implemented our own Python SDK for PayID, and an OAuth server to authenticate using GitHub.

All the above functionality is exposed via a Flask API in Python and hosted on Heroku.

The XND wallet frontend has been built using React/Redux and uses ripple-lib and web3 for various wallet functionalities. The look-and-feel of the frontend is inspired heavily from PayID's website.

Challenges we ran into

We were stuck for a long time getting transactions to work using xpring-js, so we finally switched to the ripple-lib Javascript library.

Getting the end-to-end cross-chain swap to work was also a huge challenge, but we finally managed to solve it.

Accomplishments that we're proud of

We were able to come up with a working demo for an original concept. We're also very proud of the swap engine, notably the counter-value SDK which has a very neat and Pythonic API.

What we learned

We learned a lot about building client-side non-custodial wallets. Using web3 and ripple's libraries for signing and submitting transactions was also new for us.

What's next for XND

  • Better resilience against intermittent failures.
  • Improving the performance of our atomic swap engine.
  • Admin dashboard to monitor the liquidity of the swap engine.
  • Allow plugging in third-party swap services such as Changelly, Shapeshift, and Coinswitch.
  • More wallet features like displaying transactions, real-time updates, etc.
Share this project: