WalletPair

Connect dApps to wallets.
EVM chains, over an end-to-end encrypted link. No registration.

Why WalletPair

Just Functions

A short list of functions per network, each with a name, an input and an output.

EVM chains

EIP-1193 and EIP-6963: existing dApps work unchanged.

No Servers to Run

WalletPair is only messages. PeerConnect relays carry them and store nothing.

End-to-End Encrypted

A Noise handshake pins both sides. Relays see sizes and timing, never contents.

Nothing Lost

Requests wait while the phone is offline and arrive once, in order.

Zero Registration

No API keys, project IDs or accounts. Scan a QR code and go.

How It Works

The dApp shows a QR code and the Wallet scans it. PeerConnect pairs them and encrypts everything between them. From then on the dApp calls functions and the Wallet answers.

protocol flow
 dApp                    PeerConnect relay                 Wallet
  │                              │                              │
  │  ┌────────────────────────────────────────────────────────┐ │
  │  │ dApp shows walletpair:<invite> · Wallet scans it       │ │
  │  └────────────────────────────────────────────────────────┘ │
  │                              │                              │
  │  ┌────────────────────────────────────────────────────────┐ │
  │  │ PeerConnect pairs them and encrypts end to end         │ │
  │  └────────────────────────────────────────────────────────┘ │
  │                              │                              │
  │── walletpair_connect ───────>│─────────────────────────────>│
  │<─────────────────────────────│<────── accounts and chains ──│
  │                              │                              │
  │── personal_sign ────────────>│─────────────────────────────>│
  │<─────────────────────────────│<──────────────── signature ──│
  │                              │                              │
  │── eth_sendTransaction ──────>│─────────────────────────────>│
  │<─────────────────────────────│<───────── transaction hash ──│
  │                              │                              │
  │<─────────────────────────────│<────────────── state event ──│

Start Integrating

For dApp Developers

  • With the extension installed, EVM dApps need no changes
  • Or show the invite yourself and call the functions directly
// Show the invite as a QR code
walletpair:wss://relay.example.com#q3V0…

// Then call functions
→ {"id":"1","method":"walletpair_connect","params":[{
     "name":"Example dApp","namespaces":["eip155"]}]}
← {"id":"1","result":{"wallet":{"name":"Example Wallet"},
     "state":{"eip155":{"chain":"eip155:1","accounts":["0xd8da…"]}}}}
Read the overview →

For Wallet Developers

  • Scan the QR code and join the room with PeerConnect
  • Answer the functions of the networks you support, and send one event
// Answer each call after asking the user
→ {"id":"2","method":"personal_sign",
   "params":["0x68656c6c6f","0xd8da…"]}
← {"id":"2","result":"0x5d5f…1b"}

// Tell the dApp when something changes
← {"event":"state","data":{"eip155":{"chain":"eip155:137",…}}}
Read the protocol →