Skip to main content

useSafe

Hook that allows users to connect their Safe wallet to your dApp.

Before connecting Safe wallet, a personal wallet must be connected and should be on the same network which Safe wallet is deployed to

You can connect to a personal wallet using either useConnect hook or wallet specific hook - for example: useMetamask

From this state, you are ready to use the useSafe hook in your app:

import { Goerli } from "@thirdweb-dev/chains";
import { useSafe, useWallet } from "@thirdweb-dev/react";
import { SafeWallet } from "@thirdweb-dev/wallets";

const Home = () => {
const connectToSafe = useSafe();
const wallet = useWallet();
const connectToMetamask = useMetamask(); // using metamask as personal wallet

if (!wallet) {
return (
<button
onClick={() => {
connectToMetamask({
chainId: Goerli.chainId,
});
}}
>
Connect personal wallet
</button>
);
}

if (wallet instanceof SafeWallet) {
return <div>Safe wallet is connected</div>;
}

return (
<button
onClick={async () =>
await connectToSafe({
safeAddress: "0x...", // Smart contract address of the Safe wallet
chain: Goerli, // Chain the Safe wallet is deployed to
personalWallet: wallet,
})
}
>
Connect Safe
</button>
);
};

The safeWallet (with all personalWallets configured) need to be added in ThirdwebProvider's supportedWallets if you want the wallet to auto-connect on next page load.

Configuration

safeAddress

Smart contract address of the Safe wallet

chain

An object of type Chain from @thirdweb-dev/chains package.

It should be the same chain the Safe wallet is deployed to

personalWallet

a connected wallet instance of type WalletInstance from @thirdweb-dev/react package