wallet-integration
Wallet Integration
What This Is
Connecting an external wallet to your dapp so the user approves actions in the wallet rather than handing your app a key. @icp-sdk/signer is the relying-party client: your app is the relying party, the wallet is the signer, and they exchange JSON-RPC 2.0 messages over a transport defined by the ICRC signer standards.
This skill covers integrating a signer. Implementing one is out of scope — consent screens, prompt registration and account custody are the wallet's job.
Examples use OISY (https://oisy.com/sign), but nothing here is OISY-specific. For another web signer the transport URL is usually the only change, and BrowserExtensionTransport discovers extension signers you never hardcoded. What a given signer actually supports is a separate question from which transport reaches it — negotiate it rather than assuming (see Negotiate capabilities and pitfall 5).
| Standard | What it gives you | API |
|---|---|---|
| ICRC-25 | Capability discovery + permission lifecycle | getSupportedStandards, requestPermissions, getPermissions |
| ICRC-27 | The user's accounts | getAccounts |
| ICRC-29 | Popup transport over postMessage |
PostMessageTransport |
| ICRC-49 | Execute a canister call | SignerAgent (or callCanister, the raw primitive) |
| ICRC-94 | Browser-extension discovery | BrowserExtensionTransport.discover |
| ICRC-167 | Top-level redirect transport | UrlTransport (new in signer 6) |