diff --git a/.changeset/young-pears-hug.md b/.changeset/young-pears-hug.md
new file mode 100644
index 000000000..e46d3bf67
--- /dev/null
+++ b/.changeset/young-pears-hug.md
@@ -0,0 +1,10 @@
+---
+'@solana/wallet-adapter-material-ui-starter': patch
+'@solana/wallet-adapter-react-ui-starter': patch
+'@solana/wallet-adapter-unsafe-burner': patch
+'@solana/wallet-adapter-example': patch
+'@solana/wallet-adapter-react': patch
+'@solana/wallet-adapter-base': patch
+---
+
+Add `signIn` (Sign In With Solana) method
diff --git a/FAQ.md b/FAQ.md
index 162c43a18..4756581d1 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -114,44 +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);
- // 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;
-};
-```
diff --git a/packages/core/base/package.json b/packages/core/base/package.json
index 6c68f6333..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.0.1",
+ "@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/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 {
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',
diff --git a/packages/core/react/package.json b/packages/core/react/package.json
index 59d16f7a8..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.0.2"
+ "@solana/wallet-standard-wallet-adapter-react": "^1.1.0"
},
"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..be50c5d7f 100644
--- a/packages/core/react/src/WalletProvider.tsx
+++ b/packages/core/react/src/WalletProvider.tsx
@@ -17,7 +17,7 @@ import { WalletProviderBase } from './WalletProviderBase.js';
export interface WalletProviderProps {
children: ReactNode;
wallets: Adapter[];
- autoConnect?: boolean;
+ autoConnect?: boolean | ((adapter: Adapter) => Promise);
localStorageKey?: string;
onError?: (error: WalletError, adapter?: Adapter) => void;
}
@@ -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);
@@ -126,12 +116,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)) {
diff --git a/packages/core/react/src/WalletProviderBase.tsx b/packages/core/react/src/WalletProviderBase.tsx
index 9569d51b8..642ea43c0 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,
@@ -174,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;
@@ -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() {
diff --git a/packages/starter/example/package.json b/packages/starter/example/package.json
index 51c08bb35..31e6aaa88 100644
--- a/packages/starter/example/package.json
+++ b/packages/starter/example/package.json
@@ -46,6 +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",
+ "@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/starter/example/src/components/ContextProvider.tsx b/packages/starter/example/src/components/ContextProvider.tsx
index 06dd9ad49..196512a85 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,24 @@ const WalletContextProvider: FC<{ children: ReactNode }> = ({ children }) => {
[enqueueSnackbar]
);
+ const autoSignIn = useCallback(async (adapter: Adapter) => {
+ if (!('signIn' in adapter)) return true;
+
+ 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!');
+
+ return false;
+ }, []);
+
return (
-
+
{children}
diff --git a/packages/starter/example/src/components/SignIn.tsx b/packages/starter/example/src/components/SignIn.tsx
new file mode 100644
index 000000000..68fdc3661
--- /dev/null
+++ b/packages/starter/example/src/components/SignIn.tsx
@@ -0,0 +1,37 @@
+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, publicKey } = useWallet();
+ const notify = useNotify();
+
+ const onClick = useCallback(async () => {
+ try {
+ if (!signIn) throw new Error('Wallet does not support Sign In With Solana!');
+
+ const input: SolanaSignInInput = {
+ domain: window.location.host,
+ address: publicKey ? publicKey.toBase58() : undefined,
+ statement: 'Please sign in.',
+ };
+ const output = await signIn(input);
+
+ 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}`);
+ }
+ }, [signIn, publicKey, notify]);
+
+ return (
+
+ );
+};
diff --git a/packages/starter/example/src/components/SignMessage.tsx b/packages/starter/example/src/components/SignMessage.tsx
index 65b8e2adf..abfddf6ad 100644
--- a/packages/starter/example/src/components/SignMessage.tsx
+++ b/packages/starter/example/src/components/SignMessage.tsx
@@ -15,10 +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!');
+ 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/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 = () => {
-
+
+
+
diff --git a/packages/starter/material-ui-starter/src/index.tsx b/packages/starter/material-ui-starter/src/index.tsx
index b32489297..306befb5c 100644
--- a/packages/starter/material-ui-starter/src/index.tsx
+++ b/packages/starter/material-ui-starter/src/index.tsx
@@ -1,10 +1,10 @@
import React, { StrictMode } from 'react';
-import ReactDOM from 'react-dom';
+import { createRoot } from 'react-dom/client';
import { App } from './App';
-ReactDOM.render(
+// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+createRoot(document.getElementById('app')!).render(
- ,
- document.getElementById('app')
+
);
diff --git a/packages/starter/react-ui-starter/src/index.tsx b/packages/starter/react-ui-starter/src/index.tsx
index b32489297..306befb5c 100644
--- a/packages/starter/react-ui-starter/src/index.tsx
+++ b/packages/starter/react-ui-starter/src/index.tsx
@@ -1,10 +1,10 @@
import React, { StrictMode } from 'react';
-import ReactDOM from 'react-dom';
+import { createRoot } from 'react-dom/client';
import { App } from './App';
-ReactDOM.render(
+// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+createRoot(document.getElementById('app')!).render(
- ,
- document.getElementById('app')
+
);
diff --git a/packages/wallets/unsafe-burner/package.json b/packages/wallets/unsafe-burner/package.json
index 11b32aeb4..6248f28ec 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",
+ "@solana/wallet-standard-util": "^1.1.0"
},
"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,
+ };
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9cc16eb3e..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.0.1
- version: 1.0.1
+ 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.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
+ 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
@@ -264,6 +264,12 @@ importers:
'@solana/wallet-adapter-wallets':
specifier: workspace:^
version: link:../../wallets/wallets
+ '@solana/wallet-standard-features':
+ specifier: ^1.1.0
+ version: 1.1.0
+ '@solana/wallet-standard-util':
+ specifier: ^1.1.0
+ version: 1.1.0
'@solana/web3.js':
specifier: ^1.77.3
version: 1.78.0
@@ -1238,6 +1244,12 @@ importers:
'@solana/wallet-adapter-base':
specifier: workspace:^
version: link:../../core/base
+ '@solana/wallet-standard-features':
+ specifier: ^1.1.0
+ version: 1.1.0
+ '@solana/wallet-standard-util':
+ specifier: ^1.1.0
+ version: 1.1.0
devDependencies:
'@solana/web3.js':
specifier: ^1.77.3
@@ -6018,40 +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.0.1:
- resolution: {integrity: sha512-SUfx7KtBJ55XIj0qAhhVcC1I6MklAXqWFEz9hDHW+6YcJIyvfix/EilBhaBik1FJ2JT0zukpOfFv8zpuAbFRbw==}
+ /@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.0.0:
- resolution: {integrity: sha512-qRAOBXnN7dwvtgzTtxIHsSeJAMbGNZdSWs57TT8pCyBrKL5dVxaK2u95Dm17SRSzwfKl/EByV1lTjOxXyKWS+g==}
+ /@solana/wallet-standard-util@1.1.0:
+ resolution: {integrity: sha512-vssoCIx43sY5EMrT1pVltsZZKPAQfKpPG3ib2fuqRqpTRGkeRFCPDf4lrVFAYYp238tFr3Xrr/3JLcGvPP7uYw==}
engines: {node: '>=16'}
dependencies:
- '@solana/wallet-standard-chains': 1.0.0
- '@solana/wallet-standard-features': 1.0.1
+ '@noble/curves': 1.1.0
+ '@solana/wallet-standard-chains': 1.1.0
+ '@solana/wallet-standard-features': 1.1.0
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(@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.0.1
- '@solana/wallet-standard-util': 1.0.0
+ '@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
@@ -6060,15 +6073,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(@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.0.2(@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