Keycard for payments: proof of concept and a demo 💥

We identified and discussed here how Keycard :credit_card: can bring value in crypto payment networks. Because they’re tangible, cost-effective and secure, because they embody payments in their form factor, and don’t need users to use their phone to transact, smart cards are a perfect driver to onboard and develop payment networks.

So … we’ve spent some efforts :muscle: to design and build a reference implementation and tools that enable keycard to be used as a crypto payment debit card. We’ve reached a stage where we have a proof-of-concept (called PoCv1 for those who followed our work), that can be used as a basis for experimentations. We’re not delivering a deployable and auditable product here, but it is a very complete code basis to build real life products for crypto card payments :rocket:

The baseline of the use cases we’re enabling

This implementation is built with the following case in mind:

  • users
    • get a card, which comes empty or with assets already preloaded
    • can tap their card on a merchant PoS (point of sales) to authorize a transaction
    • can tap their card to any smartphone (need NFC and a browser, but doesn’t need any web3 browser or wallet) to check the amount they own on their card and their history, the eth adress to charge it.
    • with status or a web3 browser: manage their wallet (change ownerships of their wallet, set maximum security value for each tx, or tx during a period of time, transfer assets)
  • merchants
    • turn their mobile phone with status into a point of sales
    • remark: the point of sales is a dApp and can be customized easily
    • accept payments with the tap of a card
    • get funds into their own EOA

Here’s a video of the framework in action:

You’ll see two main things in this video:

  • the user experience, he owns a phone with no web3 browser or crypto wallet. In the video he justs taps his keycard to his iPhone which launches Safari.
  • the merchant experience, on his phone running status.

And there are three sequences:
1/ user checks his balance on his card, it’s empty so he gets the QR code from his wallet, and sends some tokens from an other phone. Of course in real life, the card could come with provisioned tokens, or the user could buy token from the merchant.
2/ the merchant enters an amount and asks for the user to tap his card to pay
3/ the user checks his new balance on his phone

Elements of the framework

The elements of the framework are described in the repository here (https://github.com/status-im/payment-network-apps)

In a nutshell:

  • the assets are stored on a smart contract wallet, this wallet is deployed a wallet factory
  • the point of sales is a dApp running on Status
  • this Pos dApp forges a meta-transaction to transfer assets from the user wallet on the merchant EOA, and request the user to tap his card to sign this meta-tx
  • the user signs this meta-tx with his Keycard Cash applet, through the native keycard request screen in Status
  • a non web3 web app allows the user to check his wallet with any NFC phone

How can this be used? next steps?

This work can be used as a base for real world scenarios like:
- on an event, where users get a card and can purchase food or drinks with the card,
- to deploy local currency in a geographical area,
- by chain of shops (e.g coops) that want to accept a virtual currency at their stores.

The code is here: https://github.com/status-im/payment-network-apps

It has not been yet deployed in a real world scenario, but we believe it’s a good basis to do so.

Here are couple of known limits or issues of the current code https://github.com/status-im/payment-network-apps/issues

This is an open project for the community, and anyone is welcome to join and contribute

Status_im

Kudos

Thanks to whole team for designing anf implementing this, and huge additional kudos to @gravityblast @michele and @vitaliy for making this implementation real!

12 Likes

absolutely fantastic work guys, well done!

2 Likes

So excited to release this in the public! Goodjob!

Thanks!

1 Like