Setup
This library is compatible with NodeJS, browsers and React-Native applications (NodeJS modules require
polyfills
for React-Native).import SignClient from "@walletconnect/sign-client";
const signClient = await SignClient.init({
projectId: "<YOUR_PROJECT_ID>", // Get ProjectID from WalletConnect
metadata: {
name: "My DApp",
description: "My DApp",
url: "#",
icons: ["https://raw.githubusercontent.com/tetrixtech/assets/main/icons/PitakaLogo.png"],
},
});
2. Add listeners for desired
SignClient
events.signClient.on("session_event", ({ event }) => {
// Handle session events, such as "chainChanged", "accountsChanged", etc.
});
signClient.on("session_update", ({ topic, params }) => {
const { namespaces } = params;
const _session = signClient.session.get(topic);
// Overwrite the `namespaces` of the existing session with the incoming one.
const updatedSession = { ..._session, namespaces };
// Integrate the updated session state into your dapp state.
onSessionUpdate(updatedSession);
});
signClient.on("session_delete", () => {
// Session was deleted -> reset the dapp state, clean up from user session, etc.
});
3. Connect the application and specify session permissions.
import QRCodeModal from "@walletconnect/qrcode-modal";
// ...
try {
const { uri, approval } = await signClient.connect({
// Optionally: pass a known prior pairing (e.g. from `signClient.core.pairing.getPairings()`) to skip the `uri` step.
pairingTopic: pairing?.topic,
// Provide the namespaces and chains (e.g. `eip155` for EVM-based chains) we want to use in this session.
requiredNamespaces: {
eip155: {
methods: [
"eth_sendTransaction",
"eth_signTransaction",
"eth_sign",
"personal_sign",
"eth_signTypedData",
],
chains: ["eip155:1"],
events: ["chainChanged", "accountsChanged"],
},
},
});
// Open QRCode modal if a URI was returned (i.e. we're not connecting an existing pairing).
if (uri) {
// Include Desktop Wallets
QRCodeModal.open(uri, () => {
// Alternatively you can use this to only use the QRModal
// QRCodeModal.open(uri, _, { desktopLinks: []});
console.log("EVENT", "QR Code Modal closed");
});
}
// Await session approval from the wallet.
const session = await approval();
// Handle the returned session (e.g. update UI to "connected" state).
await onSessionConnected(session);
} catch (e) {
console.error(e);
} finally {
// Close the QRCode modal in case it was open.
QRCodeModal.close();
}
Last modified 8mo ago