Cryptocurrency Off-ramp Using Corda Settler

Hello, I’m looking to start out by building a crypto off-ramp using Corda Settler.

The application would request the user to sign a transaction to spend a predetermined amount in cryptocurrency, then the business would receive a bank transfer of the same amount.

In concept, the business would have a unique identifier linked to their bank deposit information, and the user would send money to that bank account via signing the crypto transaction.

After confirmation of receiving funds from the user the business can consider the transaction settled.

Where would I find the relevant documentation on solving creating each of these segments?

Am I asking the wrong questions?

If so, I’d love to hear opinions on creating a better solution.

Hi Matthew - Richard here (CTO of R3).

This sounds really interesting… (I think!) I’m not sure I’ve 100% understood the concept. It sounds like there are two parties in your example (‘user’ and ‘business’)? And the user is a customer of that business? So I can imagine they’re trying to buy something?

Is the idea that the user pays crypto (eg they want to spend some Bitcoin), but what the business receives is regular money (USD, GBP, etc)? So there’s somebody (another actor in this model) that is performing the conversion?

It’s possible I’ve totally misunderstood though… Let me know if I’m on the right track and that will help me figure out what to suggest/recommend.

Thanks again for the question.


Hello Richard, I appreciate the reply!

Yes, so far your assumptions are correct.

The idea is that a customer of a business wants to pay in a cryptocurrency, and the business wants to be paid in a regular sovereign currency like USD.

The third-party would be Corda Settler which would convert the currency, then send the business its desired non-digital currency to their bank account via an ACH, preferably with a memo added for accounting purposes such as “Customer paid via cryptocurrency”.

The use case would be to add a specified amount such as 5-10-25-50$ to the account balance of the customer within the business’s app.

Got it - thanks Matthew.

At a high level, this sounds a bit like what firms like BitPay offer: Accept Bitcoin & Crypto Payments Anywhere with Zero Risk | BitPay ? Their business has evolved a lot over the years but their original product (back in 2013 or so I think) was to let merchants at a ‘Buy with BitPay’ icon on their websites, where the customer could send crypto to the address specified and BitPay would convert to fiat for the merchant.

From a Corda perspective, I suspect you could absolutely build something similar (and maybe better :slight_smile: )… but… it would probably need more than the Settler. The Settler’s ‘sweet spot’, so to speak, is situations where you have an application running on a Corda network (imagine some firms are using it to manage purchase orders and invoices between each other, etc)… and where you need the ability 1) to make a payment (eg to settle an invoice) AND 2) prove that you’ve done so. The key innovation is the idea that if the payer can obtain proof from the underlying payment network then Corda Settler can help automatically get the supplier’s systems to update, rather than having to wait for bank reconciliations, etc.

For your scenario, the additional pieces you’d need to think about would be integration with the crypto networks you want to support (don’t underestimate the difficulty of this) and finding somebody to handle the currency exchange (as in somebody who will make a market for BTC/USD, etc)

Thanks again Richard,

That’s a bit different than how I thought the settlements were completed.

I think the main difference in my approach when compared to BitPay is I’m intending to create an API key linked to the business’s bank account, then the business would only need to add a link to their app that opens the customer’s wallet app with a predetermined transaction amount that they would confirm or reject, then after confirmation the business’s app would add an amount to their account balance.

Am I correct in assuming that Corda Settler can’t send fiat via ACH, but rather confirms the transaction so that all parties can move forward quickly, but when it comes to actual money transference it updates the banks’ ledgers the slow way?

If not, would there be a preferred currency that Corda Settler likes to take in (such as USDC or XDC) to simplify the process if it does not convert currencies so that once the payment is received in that currency by Corda it can be sent to the business via fiat ACH?

Could I use XRP to ripple the currencies into a standard output such as USDC, then use Corda Settler to send an ACH from USDC to Fiat USD?

Am I not understanding how the ACH system works in Corda?

Again, thank you for your time to talk technical hypotheses. :grin:

Hi Matthew - no need to thank me… I love these sorts of discussions :slight_smile:

I guess a key point to stress is that the Settler doesn’t handle money. It’s a pattern (with one example implementation) for how to massively simplify the process of discharging obligations. By ‘obligation’, I mean you’ve received an invoice, or maybe a loan payment is due… you’re obliged to pay somebody something. But in today’s world, once you’ve done this, how does the recipient KNOW that you’ve done it? They have to go check and it’s all a bit of a pain. And if they’re being badly behaved they may DENY they received the money, just to mess with your day.

So the idea is to create and send an instruction to some network/platform to do something (which does mean the settler needs to have the correct authorisations on the underlying system, which may mean control of a key), to receive some sort of evidence/proof that it happened, and then to forward/share that proof with the beneficiary of the action so that their system (a Corda node) can automatically update itself to record that the obligation has been discharged.

Ultimately, the key innovation is the idea of “pre-agreeing” with the beneficiary what proof would satisfy them - and then getting that proof and sending it to them. And by getting this agreed up front, 1) they don’t then need to go check, because you’ve sent them the proof they need and 2) they don’t get to mess you around, because you can show that they’d already agreed to accept this proof.

Sorry for the delay in replying Richard, I had Covid-19.

Thank you again for the in-depth response, this is all extremely helpful. :smiling_face:

I guess a few key capabilities to establish are possible would be:

  1. Can Corda observe/validate cryptocurrency transactions?
    For example, if a crypto-compatible bank was sent $25 USDC from another ISO 20022 blockchain such as Algorand, would we be able to use that transaction as a variable/proof in a CordDapp/Corda Settler?

  2. Can a CorDapp create a transaction for a user to accept/reject?
    For instance, can I create a CorDapp that generates an obligation for the bank to pay the business $25 in fiat if a specific transaction created by the bank requesting $25 in USDC is accepted by the user?

  • Here’s a flowchart to help explain my idea visually.
    Crypto-Fiat Idea Flowchart - Version 1

Hi Matthew. Sorry to hear you’ve had Covid. Hope it wasn’t too bad?

Am I understanding the scenario, from the merchant’s perspective, as: “I want to give my customers the option to pay via USDC or other crypto assets, but I only want to receive USD, into my own bank account; I don’t want to handle any crypto at all… I want my bank to do it”?

Assuming so, then I suspect you could build part of it with Corda, but I’m not 100% convinced it would be the right approach. I say this because concepts like the settler were devised with the assumption that there are some firms who are already using Corda (or will be) but whom need to make/receive payments on other platforms. But it sounds like, in this idea, there would be no need for Corda aside from any help it gave with the payment itself?