From 160034b1e1af07396730132fb93fb93bbdd7827c Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 19:18:15 -0600 Subject: [PATCH 01/24] add sign in to base package --- packages/core/base/package.json | 2 +- packages/core/base/src/signer.ts | 15 +++++++++++++++ packages/core/base/src/standard.ts | 3 ++- packages/core/base/src/types.ts | 9 +++++++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/core/base/package.json b/packages/core/base/package.json index 6c68f6333..04787f916 100644 --- a/packages/core/base/package.json +++ b/packages/core/base/package.json @@ -35,7 +35,7 @@ "@solana/web3.js": "^1.77.3" }, "dependencies": { - "@solana/wallet-standard-features": "^1.0.1", + "@solana/wallet-standard-features": "1.1.0-alpha.4", "@wallet-standard/base": "^1.0.1", "@wallet-standard/features": "^1.0.3", "eventemitter3": "^4.0.7" diff --git a/packages/core/base/src/signer.ts b/packages/core/base/src/signer.ts index d6ac4fa8b..76f147b00 100644 --- a/packages/core/base/src/signer.ts +++ b/packages/core/base/src/signer.ts @@ -1,3 +1,4 @@ +import type { SolanaSignInInput, SolanaSignInOutput } from '@solana/wallet-standard-features'; import type { Connection, TransactionSignature } from '@solana/web3.js'; import { BaseWalletAdapter, @@ -127,3 +128,17 @@ export abstract class BaseMessageSignerWalletAdapter; } + +export interface SignInMessageSignerWalletAdapterProps extends WalletAdapterProps { + signIn(input?: SolanaSignInInput): Promise; +} + +export type SignInMessageSignerWalletAdapter = WalletAdapter & + SignInMessageSignerWalletAdapterProps; + +export abstract class BaseSignInMessageSignerWalletAdapter + extends BaseMessageSignerWalletAdapter + implements SignInMessageSignerWalletAdapter +{ + abstract signIn(input?: SolanaSignInInput): Promise; +} diff --git a/packages/core/base/src/standard.ts b/packages/core/base/src/standard.ts index 0bb78566b..ad865e620 100644 --- a/packages/core/base/src/standard.ts +++ b/packages/core/base/src/standard.ts @@ -1,6 +1,7 @@ import { SolanaSignAndSendTransaction, type SolanaSignAndSendTransactionFeature, + type SolanaSignInFeature, type SolanaSignMessageFeature, SolanaSignTransaction, type SolanaSignTransactionFeature, @@ -19,7 +20,7 @@ export type WalletAdapterCompatibleStandardWallet = StandardWalletWithFeatures< StandardConnectFeature & StandardEventsFeature & (SolanaSignAndSendTransactionFeature | SolanaSignTransactionFeature) & - (StandardDisconnectFeature | SolanaSignMessageFeature | object) + (StandardDisconnectFeature | SolanaSignMessageFeature | SolanaSignInFeature | object) >; export interface StandardWalletAdapterProps extends WalletAdapterProps { diff --git a/packages/core/base/src/types.ts b/packages/core/base/src/types.ts index 56dba0402..f94079c21 100644 --- a/packages/core/base/src/types.ts +++ b/packages/core/base/src/types.ts @@ -1,8 +1,13 @@ import type { WalletAdapter } from './adapter.js'; -import type { MessageSignerWalletAdapter, SignerWalletAdapter } from './signer.js'; +import type { MessageSignerWalletAdapter, SignerWalletAdapter, SignInMessageSignerWalletAdapter } from './signer.js'; import type { StandardWalletAdapter } from './standard.js'; -export type Adapter = WalletAdapter | SignerWalletAdapter | MessageSignerWalletAdapter | StandardWalletAdapter; +export type Adapter = + | WalletAdapter + | SignerWalletAdapter + | MessageSignerWalletAdapter + | SignInMessageSignerWalletAdapter + | StandardWalletAdapter; export enum WalletAdapterNetwork { Mainnet = 'mainnet-beta', From 34d2ceaa6022b57934479bf8c9e2022a7d092574 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 19:19:30 -0600 Subject: [PATCH 02/24] add sign in to burner wallet --- packages/wallets/unsafe-burner/package.json | 4 ++- packages/wallets/unsafe-burner/src/adapter.ts | 32 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json index 11b32aeb4..dee485881 100644 --- a/packages/wallets/unsafe-burner/package.json +++ b/packages/wallets/unsafe-burner/package.json @@ -36,7 +36,9 @@ }, "dependencies": { "@noble/curves": "^1.1.0", - "@solana/wallet-adapter-base": "workspace:^" + "@solana/wallet-adapter-base": "workspace:^", + "@solana/wallet-standard-features": "1.1.0-alpha.4", + "@solana/wallet-standard-util": "1.1.0-alpha.7" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/wallets/unsafe-burner/src/adapter.ts b/packages/wallets/unsafe-burner/src/adapter.ts index b653f0a05..7159431e7 100644 --- a/packages/wallets/unsafe-burner/src/adapter.ts +++ b/packages/wallets/unsafe-burner/src/adapter.ts @@ -1,11 +1,13 @@ import { ed25519 } from '@noble/curves/ed25519'; import type { WalletName } from '@solana/wallet-adapter-base'; import { - BaseMessageSignerWalletAdapter, + BaseSignInMessageSignerWalletAdapter, isVersionedTransaction, WalletNotConnectedError, WalletReadyState, } from '@solana/wallet-adapter-base'; +import { type SolanaSignInInput, type SolanaSignInOutput } from '@solana/wallet-standard-features'; +import { createSignInMessage } from '@solana/wallet-standard-util'; import type { Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js'; import { Keypair } from '@solana/web3.js'; @@ -15,7 +17,7 @@ export const UnsafeBurnerWalletName = 'Burner Wallet' as WalletName<'Burner Wall * This burner wallet adapter is unsafe to use and is only included to provide an easy way for applications to test * Wallet Adapter without using a third-party wallet. */ -export class UnsafeBurnerWalletAdapter extends BaseMessageSignerWalletAdapter { +export class UnsafeBurnerWalletAdapter extends BaseSignInMessageSignerWalletAdapter { name = UnsafeBurnerWalletName; url = 'https://github.com/solana-labs/wallet-adapter#usage'; icon = @@ -77,4 +79,30 @@ export class UnsafeBurnerWalletAdapter extends BaseMessageSignerWalletAdapter { return ed25519.sign(message, this._keypair.secretKey.slice(0, 32)); } + + async signIn(input: SolanaSignInInput = {}): Promise { + const { publicKey, secretKey } = (this._keypair ||= new Keypair()); + const domain = input.domain || window.location.host; + const address = input.address || publicKey.toBase58(); + + const signedMessage = createSignInMessage({ + ...input, + domain, + address, + }); + const signature = ed25519.sign(signedMessage, secretKey.slice(0, 32)); + + this.emit('connect', publicKey); + + return { + account: { + address, + publicKey: publicKey.toBytes(), + chains: [], + features: [], + }, + signedMessage, + signature, + }; + } } From 22d662cf834d53f5e51e9d6688bcea2a04552d5b Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 19:18:40 -0600 Subject: [PATCH 03/24] add sign in to react package --- packages/core/react/package.json | 2 +- packages/core/react/src/WalletProvider.tsx | 3 +++ packages/core/react/src/WalletProviderBase.tsx | 13 +++++++++++++ packages/core/react/src/useWallet.ts | 5 +++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/core/react/package.json b/packages/core/react/package.json index 5dec79ffe..5f7a4fc2a 100644 --- a/packages/core/react/package.json +++ b/packages/core/react/package.json @@ -39,7 +39,7 @@ "dependencies": { "@solana-mobile/wallet-adapter-mobile": "^2.0.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-wallet-adapter-react": "^1.0.2" + "@solana/wallet-standard-wallet-adapter-react": "1.0.3-alpha.4" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index e032e23ca..67d7147c3 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -18,6 +18,7 @@ export interface WalletProviderProps { children: ReactNode; wallets: Adapter[]; autoConnect?: boolean; + autoSignIn?: boolean; localStorageKey?: string; onError?: (error: WalletError, adapter?: Adapter) => void; } @@ -47,6 +48,8 @@ export function WalletProvider({ children, wallets: adapters, autoConnect, + // FIXME: implement + autoSignIn, localStorageKey = 'walletName', onError, }: WalletProviderProps) { diff --git a/packages/core/react/src/WalletProviderBase.tsx b/packages/core/react/src/WalletProviderBase.tsx index 9569d51b8..96da7daaf 100644 --- a/packages/core/react/src/WalletProviderBase.tsx +++ b/packages/core/react/src/WalletProviderBase.tsx @@ -2,6 +2,7 @@ import { type Adapter, type MessageSignerWalletAdapterProps, type SignerWalletAdapterProps, + type SignInMessageSignerWalletAdapterProps, type WalletAdapterProps, type WalletError, type WalletName, @@ -239,6 +240,17 @@ export function WalletProviderBase({ [adapter, connected] ); + // Sign in if the wallet supports it + const signIn: SignInMessageSignerWalletAdapterProps['signIn'] | undefined = useMemo( + () => + adapter && 'signIn' in adapter + ? async (input) => { + return await adapter.signIn(input); + } + : undefined, + [adapter] + ); + const handleConnect = useCallback(async () => { if (isConnectingRef.current || isDisconnectingRef.current || wallet?.adapter.connected) return; if (!wallet) throw handleErrorRef.current(new WalletNotSelectedError()); @@ -288,6 +300,7 @@ export function WalletProviderBase({ signTransaction, signAllTransactions, signMessage, + signIn, }} > {children} diff --git a/packages/core/react/src/useWallet.ts b/packages/core/react/src/useWallet.ts index 5b8dada70..87a199606 100644 --- a/packages/core/react/src/useWallet.ts +++ b/packages/core/react/src/useWallet.ts @@ -2,6 +2,7 @@ import { type Adapter, type MessageSignerWalletAdapterProps, type SignerWalletAdapterProps, + type SignInMessageSignerWalletAdapterProps, type WalletAdapterProps, type WalletName, type WalletReadyState, @@ -31,6 +32,7 @@ export interface WalletContextState { signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined; signAllTransactions: SignerWalletAdapterProps['signAllTransactions'] | undefined; signMessage: MessageSignerWalletAdapterProps['signMessage'] | undefined; + signIn: SignInMessageSignerWalletAdapterProps['signIn'] | undefined; } const EMPTY_ARRAY: ReadonlyArray = []; @@ -61,6 +63,9 @@ const DEFAULT_CONTEXT: Partial = { signMessage() { return Promise.reject(logMissingProviderError('call', 'signMessage')); }, + signIn() { + return Promise.reject(logMissingProviderError('call', 'signIn')); + }, }; Object.defineProperty(DEFAULT_CONTEXT, 'wallets', { get() { From e25f9db7ab2c045a2ae6cba2168306f6518061fb Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 19:19:15 -0600 Subject: [PATCH 04/24] add sign in to example package --- packages/starter/example/package.json | 2 +- .../starter/example/src/components/SignIn.tsx | 32 +++++++++++++++++++ .../example/src/components/SignMessage.tsx | 22 +++++++++++-- packages/starter/example/src/pages/index.tsx | 5 ++- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 packages/starter/example/src/components/SignIn.tsx diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index 69308ba04..22904dbeb 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -39,13 +39,13 @@ "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.11.16", "@mui/material": "^5.13.5", - "@noble/curves": "^1.1.0", "@solana/wallet-adapter-ant-design": "workspace:^", "@solana/wallet-adapter-base": "workspace:^", "@solana/wallet-adapter-material-ui": "workspace:^", "@solana/wallet-adapter-react": "workspace:^", "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", + "@solana/wallet-standard-util": "1.1.0-alpha.7", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/starter/example/src/components/SignIn.tsx b/packages/starter/example/src/components/SignIn.tsx new file mode 100644 index 000000000..be632e6e0 --- /dev/null +++ b/packages/starter/example/src/components/SignIn.tsx @@ -0,0 +1,32 @@ +import { Button } from '@mui/material'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { verifySignIn } from '@solana/wallet-standard-util'; +import type { FC } from 'react'; +import React, { useCallback } from 'react'; +import { useNotify } from './notify'; + +export const SignIn: FC = () => { + const { signIn } = useWallet(); + const notify = useNotify(); + + const onClick = useCallback(async () => { + try { + if (!signIn) throw new Error('Wallet does not support message signing!'); + + // FIXME: wrap this for wallet adapter to simplify args + const input = {}; + const output = await signIn(input); + if (!verifySignIn(input, output)) throw new Error('Sign in signature invalid!'); + + notify('success', `Signed in: ${output.account.address}`); + } catch (error: any) { + notify('error', `Sign In failed: ${error?.message}`); + } + }, [signIn, notify]); + + return ( + + ); +}; diff --git a/packages/starter/example/src/components/SignMessage.tsx b/packages/starter/example/src/components/SignMessage.tsx index 65b8e2adf..3c29b6ef9 100644 --- a/packages/starter/example/src/components/SignMessage.tsx +++ b/packages/starter/example/src/components/SignMessage.tsx @@ -1,6 +1,6 @@ import { Button } from '@mui/material'; -import { ed25519 } from '@noble/curves/ed25519'; import { useWallet } from '@solana/wallet-adapter-react'; +import { verifySignMessage } from '@solana/wallet-standard-util'; import bs58 from 'bs58'; import type { FC } from 'react'; import React, { useCallback } from 'react'; @@ -17,7 +17,25 @@ export const SignMessage: FC = () => { const message = new TextEncoder().encode('Hello, world!'); const signature = await signMessage(message); - if (!ed25519.verify(signature, message, publicKey.toBytes())) throw new Error('Message signature invalid!'); + if ( + // FIXME: wrap this for wallet adapter to simplify args + !verifySignMessage( + { + account: { + address: publicKey.toBase58(), + publicKey: publicKey.toBytes(), + chains: [], + features: [], + }, + message, + }, + { + signedMessage: message, + signature, + } + ) + ) + throw new Error('Message signature invalid!'); notify('success', `Message signature: ${bs58.encode(signature)}`); } catch (error: any) { diff --git a/packages/starter/example/src/pages/index.tsx b/packages/starter/example/src/pages/index.tsx index f44194efb..d5f7d8ff5 100644 --- a/packages/starter/example/src/pages/index.tsx +++ b/packages/starter/example/src/pages/index.tsx @@ -70,6 +70,7 @@ const SendV0TransactionDynamic = dynamic( async () => (await import('../components/SendV0Transaction')).SendV0Transaction, { ssr: false } ); +const SignInDynamic = dynamic(async () => (await import('../components/SignIn')).SignIn, { ssr: false }); const SignMessageDynamic = dynamic(async () => (await import('../components/SignMessage')).SignMessage, { ssr: false }); const SignTransactionDynamic = dynamic(async () => (await import('../components/SignTransaction')).SignTransaction, { ssr: false, @@ -183,7 +184,9 @@ const Index: NextPage = () => { - + + + From 23b965efe12b647178c54aa2a19ac622c7f2d20f Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 19:19:44 -0600 Subject: [PATCH 05/24] add FIXME to faq --- FAQ.md | 1 + 1 file changed, 1 insertion(+) diff --git a/FAQ.md b/FAQ.md index 162c43a18..ead7b8007 100644 --- a/FAQ.md +++ b/FAQ.md @@ -143,6 +143,7 @@ export const SignMessageButton: FC = () => { const message = new TextEncoder().encode('Hello, world!'); // Sign the bytes using the wallet const signature = await signMessage(message); + // FIXME: replace with `verifySignMessage` // Verify that the bytes were signed using the private key that matches the known public key if (!ed25519.verify(signature, message, publicKey.toBytes())) throw new Error('Invalid signature!'); From c393bd4554ec1d3090086165023146791545b6fe Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 19:20:13 -0600 Subject: [PATCH 06/24] update lockfile --- pnpm-lock.yaml | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c70e122ad..4c84c7bea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,8 +70,8 @@ importers: packages/core/base: dependencies: '@solana/wallet-standard-features': - specifier: ^1.0.1 - version: 1.0.1 + specifier: 1.1.0-alpha.4 + version: 1.1.0-alpha.4 '@wallet-standard/base': specifier: ^1.0.1 version: 1.0.1 @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: ^1.0.2 - version: 1.0.2(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0) + specifier: 1.0.3-alpha.4 + version: 1.0.3-alpha.4(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -243,9 +243,6 @@ importers: '@mui/material': specifier: ^5.13.5 version: 5.13.5(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.13)(react-dom@18.2.0)(react@18.2.0) - '@noble/curves': - specifier: ^1.1.0 - version: 1.1.0 '@solana/wallet-adapter-ant-design': specifier: workspace:^ version: link:../../ui/ant-design @@ -264,6 +261,9 @@ importers: '@solana/wallet-adapter-wallets': specifier: workspace:^ version: link:../../wallets/wallets + '@solana/wallet-standard-util': + specifier: 1.1.0-alpha.7 + version: 1.1.0-alpha.7 '@solana/web3.js': specifier: ^1.77.3 version: 1.77.3 @@ -1207,6 +1207,12 @@ importers: '@solana/wallet-adapter-base': specifier: workspace:^ version: link:../../core/base + '@solana/wallet-standard-features': + specifier: 1.1.0-alpha.4 + version: 1.1.0-alpha.4 + '@solana/wallet-standard-util': + specifier: 1.1.0-alpha.7 + version: 1.1.0-alpha.7 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -5846,14 +5852,14 @@ packages: resolution: {integrity: sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==} dependencies: '@noble/curves': 1.0.0 - '@noble/hashes': 1.3.1 + '@noble/hashes': 1.3.0 '@scure/base': 1.1.1 dev: false /@scure/bip39@1.2.0: resolution: {integrity: sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==} dependencies: - '@noble/hashes': 1.3.1 + '@noble/hashes': 1.3.0 '@scure/base': 1.1.1 dev: false @@ -5959,24 +5965,25 @@ packages: '@wallet-standard/base': 1.0.1 dev: false - /@solana/wallet-standard-features@1.0.1: - resolution: {integrity: sha512-SUfx7KtBJ55XIj0qAhhVcC1I6MklAXqWFEz9hDHW+6YcJIyvfix/EilBhaBik1FJ2JT0zukpOfFv8zpuAbFRbw==} + /@solana/wallet-standard-features@1.1.0-alpha.4: + resolution: {integrity: sha512-+jrrcAx9Of6dGlZfN083bubcGr7/IkkJxoZqAYAuXkBXr84aPJQC0CMGAZZJkGU/ZXdhCHue/8U3i/6gKXGPrg==} engines: {node: '>=16'} dependencies: '@wallet-standard/base': 1.0.1 '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.0.0: - resolution: {integrity: sha512-qRAOBXnN7dwvtgzTtxIHsSeJAMbGNZdSWs57TT8pCyBrKL5dVxaK2u95Dm17SRSzwfKl/EByV1lTjOxXyKWS+g==} + /@solana/wallet-standard-util@1.1.0-alpha.7: + resolution: {integrity: sha512-aHsAs4MjOiwiTi5EllbJiq7v48+wnWXYGRf4pfqzLKWadbZAjbU7dSiaxvYPSAzYBG425lZOi2NVeEL7whqTAA==} engines: {node: '>=16'} dependencies: + '@noble/curves': 1.1.0 '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.0.1 + '@solana/wallet-standard-features': 1.1.0-alpha.4 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.0.2(@solana/web3.js@1.77.3)(bs58@4.0.1): - resolution: {integrity: sha512-QqkupdWvWuihX87W6ijt174u6ZdP5OSFlNhZhuhoMlIdyI/sj7MhGsdppuRlMh65oVO2WNWTL9y2bO5Pbx+dfg==} + /@solana/wallet-standard-wallet-adapter-base@1.0.3-alpha.4(@solana/web3.js@1.77.3)(bs58@4.0.1): + resolution: {integrity: sha512-a9IxBM7asovG8iAgvIXRmDdriYQmvWQMzYAuOcY0d+Df1UaUq8MQAaWzjqOotkOVVLnHu4qqSqg0pJW2cze0Xw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 @@ -5984,8 +5991,8 @@ packages: dependencies: '@solana/wallet-adapter-base': link:packages/core/base '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.0.1 - '@solana/wallet-standard-util': 1.0.0 + '@solana/wallet-standard-features': 1.1.0-alpha.4 + '@solana/wallet-standard-util': 1.1.0-alpha.7 '@solana/web3.js': 1.77.3 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -5994,15 +6001,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.0.2(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-0YTPUnjiSG5ajDP2hK8EipxkeHhO3+nCtXeF1eS/ZP2QcFAgS/4luywrn/6CdfzQ2cQYPCFdnG/QculpUp6bBg==} + /@solana/wallet-standard-wallet-adapter-react@1.0.3-alpha.4(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-N7Wya4SDtOntOSphPS1lRehhAa2fwkTq5a9lvAR1DNUozNywXJuGwj1uhSETktr0H8xO5MlyEJqTwbmppraNjg==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.0.2(@solana/web3.js@1.77.3)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.0.3-alpha.4(@solana/web3.js@1.77.3)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From 0927f148c33e358b029659e5fc0b9cd370233ca1 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 20:08:41 -0600 Subject: [PATCH 07/24] add WalletSignInError --- packages/core/base/src/errors.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core/base/src/errors.ts b/packages/core/base/src/errors.ts index c2e89e224..d6c3e4c70 100644 --- a/packages/core/base/src/errors.ts +++ b/packages/core/base/src/errors.ts @@ -52,12 +52,16 @@ export class WalletSendTransactionError extends WalletError { name = 'WalletSendTransactionError'; } +export class WalletSignTransactionError extends WalletError { + name = 'WalletSignTransactionError'; +} + export class WalletSignMessageError extends WalletError { name = 'WalletSignMessageError'; } -export class WalletSignTransactionError extends WalletError { - name = 'WalletSignTransactionError'; +export class WalletSignInError extends WalletError { + name = 'WalletSignInError'; } export class WalletTimeoutError extends WalletError { From 06bda691a7f06859354b27a6fdd845fdc453d78c Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 21 Jun 2023 20:47:00 -0600 Subject: [PATCH 08/24] use latest alpha of @solana/wallet-standard packages --- packages/core/base/package.json | 2 +- packages/core/react/package.json | 2 +- packages/starter/example/package.json | 2 +- packages/wallets/unsafe-burner/package.json | 4 +- pnpm-lock.yaml | 44 ++++++++++----------- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/core/base/package.json b/packages/core/base/package.json index 04787f916..341117d71 100644 --- a/packages/core/base/package.json +++ b/packages/core/base/package.json @@ -35,7 +35,7 @@ "@solana/web3.js": "^1.77.3" }, "dependencies": { - "@solana/wallet-standard-features": "1.1.0-alpha.4", + "@solana/wallet-standard-features": "1.1.0-alpha.5", "@wallet-standard/base": "^1.0.1", "@wallet-standard/features": "^1.0.3", "eventemitter3": "^4.0.7" diff --git a/packages/core/react/package.json b/packages/core/react/package.json index 5f7a4fc2a..1afa885a6 100644 --- a/packages/core/react/package.json +++ b/packages/core/react/package.json @@ -39,7 +39,7 @@ "dependencies": { "@solana-mobile/wallet-adapter-mobile": "^2.0.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-wallet-adapter-react": "1.0.3-alpha.4" + "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.8" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index 22904dbeb..d3aa22410 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -45,7 +45,7 @@ "@solana/wallet-adapter-react": "workspace:^", "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", - "@solana/wallet-standard-util": "1.1.0-alpha.7", + "@solana/wallet-standard-util": "1.1.0-alpha.8", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json index dee485881..259f6bb76 100644 --- a/packages/wallets/unsafe-burner/package.json +++ b/packages/wallets/unsafe-burner/package.json @@ -37,8 +37,8 @@ "dependencies": { "@noble/curves": "^1.1.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-features": "1.1.0-alpha.4", - "@solana/wallet-standard-util": "1.1.0-alpha.7" + "@solana/wallet-standard-features": "1.1.0-alpha.5", + "@solana/wallet-standard-util": "1.1.0-alpha.8" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c84c7bea..fd3b57f12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,8 +70,8 @@ importers: packages/core/base: dependencies: '@solana/wallet-standard-features': - specifier: 1.1.0-alpha.4 - version: 1.1.0-alpha.4 + specifier: 1.1.0-alpha.5 + version: 1.1.0-alpha.5 '@wallet-standard/base': specifier: ^1.0.1 version: 1.0.1 @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: 1.0.3-alpha.4 - version: 1.0.3-alpha.4(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0) + specifier: 1.1.0-alpha.8 + version: 1.1.0-alpha.8(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -262,8 +262,8 @@ importers: specifier: workspace:^ version: link:../../wallets/wallets '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.7 - version: 1.1.0-alpha.7 + specifier: 1.1.0-alpha.8 + version: 1.1.0-alpha.8 '@solana/web3.js': specifier: ^1.77.3 version: 1.77.3 @@ -1208,11 +1208,11 @@ importers: specifier: workspace:^ version: link:../../core/base '@solana/wallet-standard-features': - specifier: 1.1.0-alpha.4 - version: 1.1.0-alpha.4 + specifier: 1.1.0-alpha.5 + version: 1.1.0-alpha.5 '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.7 - version: 1.1.0-alpha.7 + specifier: 1.1.0-alpha.8 + version: 1.1.0-alpha.8 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -5965,25 +5965,25 @@ packages: '@wallet-standard/base': 1.0.1 dev: false - /@solana/wallet-standard-features@1.1.0-alpha.4: - resolution: {integrity: sha512-+jrrcAx9Of6dGlZfN083bubcGr7/IkkJxoZqAYAuXkBXr84aPJQC0CMGAZZJkGU/ZXdhCHue/8U3i/6gKXGPrg==} + /@solana/wallet-standard-features@1.1.0-alpha.5: + resolution: {integrity: sha512-VJQPK+4tcXyQghv3QgphFdTRAIPEMFcivDzmKRqFr5+9W83ZqVmNzpibCEakEkznE3oSRZcvZiE+t8ctT+WEiQ==} engines: {node: '>=16'} dependencies: '@wallet-standard/base': 1.0.1 '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.1.0-alpha.7: - resolution: {integrity: sha512-aHsAs4MjOiwiTi5EllbJiq7v48+wnWXYGRf4pfqzLKWadbZAjbU7dSiaxvYPSAzYBG425lZOi2NVeEL7whqTAA==} + /@solana/wallet-standard-util@1.1.0-alpha.8: + resolution: {integrity: sha512-+7wM18G3n84gBv1r/v5e7MAnM3XmykZKabNtHn1YmdSwZarpiLP+6et8egUo1kVwXLowdwQwpq6Ocio9mhuOUQ==} engines: {node: '>=16'} dependencies: '@noble/curves': 1.1.0 '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.1.0-alpha.4 + '@solana/wallet-standard-features': 1.1.0-alpha.5 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.0.3-alpha.4(@solana/web3.js@1.77.3)(bs58@4.0.1): - resolution: {integrity: sha512-a9IxBM7asovG8iAgvIXRmDdriYQmvWQMzYAuOcY0d+Df1UaUq8MQAaWzjqOotkOVVLnHu4qqSqg0pJW2cze0Xw==} + /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.8(@solana/web3.js@1.77.3)(bs58@4.0.1): + resolution: {integrity: sha512-yoiLlnlPAyBrHGAf+e8+7lMjpwRAeceDo+IsKruvYO270NImDrtpzPtSr4GXqGyOs2WpbmlQxzbjYNoa9CVT+g==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 @@ -5991,8 +5991,8 @@ packages: dependencies: '@solana/wallet-adapter-base': link:packages/core/base '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.1.0-alpha.4 - '@solana/wallet-standard-util': 1.1.0-alpha.7 + '@solana/wallet-standard-features': 1.1.0-alpha.5 + '@solana/wallet-standard-util': 1.1.0-alpha.8 '@solana/web3.js': 1.77.3 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -6001,15 +6001,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.0.3-alpha.4(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-N7Wya4SDtOntOSphPS1lRehhAa2fwkTq5a9lvAR1DNUozNywXJuGwj1uhSETktr0H8xO5MlyEJqTwbmppraNjg==} + /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.8(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-KZe2WSZQyPAOcCCadd6mGN2DhGl1sH2q72yRzNF5sr9D0k9LWTj2PNfeKlW29xi9IiVYZI4Iy46gvSfCNsH19Q==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.0.3-alpha.4(@solana/web3.js@1.77.3)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.8(@solana/web3.js@1.77.3)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From 686ce155cc0a3ee10b2a9b908369dff42ff5358b Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 16:30:59 -0600 Subject: [PATCH 09/24] remove message verification from example --- packages/starter/example/package.json | 1 - .../starter/example/src/components/SignIn.tsx | 9 +++------ .../example/src/components/SignMessage.tsx | 20 ------------------- pnpm-lock.yaml | 3 --- 4 files changed, 3 insertions(+), 30 deletions(-) diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index d60a2711a..3785e4b5a 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -45,7 +45,6 @@ "@solana/wallet-adapter-react": "workspace:^", "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", - "@solana/wallet-standard-util": "1.1.0-alpha.8", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/starter/example/src/components/SignIn.tsx b/packages/starter/example/src/components/SignIn.tsx index be632e6e0..c650ddb11 100644 --- a/packages/starter/example/src/components/SignIn.tsx +++ b/packages/starter/example/src/components/SignIn.tsx @@ -1,6 +1,6 @@ import { Button } from '@mui/material'; import { useWallet } from '@solana/wallet-adapter-react'; -import { verifySignIn } from '@solana/wallet-standard-util'; +import bs58 from 'bs58'; import type { FC } from 'react'; import React, { useCallback } from 'react'; import { useNotify } from './notify'; @@ -13,12 +13,9 @@ export const SignIn: FC = () => { try { if (!signIn) throw new Error('Wallet does not support message signing!'); - // FIXME: wrap this for wallet adapter to simplify args - const input = {}; - const output = await signIn(input); - if (!verifySignIn(input, output)) throw new Error('Sign in signature invalid!'); + const { signature } = await signIn(); - notify('success', `Signed in: ${output.account.address}`); + notify('success', `Message signature: ${bs58.encode(signature)}`); } catch (error: any) { notify('error', `Sign In failed: ${error?.message}`); } diff --git a/packages/starter/example/src/components/SignMessage.tsx b/packages/starter/example/src/components/SignMessage.tsx index 3c29b6ef9..2e120156d 100644 --- a/packages/starter/example/src/components/SignMessage.tsx +++ b/packages/starter/example/src/components/SignMessage.tsx @@ -1,6 +1,5 @@ import { Button } from '@mui/material'; import { useWallet } from '@solana/wallet-adapter-react'; -import { verifySignMessage } from '@solana/wallet-standard-util'; import bs58 from 'bs58'; import type { FC } from 'react'; import React, { useCallback } from 'react'; @@ -17,25 +16,6 @@ export const SignMessage: FC = () => { const message = new TextEncoder().encode('Hello, world!'); const signature = await signMessage(message); - if ( - // FIXME: wrap this for wallet adapter to simplify args - !verifySignMessage( - { - account: { - address: publicKey.toBase58(), - publicKey: publicKey.toBytes(), - chains: [], - features: [], - }, - message, - }, - { - signedMessage: message, - signature, - } - ) - ) - throw new Error('Message signature invalid!'); notify('success', `Message signature: ${bs58.encode(signature)}`); } catch (error: any) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd3b57f12..b46acdeb2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -261,9 +261,6 @@ importers: '@solana/wallet-adapter-wallets': specifier: workspace:^ version: link:../../wallets/wallets - '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.8 - version: 1.1.0-alpha.8 '@solana/web3.js': specifier: ^1.77.3 version: 1.77.3 From 96c48b4ac32dc5673aaec71cd28806962ccd531e Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 16:31:53 -0600 Subject: [PATCH 10/24] remove sign and verify messages from FAQ --- FAQ.md | 42 ------------------------------------------ 1 file changed, 42 deletions(-) diff --git a/FAQ.md b/FAQ.md index ead7b8007..4756581d1 100644 --- a/FAQ.md +++ b/FAQ.md @@ -114,45 +114,3 @@ This can happen if you try to use `signTransaction`, `signAllTransactions`, or ` The other methods are optional APIs, so you have to feature-detect them before using them. Please see [issue #72](https://github.com/solana-labs/wallet-adapter/issues/72#issuecomment-919232595). - -## How can I sign and verify messages? - -Some wallet adapters provide a `signMessage` method for signing arbitrary bytes. - -The signature string returned by this method can be verified using [tweetnacl-js](https://github.com/dchest/tweetnacl-js/blob/master/README.md#naclsigndetachedverifymessage-signature-publickey) using the public key from the adapter. - -This can be used to sign offline — without sending a transaction — and prove a user controls a given private key. - -```tsx -import { ed25519 } from '@noble/curves/ed25519'; -import { useWallet } from '@solana/wallet-adapter-react'; -import bs58 from 'bs58'; -import React, { FC, useCallback } from 'react'; - -export const SignMessageButton: FC = () => { - const { publicKey, signMessage } = useWallet(); - - const onClick = useCallback(async () => { - try { - // `publicKey` will be null if the wallet isn't connected - if (!publicKey) throw new Error('Wallet not connected!'); - // `signMessage` will be undefined if the wallet doesn't support it - if (!signMessage) throw new Error('Wallet does not support message signing!'); - - // Encode anything as bytes - const message = new TextEncoder().encode('Hello, world!'); - // Sign the bytes using the wallet - const signature = await signMessage(message); - // FIXME: replace with `verifySignMessage` - // Verify that the bytes were signed using the private key that matches the known public key - if (!ed25519.verify(signature, message, publicKey.toBytes())) throw new Error('Invalid signature!'); - - alert(`Message signature: ${bs58.encode(signature)}`); - } catch (error: any) { - alert(`Signing failed: ${error?.message}`); - } - }, [publicKey, signMessage]); - - return signMessage ? () : null; -}; -``` From a45b77f1f754c1984556745f78e717f1aaca92cf Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 16:35:29 -0600 Subject: [PATCH 11/24] update to latest @solana/wallet-standard alpha versions --- packages/core/react/package.json | 2 +- packages/wallets/unsafe-burner/package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/core/react/package.json b/packages/core/react/package.json index 1afa885a6..5666b5ee3 100644 --- a/packages/core/react/package.json +++ b/packages/core/react/package.json @@ -39,7 +39,7 @@ "dependencies": { "@solana-mobile/wallet-adapter-mobile": "^2.0.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.8" + "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.9" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json index 259f6bb76..da0605b0f 100644 --- a/packages/wallets/unsafe-burner/package.json +++ b/packages/wallets/unsafe-burner/package.json @@ -38,7 +38,7 @@ "@noble/curves": "^1.1.0", "@solana/wallet-adapter-base": "workspace:^", "@solana/wallet-standard-features": "1.1.0-alpha.5", - "@solana/wallet-standard-util": "1.1.0-alpha.8" + "@solana/wallet-standard-util": "1.1.0-alpha.9" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b46acdeb2..d8650500d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: 1.1.0-alpha.8 - version: 1.1.0-alpha.8(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0) + specifier: 1.1.0-alpha.9 + version: 1.1.0-alpha.9(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -1208,8 +1208,8 @@ importers: specifier: 1.1.0-alpha.5 version: 1.1.0-alpha.5 '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.8 - version: 1.1.0-alpha.8 + specifier: 1.1.0-alpha.9 + version: 1.1.0-alpha.9 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -5970,8 +5970,8 @@ packages: '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.1.0-alpha.8: - resolution: {integrity: sha512-+7wM18G3n84gBv1r/v5e7MAnM3XmykZKabNtHn1YmdSwZarpiLP+6et8egUo1kVwXLowdwQwpq6Ocio9mhuOUQ==} + /@solana/wallet-standard-util@1.1.0-alpha.9: + resolution: {integrity: sha512-y8IrPw/nY78Q/YGmlXuADL/h0ZGLjTru2Rdbnm9+u+ycxTUmdH2Js6kOFF2w596vj1xpNk645JEgGF+Q9Y2Iig==} engines: {node: '>=16'} dependencies: '@noble/curves': 1.1.0 @@ -5979,8 +5979,8 @@ packages: '@solana/wallet-standard-features': 1.1.0-alpha.5 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.8(@solana/web3.js@1.77.3)(bs58@4.0.1): - resolution: {integrity: sha512-yoiLlnlPAyBrHGAf+e8+7lMjpwRAeceDo+IsKruvYO270NImDrtpzPtSr4GXqGyOs2WpbmlQxzbjYNoa9CVT+g==} + /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.9(@solana/web3.js@1.77.3)(bs58@4.0.1): + resolution: {integrity: sha512-in15SbeGUU7VvkTRM0MCh+RpZg1C4NQBmGb0CSsefBsvHxLLmxiVCP/Pjqx2hQHczvYqybQANfwqZeztYUIZeA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 @@ -5989,7 +5989,7 @@ packages: '@solana/wallet-adapter-base': link:packages/core/base '@solana/wallet-standard-chains': 1.0.0 '@solana/wallet-standard-features': 1.1.0-alpha.5 - '@solana/wallet-standard-util': 1.1.0-alpha.8 + '@solana/wallet-standard-util': 1.1.0-alpha.9 '@solana/web3.js': 1.77.3 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -5998,15 +5998,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.8(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-KZe2WSZQyPAOcCCadd6mGN2DhGl1sH2q72yRzNF5sr9D0k9LWTj2PNfeKlW29xi9IiVYZI4Iy46gvSfCNsH19Q==} + /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.9(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.77.3)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-4vV9IdX+yFQ2DGaQ8SxfsAqBA19fmOq4+FNWi3QTV+Xd4/deUrLee2TsQmP+3YqMpSoM86sW1Hk3v1uNkWccxA==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.8(@solana/web3.js@1.77.3)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.9(@solana/web3.js@1.77.3)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From be3b9320cab23704ba3c827449c2ccd1b3fd25ef Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 19:28:03 -0600 Subject: [PATCH 12/24] add autoConnect callback function --- packages/core/react/src/WalletProvider.tsx | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index 67d7147c3..382717b10 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -17,8 +17,7 @@ import { WalletProviderBase } from './WalletProviderBase.js'; export interface WalletProviderProps { children: ReactNode; wallets: Adapter[]; - autoConnect?: boolean; - autoSignIn?: boolean; + autoConnect?: boolean | ((adapter: Adapter) => Promise); localStorageKey?: string; onError?: (error: WalletError, adapter?: Adapter) => void; } @@ -48,8 +47,6 @@ export function WalletProvider({ children, wallets: adapters, autoConnect, - // FIXME: implement - autoSignIn, localStorageKey = 'walletName', onError, }: WalletProviderProps) { @@ -129,12 +126,18 @@ export function WalletProvider({ }, [adapter, adaptersWithStandardAdapters, setWalletName, walletName]); const hasUserSelectedAWallet = useRef(false); const handleAutoConnectRequest = useMemo(() => { - if (autoConnect !== true || !adapter) { - return; - } - - return () => (hasUserSelectedAWallet.current ? adapter.connect() : adapter.autoConnect()); - }, [adapter, autoConnect]); + if (!autoConnect || !adapter) return; + return async () => { + // If autoConnect is true or returns true, use the default autoConnect behavior. + if (autoConnect === true || (await autoConnect(adapter))) { + if (hasUserSelectedAWallet.current) { + await adapter.connect(); + } else { + await adapter.autoConnect(); + } + } + }; + }, [autoConnect, adapter]); const isUnloadingRef = useRef(false); useEffect(() => { if (walletName === SolanaMobileWalletAdapterWalletName && getIsMobile(adaptersWithStandardAdapters)) { From cad037c54e4f4e2ea118952404ea469428074ab9 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 19:28:16 -0600 Subject: [PATCH 13/24] shorten simple return statements --- packages/core/react/src/WalletProvider.tsx | 22 +++++-------------- .../core/react/src/WalletProviderBase.tsx | 4 ++-- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index 382717b10..be50c5d7f 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -37,9 +37,7 @@ function getIsMobile(adapters: Adapter[]) { function getUriForAppIdentity() { const location = globalThis.location; - if (location == null) { - return; - } + if (!location) return; return `${location.protocol}//${location.host}`; } @@ -88,9 +86,7 @@ export function WalletProvider({ ); const changeWallet = useCallback( (nextWalletName: WalletName | null) => { - if (walletName === nextWalletName) { - return; - } + if (walletName === nextWalletName) return; if ( adapter && // Selecting a wallet other than the mobile wallet adapter is not @@ -106,17 +102,11 @@ export function WalletProvider({ [adapter, setWalletName, walletName] ); useEffect(() => { - if (adapter == null) { - return; - } + if (!adapter) return; function handleDisconnect() { - if (isUnloadingRef.current) { - return; - } - if (walletName === SolanaMobileWalletAdapterWalletName && getIsMobile(adaptersWithStandardAdapters)) { - // Leave the adapter selected in the event of a disconnection. - return; - } + if (isUnloadingRef.current) return; + // Leave the adapter selected in the event of a disconnection. + if (walletName === SolanaMobileWalletAdapterWalletName && getIsMobile(adaptersWithStandardAdapters)) return; setWalletName(null); } adapter.on('disconnect', handleDisconnect); diff --git a/packages/core/react/src/WalletProviderBase.tsx b/packages/core/react/src/WalletProviderBase.tsx index 96da7daaf..642ea43c0 100644 --- a/packages/core/react/src/WalletProviderBase.tsx +++ b/packages/core/react/src/WalletProviderBase.tsx @@ -175,9 +175,9 @@ export function WalletProviderBase({ connected || !onAutoConnectRequest || !(wallet?.readyState === WalletReadyState.Installed || wallet?.readyState === WalletReadyState.Loadable) - ) { + ) return; - } + isConnectingRef.current = true; setConnecting(true); didAttemptAutoConnectRef.current = true; From efbaa03842a100b75bae01b97ebd350409ccf320 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 19:28:40 -0600 Subject: [PATCH 14/24] use autoConnect to do asynchronous auto sign in and verify --- packages/starter/example/package.json | 2 ++ .../example/src/components/ContextProvider.tsx | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index 3785e4b5a..495980e40 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -45,6 +45,8 @@ "@solana/wallet-adapter-react": "workspace:^", "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", + "@solana/wallet-standard-features": "^1.1.0-alpha.5", + "@solana/wallet-standard-util": "^1.1.0-alpha.9", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/starter/example/src/components/ContextProvider.tsx b/packages/starter/example/src/components/ContextProvider.tsx index 06dd9ad49..1969663ef 100644 --- a/packages/starter/example/src/components/ContextProvider.tsx +++ b/packages/starter/example/src/components/ContextProvider.tsx @@ -7,6 +7,8 @@ import { WalletDialogProvider as MaterialUIWalletDialogProvider } from '@solana/ import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react'; import { WalletModalProvider as ReactUIWalletModalProvider } from '@solana/wallet-adapter-react-ui'; import { UnsafeBurnerWalletAdapter } from '@solana/wallet-adapter-wallets'; +import { type SolanaSignInInput } from '@solana/wallet-standard-features'; +import { verifySignIn } from '@solana/wallet-standard-util'; import { clusterApiUrl } from '@solana/web3.js'; import { SnackbarProvider, useSnackbar } from 'notistack'; import type { FC, ReactNode } from 'react'; @@ -86,9 +88,20 @@ const WalletContextProvider: FC<{ children: ReactNode }> = ({ children }) => { [enqueueSnackbar] ); + const autoSignIn = useCallback(async (adapter: Adapter) => { + if (!('signIn' in adapter)) return true; + + const input: SolanaSignInInput = {}; + const output = await adapter.signIn(input); + + if (!verifySignIn(input, output)) throw new Error('Verification failed!'); + + return false; + }, []); + return ( - + {children} From 448a7de559dfd8fc157624ed87d438bc52d7375e Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 19:29:02 -0600 Subject: [PATCH 15/24] update lockfile --- pnpm-lock.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8650500d..9d66eb65d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -261,6 +261,12 @@ importers: '@solana/wallet-adapter-wallets': specifier: workspace:^ version: link:../../wallets/wallets + '@solana/wallet-standard-features': + specifier: ^1.1.0-alpha.5 + version: 1.1.0-alpha.5 + '@solana/wallet-standard-util': + specifier: ^1.1.0-alpha.9 + version: 1.1.0-alpha.9 '@solana/web3.js': specifier: ^1.77.3 version: 1.77.3 From 1bff7e98955b8a03c15dfe6f6d1a7819bacd1d87 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 3 Jul 2023 19:30:19 -0600 Subject: [PATCH 16/24] adjust error message --- packages/starter/example/src/components/ContextProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/starter/example/src/components/ContextProvider.tsx b/packages/starter/example/src/components/ContextProvider.tsx index 1969663ef..c140c25a5 100644 --- a/packages/starter/example/src/components/ContextProvider.tsx +++ b/packages/starter/example/src/components/ContextProvider.tsx @@ -94,7 +94,7 @@ const WalletContextProvider: FC<{ children: ReactNode }> = ({ children }) => { const input: SolanaSignInInput = {}; const output = await adapter.signIn(input); - if (!verifySignIn(input, output)) throw new Error('Verification failed!'); + if (!verifySignIn(input, output)) throw new Error('Sign In verification failed!'); return false; }, []); From f5b968f50674391067370f645e7a6ac64b02da6e Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Thu, 20 Jul 2023 17:56:17 -0600 Subject: [PATCH 17/24] reconcile lockfile --- pnpm-lock.yaml | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9cc16eb3e..caa2686ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,8 +70,8 @@ importers: packages/core/base: dependencies: '@solana/wallet-standard-features': - specifier: ^1.0.1 - version: 1.0.1 + specifier: 1.1.0-alpha.5 + version: 1.1.0-alpha.5 '@wallet-standard/base': specifier: ^1.0.1 version: 1.0.1 @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: ^1.0.2 - version: 1.0.2(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) + specifier: 1.1.0-alpha.9 + version: 1.1.0-alpha.9(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -243,9 +243,6 @@ importers: '@mui/material': specifier: ^5.13.5 version: 5.14.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@noble/curves': - specifier: ^1.1.0 - version: 1.1.0 '@solana/wallet-adapter-ant-design': specifier: workspace:^ version: link:../../ui/ant-design @@ -264,6 +261,12 @@ importers: '@solana/wallet-adapter-wallets': specifier: workspace:^ version: link:../../wallets/wallets + '@solana/wallet-standard-features': + specifier: ^1.1.0-alpha.5 + version: 1.1.0-alpha.5 + '@solana/wallet-standard-util': + specifier: ^1.1.0-alpha.9 + version: 1.1.0-alpha.9 '@solana/web3.js': specifier: ^1.77.3 version: 1.78.0 @@ -1238,6 +1241,12 @@ importers: '@solana/wallet-adapter-base': specifier: workspace:^ version: link:../../core/base + '@solana/wallet-standard-features': + specifier: 1.1.0-alpha.5 + version: 1.1.0-alpha.5 + '@solana/wallet-standard-util': + specifier: 1.1.0-alpha.9 + version: 1.1.0-alpha.9 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -6025,24 +6034,25 @@ packages: '@wallet-standard/base': 1.0.1 dev: false - /@solana/wallet-standard-features@1.0.1: - resolution: {integrity: sha512-SUfx7KtBJ55XIj0qAhhVcC1I6MklAXqWFEz9hDHW+6YcJIyvfix/EilBhaBik1FJ2JT0zukpOfFv8zpuAbFRbw==} + /@solana/wallet-standard-features@1.1.0-alpha.5: + resolution: {integrity: sha512-VJQPK+4tcXyQghv3QgphFdTRAIPEMFcivDzmKRqFr5+9W83ZqVmNzpibCEakEkznE3oSRZcvZiE+t8ctT+WEiQ==} engines: {node: '>=16'} dependencies: '@wallet-standard/base': 1.0.1 '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.0.0: - resolution: {integrity: sha512-qRAOBXnN7dwvtgzTtxIHsSeJAMbGNZdSWs57TT8pCyBrKL5dVxaK2u95Dm17SRSzwfKl/EByV1lTjOxXyKWS+g==} + /@solana/wallet-standard-util@1.1.0-alpha.9: + resolution: {integrity: sha512-y8IrPw/nY78Q/YGmlXuADL/h0ZGLjTru2Rdbnm9+u+ycxTUmdH2Js6kOFF2w596vj1xpNk645JEgGF+Q9Y2Iig==} engines: {node: '>=16'} dependencies: + '@noble/curves': 1.1.0 '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.0.1 + '@solana/wallet-standard-features': 1.1.0-alpha.5 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.0.2(@solana/web3.js@1.78.0)(bs58@4.0.1): - resolution: {integrity: sha512-QqkupdWvWuihX87W6ijt174u6ZdP5OSFlNhZhuhoMlIdyI/sj7MhGsdppuRlMh65oVO2WNWTL9y2bO5Pbx+dfg==} + /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.9(@solana/web3.js@1.78.0)(bs58@4.0.1): + resolution: {integrity: sha512-in15SbeGUU7VvkTRM0MCh+RpZg1C4NQBmGb0CSsefBsvHxLLmxiVCP/Pjqx2hQHczvYqybQANfwqZeztYUIZeA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 @@ -6050,8 +6060,8 @@ packages: dependencies: '@solana/wallet-adapter-base': link:packages/core/base '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.0.1 - '@solana/wallet-standard-util': 1.0.0 + '@solana/wallet-standard-features': 1.1.0-alpha.5 + '@solana/wallet-standard-util': 1.1.0-alpha.9 '@solana/web3.js': 1.78.0 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -6060,15 +6070,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.0.2(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-0YTPUnjiSG5ajDP2hK8EipxkeHhO3+nCtXeF1eS/ZP2QcFAgS/4luywrn/6CdfzQ2cQYPCFdnG/QculpUp6bBg==} + /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.9(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-4vV9IdX+yFQ2DGaQ8SxfsAqBA19fmOq4+FNWi3QTV+Xd4/deUrLee2TsQmP+3YqMpSoM86sW1Hk3v1uNkWccxA==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.0.2(@solana/web3.js@1.78.0)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.9(@solana/web3.js@1.78.0)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From a9d4f513fb51d7cca90adc1c7ebe10d54926f766 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Fri, 4 Aug 2023 19:39:41 -0600 Subject: [PATCH 18/24] update to latest @solana/wallet-standard alpha versions --- packages/core/react/package.json | 2 +- packages/starter/example/package.json | 2 +- packages/wallets/unsafe-burner/package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++----------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/core/react/package.json b/packages/core/react/package.json index 7fd1f2e31..6bfb43d4e 100644 --- a/packages/core/react/package.json +++ b/packages/core/react/package.json @@ -39,7 +39,7 @@ "dependencies": { "@solana-mobile/wallet-adapter-mobile": "^2.0.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.9" + "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.10" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index 4751d0131..e250e1783 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -46,7 +46,7 @@ "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", "@solana/wallet-standard-features": "^1.1.0-alpha.5", - "@solana/wallet-standard-util": "^1.1.0-alpha.9", + "@solana/wallet-standard-util": "^1.1.0-alpha.10", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json index da0605b0f..efc9fd50c 100644 --- a/packages/wallets/unsafe-burner/package.json +++ b/packages/wallets/unsafe-burner/package.json @@ -38,7 +38,7 @@ "@noble/curves": "^1.1.0", "@solana/wallet-adapter-base": "workspace:^", "@solana/wallet-standard-features": "1.1.0-alpha.5", - "@solana/wallet-standard-util": "1.1.0-alpha.9" + "@solana/wallet-standard-util": "1.1.0-alpha.10" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index caa2686ab..870bbe901 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: 1.1.0-alpha.9 - version: 1.1.0-alpha.9(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) + specifier: 1.1.0-alpha.10 + version: 1.1.0-alpha.10(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -265,8 +265,8 @@ importers: specifier: ^1.1.0-alpha.5 version: 1.1.0-alpha.5 '@solana/wallet-standard-util': - specifier: ^1.1.0-alpha.9 - version: 1.1.0-alpha.9 + specifier: ^1.1.0-alpha.10 + version: 1.1.0-alpha.10 '@solana/web3.js': specifier: ^1.77.3 version: 1.78.0 @@ -1245,8 +1245,8 @@ importers: specifier: 1.1.0-alpha.5 version: 1.1.0-alpha.5 '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.9 - version: 1.1.0-alpha.9 + specifier: 1.1.0-alpha.10 + version: 1.1.0-alpha.10 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -6042,8 +6042,8 @@ packages: '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.1.0-alpha.9: - resolution: {integrity: sha512-y8IrPw/nY78Q/YGmlXuADL/h0ZGLjTru2Rdbnm9+u+ycxTUmdH2Js6kOFF2w596vj1xpNk645JEgGF+Q9Y2Iig==} + /@solana/wallet-standard-util@1.1.0-alpha.10: + resolution: {integrity: sha512-fQc1IQ9hDg9gJ1xMvtwkNzRQmFEypSbfJEe0cVdHAbmVHDjr49vz9bewOQCRJLVyjdDqgc+bw/TEqoXFQM8kYg==} engines: {node: '>=16'} dependencies: '@noble/curves': 1.1.0 @@ -6051,8 +6051,8 @@ packages: '@solana/wallet-standard-features': 1.1.0-alpha.5 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.9(@solana/web3.js@1.78.0)(bs58@4.0.1): - resolution: {integrity: sha512-in15SbeGUU7VvkTRM0MCh+RpZg1C4NQBmGb0CSsefBsvHxLLmxiVCP/Pjqx2hQHczvYqybQANfwqZeztYUIZeA==} + /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.10(@solana/web3.js@1.78.0)(bs58@4.0.1): + resolution: {integrity: sha512-74TIQZhV6f5DFAEXPSx4Sz+kd6s8hNsA4C++b6NuJFic4zzkfvC9aj+PjTUJrRo2vKDwq+16j5ymUXofSol+Lg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 @@ -6061,7 +6061,7 @@ packages: '@solana/wallet-adapter-base': link:packages/core/base '@solana/wallet-standard-chains': 1.0.0 '@solana/wallet-standard-features': 1.1.0-alpha.5 - '@solana/wallet-standard-util': 1.1.0-alpha.9 + '@solana/wallet-standard-util': 1.1.0-alpha.10 '@solana/web3.js': 1.78.0 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -6070,15 +6070,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.9(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-4vV9IdX+yFQ2DGaQ8SxfsAqBA19fmOq4+FNWi3QTV+Xd4/deUrLee2TsQmP+3YqMpSoM86sW1Hk3v1uNkWccxA==} + /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.10(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-9fR4fu7GXliqALgQUpncBsPomPQkDgfeq0QzfPzr5IfdrjgJm0AyocxTmJCMcoWRMoZIzs5x89D/z7sJOIOExQ==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.9(@solana/web3.js@1.78.0)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.10(@solana/web3.js@1.78.0)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From fd40090b6b5e62bad5b25d0aa4c3d42ad672e67d Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Sun, 6 Aug 2023 21:30:03 -0600 Subject: [PATCH 19/24] update to latest @solana/wallet-standard alpha versions --- packages/core/react/package.json | 2 +- packages/starter/example/package.json | 2 +- packages/wallets/unsafe-burner/package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++----------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/core/react/package.json b/packages/core/react/package.json index 6bfb43d4e..68cff335b 100644 --- a/packages/core/react/package.json +++ b/packages/core/react/package.json @@ -39,7 +39,7 @@ "dependencies": { "@solana-mobile/wallet-adapter-mobile": "^2.0.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.10" + "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.11" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index e250e1783..afd848481 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -46,7 +46,7 @@ "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", "@solana/wallet-standard-features": "^1.1.0-alpha.5", - "@solana/wallet-standard-util": "^1.1.0-alpha.10", + "@solana/wallet-standard-util": "^1.1.0-alpha.11", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json index efc9fd50c..4f6588e30 100644 --- a/packages/wallets/unsafe-burner/package.json +++ b/packages/wallets/unsafe-burner/package.json @@ -38,7 +38,7 @@ "@noble/curves": "^1.1.0", "@solana/wallet-adapter-base": "workspace:^", "@solana/wallet-standard-features": "1.1.0-alpha.5", - "@solana/wallet-standard-util": "1.1.0-alpha.10" + "@solana/wallet-standard-util": "1.1.0-alpha.11" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 870bbe901..ea43a342f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: 1.1.0-alpha.10 - version: 1.1.0-alpha.10(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) + specifier: 1.1.0-alpha.11 + version: 1.1.0-alpha.11(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -265,8 +265,8 @@ importers: specifier: ^1.1.0-alpha.5 version: 1.1.0-alpha.5 '@solana/wallet-standard-util': - specifier: ^1.1.0-alpha.10 - version: 1.1.0-alpha.10 + specifier: ^1.1.0-alpha.11 + version: 1.1.0-alpha.11 '@solana/web3.js': specifier: ^1.77.3 version: 1.78.0 @@ -1245,8 +1245,8 @@ importers: specifier: 1.1.0-alpha.5 version: 1.1.0-alpha.5 '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.10 - version: 1.1.0-alpha.10 + specifier: 1.1.0-alpha.11 + version: 1.1.0-alpha.11 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -6042,8 +6042,8 @@ packages: '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.1.0-alpha.10: - resolution: {integrity: sha512-fQc1IQ9hDg9gJ1xMvtwkNzRQmFEypSbfJEe0cVdHAbmVHDjr49vz9bewOQCRJLVyjdDqgc+bw/TEqoXFQM8kYg==} + /@solana/wallet-standard-util@1.1.0-alpha.11: + resolution: {integrity: sha512-fnCWNt2pfTWFkR6WuSH6iVksTZ69EfU+HDx5cTM5vOen3H4Jxg2e8HUW1M0pvK1SmAioQ5tCJoFue2tbR1uv3w==} engines: {node: '>=16'} dependencies: '@noble/curves': 1.1.0 @@ -6051,8 +6051,8 @@ packages: '@solana/wallet-standard-features': 1.1.0-alpha.5 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.10(@solana/web3.js@1.78.0)(bs58@4.0.1): - resolution: {integrity: sha512-74TIQZhV6f5DFAEXPSx4Sz+kd6s8hNsA4C++b6NuJFic4zzkfvC9aj+PjTUJrRo2vKDwq+16j5ymUXofSol+Lg==} + /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.11(@solana/web3.js@1.78.0)(bs58@4.0.1): + resolution: {integrity: sha512-E3MZVwSD2I9dWHnjapvGPfNFWeO2FpNaxZV2qru7o2PtKGrklm/yJrudmMjXAKrEtk0bO4AOmtP7CJeuUBUYhQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 @@ -6061,7 +6061,7 @@ packages: '@solana/wallet-adapter-base': link:packages/core/base '@solana/wallet-standard-chains': 1.0.0 '@solana/wallet-standard-features': 1.1.0-alpha.5 - '@solana/wallet-standard-util': 1.1.0-alpha.10 + '@solana/wallet-standard-util': 1.1.0-alpha.11 '@solana/web3.js': 1.78.0 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -6070,15 +6070,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.10(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-9fR4fu7GXliqALgQUpncBsPomPQkDgfeq0QzfPzr5IfdrjgJm0AyocxTmJCMcoWRMoZIzs5x89D/z7sJOIOExQ==} + /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.11(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-YBFW+0GuiSCPkCzORrSmx+C/6uQrWmhHqnpdxMw3R+GDyJ0st+sW+Zzr+c0DL/eqZlTURFO1/d6gBviX/Z/+Cg==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.10(@solana/web3.js@1.78.0)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.11(@solana/web3.js@1.78.0)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From 81d156f1c6ea76d3108fad2c736d2aaec8e7140a Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Sun, 6 Aug 2023 21:30:26 -0600 Subject: [PATCH 20/24] verify signed messages, use SIWS format --- packages/starter/example/package.json | 1 + packages/starter/example/src/components/SignMessage.tsx | 8 +++++++- pnpm-lock.yaml | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index afd848481..c2943df5d 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -39,6 +39,7 @@ "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.11.16", "@mui/material": "^5.13.5", + "@noble/curves": "^1.1.0", "@solana/wallet-adapter-ant-design": "workspace:^", "@solana/wallet-adapter-base": "workspace:^", "@solana/wallet-adapter-material-ui": "workspace:^", diff --git a/packages/starter/example/src/components/SignMessage.tsx b/packages/starter/example/src/components/SignMessage.tsx index 2e120156d..abfddf6ad 100644 --- a/packages/starter/example/src/components/SignMessage.tsx +++ b/packages/starter/example/src/components/SignMessage.tsx @@ -1,4 +1,5 @@ import { Button } from '@mui/material'; +import { ed25519 } from '@noble/curves/ed25519'; import { useWallet } from '@solana/wallet-adapter-react'; import bs58 from 'bs58'; import type { FC } from 'react'; @@ -14,9 +15,14 @@ export const SignMessage: FC = () => { if (!publicKey) throw new Error('Wallet not connected!'); if (!signMessage) throw new Error('Wallet does not support message signing!'); - const message = new TextEncoder().encode('Hello, world!'); + const message = new TextEncoder().encode( + `${ + window.location.host + } wants you to sign in with your Solana account:\n${publicKey.toBase58()}\n\nPlease sign in.` + ); const signature = await signMessage(message); + if (!ed25519.verify(signature, message, publicKey.toBytes())) throw new Error('Message signature invalid!'); notify('success', `Message signature: ${bs58.encode(signature)}`); } catch (error: any) { notify('error', `Sign Message failed: ${error?.message}`); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea43a342f..b6819beb5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -243,6 +243,9 @@ importers: '@mui/material': specifier: ^5.13.5 version: 5.14.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@noble/curves': + specifier: ^1.1.0 + version: 1.1.0 '@solana/wallet-adapter-ant-design': specifier: workspace:^ version: link:../../ui/ant-design From aef54532f9e63328d10485c1f5fb7e1371b7d475 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Sun, 6 Aug 2023 21:31:12 -0600 Subject: [PATCH 21/24] add domain, address, and statement to example SIWS --- .../example/src/components/ContextProvider.tsx | 6 +++++- .../starter/example/src/components/SignIn.tsx | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/starter/example/src/components/ContextProvider.tsx b/packages/starter/example/src/components/ContextProvider.tsx index c140c25a5..196512a85 100644 --- a/packages/starter/example/src/components/ContextProvider.tsx +++ b/packages/starter/example/src/components/ContextProvider.tsx @@ -91,7 +91,11 @@ const WalletContextProvider: FC<{ children: ReactNode }> = ({ children }) => { const autoSignIn = useCallback(async (adapter: Adapter) => { if (!('signIn' in adapter)) return true; - const input: SolanaSignInInput = {}; + const input: SolanaSignInInput = { + domain: window.location.host, + address: adapter.publicKey ? adapter.publicKey.toBase58() : undefined, + statement: 'Please sign in.', + }; const output = await adapter.signIn(input); if (!verifySignIn(input, output)) throw new Error('Sign In verification failed!'); diff --git a/packages/starter/example/src/components/SignIn.tsx b/packages/starter/example/src/components/SignIn.tsx index c650ddb11..5bee477f7 100644 --- a/packages/starter/example/src/components/SignIn.tsx +++ b/packages/starter/example/src/components/SignIn.tsx @@ -1,21 +1,29 @@ import { Button } from '@mui/material'; import { useWallet } from '@solana/wallet-adapter-react'; +import type { SolanaSignInInput } from '@solana/wallet-standard-features'; +import { verifySignIn } from '@solana/wallet-standard-util'; import bs58 from 'bs58'; import type { FC } from 'react'; import React, { useCallback } from 'react'; import { useNotify } from './notify'; export const SignIn: FC = () => { - const { signIn } = useWallet(); + const { signIn, publicKey } = useWallet(); const notify = useNotify(); const onClick = useCallback(async () => { try { - if (!signIn) throw new Error('Wallet does not support message signing!'); + if (!signIn) throw new Error('Wallet does not support Sign In With Solana!'); - const { signature } = await signIn(); + const input: SolanaSignInInput = { + domain: window.location.host, + address: publicKey ? publicKey.toBase58() : undefined, + statement: 'Please sign in.', + }; + const output = await signIn(input); - notify('success', `Message signature: ${bs58.encode(signature)}`); + if (!verifySignIn(input, output)) throw new Error('Sign In verification failed!'); + notify('success', `Message signature: ${bs58.encode(output.signature)}`); } catch (error: any) { notify('error', `Sign In failed: ${error?.message}`); } From 9cbc4061a1a9ca826d06f86de2df21d0ca640b85 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Sun, 6 Aug 2023 22:19:22 -0600 Subject: [PATCH 22/24] use production @solana/wallet-standard packages --- packages/core/base/package.json | 2 +- packages/core/react/package.json | 2 +- packages/starter/example/package.json | 4 +- packages/wallets/unsafe-burner/package.json | 4 +- pnpm-lock.yaml | 56 ++++++++++----------- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/core/base/package.json b/packages/core/base/package.json index 341117d71..d318ed840 100644 --- a/packages/core/base/package.json +++ b/packages/core/base/package.json @@ -35,7 +35,7 @@ "@solana/web3.js": "^1.77.3" }, "dependencies": { - "@solana/wallet-standard-features": "1.1.0-alpha.5", + "@solana/wallet-standard-features": "^1.1.0", "@wallet-standard/base": "^1.0.1", "@wallet-standard/features": "^1.0.3", "eventemitter3": "^4.0.7" diff --git a/packages/core/react/package.json b/packages/core/react/package.json index 68cff335b..40cd1835d 100644 --- a/packages/core/react/package.json +++ b/packages/core/react/package.json @@ -39,7 +39,7 @@ "dependencies": { "@solana-mobile/wallet-adapter-mobile": "^2.0.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-wallet-adapter-react": "1.1.0-alpha.11" + "@solana/wallet-standard-wallet-adapter-react": "^1.1.0" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json index c2943df5d..31e6aaa88 100644 --- a/packages/starter/example/package.json +++ b/packages/starter/example/package.json @@ -46,8 +46,8 @@ "@solana/wallet-adapter-react": "workspace:^", "@solana/wallet-adapter-react-ui": "workspace:^", "@solana/wallet-adapter-wallets": "workspace:^", - "@solana/wallet-standard-features": "^1.1.0-alpha.5", - "@solana/wallet-standard-util": "^1.1.0-alpha.11", + "@solana/wallet-standard-features": "^1.1.0", + "@solana/wallet-standard-util": "^1.1.0", "@solana/web3.js": "^1.77.3", "antd": "^4.24.10", "bs58": "^4.0.1", diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json index 4f6588e30..6248f28ec 100644 --- a/packages/wallets/unsafe-burner/package.json +++ b/packages/wallets/unsafe-burner/package.json @@ -37,8 +37,8 @@ "dependencies": { "@noble/curves": "^1.1.0", "@solana/wallet-adapter-base": "workspace:^", - "@solana/wallet-standard-features": "1.1.0-alpha.5", - "@solana/wallet-standard-util": "1.1.0-alpha.11" + "@solana/wallet-standard-features": "^1.1.0", + "@solana/wallet-standard-util": "^1.1.0" }, "devDependencies": { "@solana/web3.js": "^1.77.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6819beb5..8c23241e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,8 +70,8 @@ importers: packages/core/base: dependencies: '@solana/wallet-standard-features': - specifier: 1.1.0-alpha.5 - version: 1.1.0-alpha.5 + specifier: ^1.1.0 + version: 1.1.0 '@wallet-standard/base': specifier: ^1.0.1 version: 1.0.1 @@ -101,8 +101,8 @@ importers: specifier: workspace:^ version: link:../base '@solana/wallet-standard-wallet-adapter-react': - specifier: 1.1.0-alpha.11 - version: 1.1.0-alpha.11(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) + specifier: ^1.1.0 + version: 1.1.0(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0) devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -265,11 +265,11 @@ importers: specifier: workspace:^ version: link:../../wallets/wallets '@solana/wallet-standard-features': - specifier: ^1.1.0-alpha.5 - version: 1.1.0-alpha.5 + specifier: ^1.1.0 + version: 1.1.0 '@solana/wallet-standard-util': - specifier: ^1.1.0-alpha.11 - version: 1.1.0-alpha.11 + specifier: ^1.1.0 + version: 1.1.0 '@solana/web3.js': specifier: ^1.77.3 version: 1.78.0 @@ -1245,11 +1245,11 @@ importers: specifier: workspace:^ version: link:../../core/base '@solana/wallet-standard-features': - specifier: 1.1.0-alpha.5 - version: 1.1.0-alpha.5 + specifier: ^1.1.0 + version: 1.1.0 '@solana/wallet-standard-util': - specifier: 1.1.0-alpha.11 - version: 1.1.0-alpha.11 + specifier: ^1.1.0 + version: 1.1.0 devDependencies: '@solana/web3.js': specifier: ^1.77.3 @@ -6030,41 +6030,41 @@ packages: dependencies: buffer: 6.0.3 - /@solana/wallet-standard-chains@1.0.0: - resolution: {integrity: sha512-kr3+JAo7mEBhVCH9cYzjn/vXeUiZeYfB4BF6E8u3U2jq3KlZA/KB+YM976+zGumTfN0NmMXUm066pTTG9kJsNQ==} + /@solana/wallet-standard-chains@1.1.0: + resolution: {integrity: sha512-IRJHf94UZM8AaRRmY18d34xCJiVPJej1XVwXiTjihHnmwD0cxdQbc/CKjrawyqFyQAKJx7raE5g9mnJsAdspTg==} engines: {node: '>=16'} dependencies: '@wallet-standard/base': 1.0.1 dev: false - /@solana/wallet-standard-features@1.1.0-alpha.5: - resolution: {integrity: sha512-VJQPK+4tcXyQghv3QgphFdTRAIPEMFcivDzmKRqFr5+9W83ZqVmNzpibCEakEkznE3oSRZcvZiE+t8ctT+WEiQ==} + /@solana/wallet-standard-features@1.1.0: + resolution: {integrity: sha512-oVyygxfYkkF5INYL0GuD8GFmNO/wd45zNesIqGCFE6X66BYxmI6HmyzQJCcZTZ0BNsezlVg4t+3MCL5AhfFoGA==} engines: {node: '>=16'} dependencies: '@wallet-standard/base': 1.0.1 '@wallet-standard/features': 1.0.3 dev: false - /@solana/wallet-standard-util@1.1.0-alpha.11: - resolution: {integrity: sha512-fnCWNt2pfTWFkR6WuSH6iVksTZ69EfU+HDx5cTM5vOen3H4Jxg2e8HUW1M0pvK1SmAioQ5tCJoFue2tbR1uv3w==} + /@solana/wallet-standard-util@1.1.0: + resolution: {integrity: sha512-vssoCIx43sY5EMrT1pVltsZZKPAQfKpPG3ib2fuqRqpTRGkeRFCPDf4lrVFAYYp238tFr3Xrr/3JLcGvPP7uYw==} engines: {node: '>=16'} dependencies: '@noble/curves': 1.1.0 - '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.1.0-alpha.5 + '@solana/wallet-standard-chains': 1.1.0 + '@solana/wallet-standard-features': 1.1.0 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.1.0-alpha.11(@solana/web3.js@1.78.0)(bs58@4.0.1): - resolution: {integrity: sha512-E3MZVwSD2I9dWHnjapvGPfNFWeO2FpNaxZV2qru7o2PtKGrklm/yJrudmMjXAKrEtk0bO4AOmtP7CJeuUBUYhQ==} + /@solana/wallet-standard-wallet-adapter-base@1.1.0(@solana/web3.js@1.78.0)(bs58@4.0.1): + resolution: {integrity: sha512-wCPiQChIsTB3SlQ18QiPiAcmnqXcX1FRf3ylxpo9LNJ+cOD6vBcrAC4UK/P7sYww1RJM+bHTxvUTweeNtQ/7Pg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 bs58: ^4.0.1 dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-chains': 1.0.0 - '@solana/wallet-standard-features': 1.1.0-alpha.5 - '@solana/wallet-standard-util': 1.1.0-alpha.11 + '@solana/wallet-standard-chains': 1.1.0 + '@solana/wallet-standard-features': 1.1.0 + '@solana/wallet-standard-util': 1.1.0 '@solana/web3.js': 1.78.0 '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 @@ -6073,15 +6073,15 @@ packages: bs58: 4.0.1 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.1.0-alpha.11(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): - resolution: {integrity: sha512-YBFW+0GuiSCPkCzORrSmx+C/6uQrWmhHqnpdxMw3R+GDyJ0st+sW+Zzr+c0DL/eqZlTURFO1/d6gBviX/Z/+Cg==} + /@solana/wallet-standard-wallet-adapter-react@1.1.0(@solana/wallet-adapter-base@packages+core+base)(@solana/web3.js@1.78.0)(bs58@4.0.1)(react@18.2.0): + resolution: {integrity: sha512-bkCPtOHWMXsCpqudoOQ2BSMAJQAcPrgAApDROGI4zpPIM1GI8WA7QslS9MJgSvkWKIRIUdf1r6YnpVSwT6c8sw==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: '@solana/wallet-adapter-base': link:packages/core/base - '@solana/wallet-standard-wallet-adapter-base': 1.1.0-alpha.11(@solana/web3.js@1.78.0)(bs58@4.0.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.0(@solana/web3.js@1.78.0)(bs58@4.0.1) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.2.0 From f5bf12d7018a3d2c79c8c5207620a488d2a010dc Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Sun, 6 Aug 2023 22:23:31 -0600 Subject: [PATCH 23/24] lint fixes --- packages/starter/example/src/components/SignIn.tsx | 2 +- packages/starter/material-ui-starter/src/index.tsx | 8 ++++---- packages/starter/react-ui-starter/src/index.tsx | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/starter/example/src/components/SignIn.tsx b/packages/starter/example/src/components/SignIn.tsx index 5bee477f7..68fdc3661 100644 --- a/packages/starter/example/src/components/SignIn.tsx +++ b/packages/starter/example/src/components/SignIn.tsx @@ -27,7 +27,7 @@ export const SignIn: FC = () => { } catch (error: any) { notify('error', `Sign In failed: ${error?.message}`); } - }, [signIn, notify]); + }, [signIn, publicKey, notify]); return (