True P2P
Problem: P2P crypto swaps require bank transfer confirmation. This leads to centralization, delays, and errors.
example: swap DAI to USD on Bank of America
Solution: Protocol for P2P swaps based on onchain wire transfer confirmation
How it works
- Bob creates a deal to sell DAI.
- Alice accepts the deal and freezes Bob's DAI.
- Alice sends USD via Zelle.
- Alice creates onchain proof of her Zelle transfer.
- Alice uses this confirmation to close the deal and take Bob's DAI.
Onchain proof for Bank (Zelle) transfer
The confirmation works with Plaid and the LIT Protocol nodes.
- Alice connects Plaid and creates an API key with access to transaction history from the bank.
- Alice calls Programmable PKPs action on LIT Protocol with Plaid transactionId and API key (d).
- Inside the
LitAction, it executes the request on Plaid and verifies that the transaction actually exists in Alice's bank account. (l)
- The
LitAction signs the transaction information using the decentralized signEcdsa().
- Alice adds the signed transaction to the "vault" smart contract (p), and now everyone can verify that she actually made the transaction from her bank account.

Step-by-step-swap
- Bob creates a deal to sell DAI on p (
createPaymentRequest(...))
- Alice accepts the deal and freezes Bob's DAI (
confirmPayment(...))
- Alice sends USD via Zelle.
- Alice creates onchain proof of her Zelle transfer on p (
addTransaction(...))
- Alice uses this confirmation to close the deal and take Bob's DAI on p (
reservePayment(...))
Main components:
- p - P2P Market smart contract
- p - onchain wire transactions storage
- l - LIT Action to verify Plaid requests
- b - Frontend
Demo:
Url: h
Source
- BOS Component: h
- LIT-Protocol action ipfsId:
QmVcetXaAnDcHmpX6cWxsGKGSoid4buVK2PkXQEDmgh6wQ
- LIT-Protocol PKPs: h
- Goerli Plaid transactions endpoint: h
- Goerli P2P Market: h
The project is written in js and solidity. BOS VM and widgets are used for frontend. Verification of bank transactions is done via LIT Protocol, data is received from Plaid.
Solidity contracts are used for p2p market and transactions vaults, Metamask sdk and ethers are used to sign transactions and verify wire transfers.
XMTP Protocol is used for a secure chat during P2P deal