Allowing to hold interest earning tokens on your Gnosis Pay card

As many of you know people are finally receiving their Gnosis Pay cards. Those allow them to hold tokens (EURe or GBPe tokens by Monerium) on a Safe they control and spend those tokens directly from a Visa debit card.

We are seeing this as the bases to bring the programability of blockchains to the process of day to day payments.

One of the ideas people come up with immediately is to be as “capital efficient” as possible and hold money in some interest earning form as long as possible and minimize the time of money just held in regular stables.


First - what is the challenge? We (Gnosis pay) ultimately need to pay a merchant in Fiat. Monerium (also with its legal status as e-money) comes already very close to it and have been able to close that loop from: we can take EURe tokens from a Safe and direct them in the form of Fiat ultimately to the merchant.
This means basically all we need to accept a transaction is a guarantee that we will be able to access a specific amount of EURe tokens from the user. This decision needs to be made in <1 sec. This is obviously not enough to execute a blockchain transaction and wait for it to pass. So instead we are checking wether conditions on the blockchain exist that guarantee us to be able to get the funds.

Concrete this means:

  1. the user has enough EURe
  2. the EURe are in a (untempered) Safe that can only be accessed with 2 min time delay
  3. the EURe have no outstanding allowances

Note that 2) and 3) are necessary to exclude race conditions. If the EURe would be held in a regular Safe - the user could trigger in parallel to the Visa transaction and transaction from the Safe to remove all the EURe. However, because they can do that only with a 2min time delay we can be confident to “win” in such a race condition and correctly pay the merchant.


Those requirements forbid us to natively accept tokens like sDAI and e.g. perform a Cowswap trade on the spot. We can not know what price we will get, wether the trade will execute at all. Custom integrations with a market maker would be necessary that can give a price/ execution guarantee on the spot. While this is possible - blockchain is all about permissionless innovation and thus I want to discuss here what is possible for anyone to do without direct integrations to Gnosis pay.


Automatic refill

The simplest stetup that people can do right now is: create a second Safe and put the “savingsasset” they want to use (sDAI, stagEUR, wstETH, tokens deposited into AAve, …) in it. Now they can configure this Safe with a “programmatic COW order”. Those are orders that can define arbitrary onchain conditions - and if the condition is true the order will be placed/ is valid. In our case the condition could simply be the EURe balance of your pay Safe. A user would need to define a refill amount (e.g. 200€) and every time the balance falls below a CoW order is triggered that will sell some of the savings asset for EURe with directly sending the EURe into the “pay Safe”.

If a user want to spend more than the limit they are refilling up to (e.g. 200€) they would need to do a swap transaction roughly ~2 min before they spend from the card. (it will take some time to mark funds as spendable)

Exclusive onchain liquidity

The solution above still feels suboptimal as even if this “liquidity management” can be automated as described - ideally as a user you would not have to bother at all. As long as you have enough money you can spend it and at the same time you want to hold the money in the form your prefer.

A solution mentioned already before was the integration of a market maker that can give a promise (quote) in real time. However - it is possible to replicate this setup onchain. Let’s take the example sDAI - EURe. To allow users to simply hold sDAI on their “pay Safes” we could need guaranteed liquidity. A smart contract can actually facilitate that. It would hold a reserve of EURe and a quote price. Similar to the “2 min Safe delay module” also here it would need to be set up in a way that the quote can only be changed/ or EURe removed with a 2min delay.

In such a setup only one such contract needs to exist for all users. Market makers could permissionlessly quote prices here. This more general framwork could scale to more complex positions - want to use a staked LP tokens? As long as there is exclusive onchain liquidity - no problem.

16 Likes

I have a staked LP token ->stEUR/EURe BPT staked on Aura. So I don’t need a quote, just need to withdraw in EURe after the needed amount is unstaked.

How do I top up my gnosispay safe from there every time the balance drops below 100 euro?

2 Likes