import { useStytch } from '@stytch/react';import { useCallback } from 'react';export const Login = () => {const stytch = useStytch();const trigger = useCallback(async () => { /* Request user's address */ const [crypto_wallet_address] = await ethereum.request({ method: 'eth_requestAccounts', }); /* Ask Stytch to generate a challenge for the user */ const { challenge } = await stytch.cryptoWallets.authenticateStart({ crypto_wallet_address, crypto_wallet_type: 'ethereum', }); /* Ask the user to sign the challenge, this takes place on your frontend and uses the browser's built-in crypto provider API. */ const signature = await ethereum.request({ method: 'personal_sign', params: [challenge, crypto_wallet_address], }); /* Send the signature back to Stytch for validation */ await stytch.cryptoWallets.authenticate({ crypto_wallet_address, crypto_wallet_type: 'ethereum', signature, session_duration_minutes: 60, });}, [stytch]);return <button onClick={trigger}>Sign in with Ethereum</button>;};
Copy
Ask AI
{ "challenge": "Signing in with Project: 7_EPetPqfdEiDCJtgad6-xsXytN3Ee9tx6mdRTQK3fC7-J2PDxpP1GAvYB9Ic4E09h-K88STiRIzKSGP", "request_id": "request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141" "status_code": 200}
Report incorrect code
Copy
Ask AI
import { useStytch } from '@stytch/react';import { useCallback } from 'react';export const Login = () => {const stytch = useStytch();const trigger = useCallback(async () => { /* Request user's address */ const [crypto_wallet_address] = await ethereum.request({ method: 'eth_requestAccounts', }); /* Ask Stytch to generate a challenge for the user */ const { challenge } = await stytch.cryptoWallets.authenticateStart({ crypto_wallet_address, crypto_wallet_type: 'ethereum', }); /* Ask the user to sign the challenge, this takes place on your frontend and uses the browser's built-in crypto provider API. */ const signature = await ethereum.request({ method: 'personal_sign', params: [challenge, crypto_wallet_address], }); /* Send the signature back to Stytch for validation */ await stytch.cryptoWallets.authenticate({ crypto_wallet_address, crypto_wallet_type: 'ethereum', signature, session_duration_minutes: 60, });}, [stytch]);return <button onClick={trigger}>Sign in with Ethereum</button>;};
Report incorrect code
Copy
Ask AI
{ "challenge": "Signing in with Project: 7_EPetPqfdEiDCJtgad6-xsXytN3Ee9tx6mdRTQK3fC7-J2PDxpP1GAvYB9Ic4E09h-K88STiRIzKSGP", "request_id": "request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141" "status_code": 200}
Crypto Wallets
Authenticate Start
Authenticate Start using the Stytch React SDK
Copy
Ask AI
import { useStytch } from '@stytch/react';import { useCallback } from 'react';export const Login = () => {const stytch = useStytch();const trigger = useCallback(async () => { /* Request user's address */ const [crypto_wallet_address] = await ethereum.request({ method: 'eth_requestAccounts', }); /* Ask Stytch to generate a challenge for the user */ const { challenge } = await stytch.cryptoWallets.authenticateStart({ crypto_wallet_address, crypto_wallet_type: 'ethereum', }); /* Ask the user to sign the challenge, this takes place on your frontend and uses the browser's built-in crypto provider API. */ const signature = await ethereum.request({ method: 'personal_sign', params: [challenge, crypto_wallet_address], }); /* Send the signature back to Stytch for validation */ await stytch.cryptoWallets.authenticate({ crypto_wallet_address, crypto_wallet_type: 'ethereum', signature, session_duration_minutes: 60, });}, [stytch]);return <button onClick={trigger}>Sign in with Ethereum</button>;};
Copy
Ask AI
{ "challenge": "Signing in with Project: 7_EPetPqfdEiDCJtgad6-xsXytN3Ee9tx6mdRTQK3fC7-J2PDxpP1GAvYB9Ic4E09h-K88STiRIzKSGP", "request_id": "request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141" "status_code": 200}
Wraps the Crypto Wallet Authenticate Start endpoint. Call this method to prompt the user to sign a challenge using their crypto wallet. For Ethereum crypto wallets, the challenge will follow the Sign In With Ethereum (SIWE) protocol if you have toggled SIWE Enabled in the SDK Configuration page . The domain and URI will be inferred automatically, but you may optionally override the URI. Load the challenge data by calling cryptoWallets.authenticateStart(). You’ll then pass this challenge to the user’s wallet for signing. You can do so by using the crypto provider’s built-in API and by including the crypto_wallet_address and challenge that is provided from cryptoWallets.authenticateStart(). See Ethereum’s EIP-1193 for an example of Ethereum’s provider API.
The type of wallet to authenticate. Currently ethereum and solana are supported. Wallets for any EVM-compatible chains (such as Polygon or BSC) are also supported and are grouped under the ethereum type.
The parameters for a Sign In With Ethereum (SIWE) message. May only be passed if the crypto_wallet_type is ethereum and if you have toggled SIWE Enabled in the Frontend SDK page.
A human-readable ASCII assertion that the user will sign. The statement may only include reserved, unreserved, or space characters according to RFC 3986 definitions, and must not contain other forms of whitespace such as newlines, tabs, and carriage returns.
The EIP-155 Chain ID to which the session is bound. Defaults to 1. Must be the string representation of an integer between 1 and 9,223,372,036,854,775,771, inclusive.
The time when the message was generated. Defaults to the current time. All timestamps in our API conform to the RFC 3339 standard and are expressed in UTC, e.g. 2021-12-29T12:33:09Z.
The time when the signed authentication message will become valid. Defaults to the current time. All timestamps in our API conform to the RFC 3339 standard and are expressed in UTC, e.g. 2021-12-29T12:33:09Z.
A system-specific identifier that may be used to uniquely refer to the sign-in request. The message_request_id must be a valid pchar according to RFC 3986 definitions.
Globally unique UUID that is returned with every API call. This value is important to log for debugging purposes; we
may ask for this value to help identify a specific API call when helping you debug an issue.
The HTTP status code of the response. Stytch follows standard HTTP response status code patterns, e.g. 2XX values
equate to success, 3XX values are redirects, 4XX are client errors, and 5XX are server errors.
⌘I
Assistant
Responses are generated using AI and may contain mistakes.