Connect and sign
With MetaMask SDK, you can combine connecting to MetaMask and signing data in two ways:
-
Using Wagmi (two-step approach) - You'll need to connect to the wallet first, then sign in a separate step.
-
Using Vanilla JavaScript (one-step approach) - Use the SDK's
connectAndSign
method to connect and sign in a single user interaction.
Use Wagmi (two-step)
Wagmi doesn't provide a one-step "connect and sign" method, so you'll:
- Connect to the user's wallet.
- Sign your message after connecting.
The following is an example of connecting and signing using React, Wagmi, and MetaMask SDK:
import { useAccount, useConnect, useDisconnect } from "wagmi"
import { useSignMessage } from "wagmi"
function ConnectAndSignWagmi() {
const { address, isConnected } = useAccount()
const { connect, connectors } = useConnect()
const { disconnect } = useDisconnect()
const { signMessage } = useSignMessage({
message: "Hello from Wagmi!",
onSuccess(data) {
console.log("Signature:", data)
},
})
if (!isConnected) {
return (
<div>
{connectors.map((connector) => (
<button key={connector.uid} onClick={() => connect({ connector })}>
Connect with {connector.name}
</button>
))}
</div>
)
}
return (
<div>
<p>Connected: {address}</p>
<button onClick={() => signMessage()}>Sign Message</button>
<button onClick={() => disconnect()}>Disconnect</button>
</div>
)
}
export default ConnectAndSignWagmi
Use Vanilla JavaScript (one-step)
If you're not using Wagmi, you can access MetaMask SDK's connectAndSign
method,
which requests wallet access and signs the message in a single prompt.
For example:
import { MetaMaskSDK } from "@metamask/sdk"
const MMSDK = new MetaMaskSDK()
const provider = MMSDK.getProvider()
async function handleConnectAndSign() {
try {
const signature = await MMSDK.connectAndSign({ msg: "Hello in one go!" })
console.log("Signature:", signature)
} catch (err) {
console.error("Error with connectAndSign:", err)
}
}
document
.getElementById("connectSignBtn")
.addEventListener("click", handleConnectAndSign)
The following HTML displays a Connect & Sign button:
<button id="connectSignBtn">Connect & Sign</button>
This one-step flow is unique to MetaMask SDK's connectAndSign
method.
It's not part of Wagmi or other wallet libraries.