Browse Source

Solflare signAndSendTransaction (#804)

* Solflare signAndSend

* Remove log

* fixes

* add changeset

---------

Co-authored-by: Jordan Sexton <jordan@jordansexton.com>
Varga-Somogyi Ákos 2 years ago
parent
commit
e5024dc096

+ 5 - 0
.changeset/happy-dryers-play.md

@@ -0,0 +1,5 @@
+---
+'@solana/wallet-adapter-solflare': patch
+---
+
+Support `signAndSendTransaction` method in Solflare adapter

+ 1 - 1
packages/wallets/solflare/package.json

@@ -36,7 +36,7 @@
     },
     "dependencies": {
         "@solana/wallet-adapter-base": "workspace:^",
-        "@solflare-wallet/sdk": "^1.2.1"
+        "@solflare-wallet/sdk": "^1.3.0"
     },
     "devDependencies": {
         "@solana/web3.js": "^1.77.3",

+ 37 - 1
packages/wallets/solflare/src/adapter.ts

@@ -2,21 +2,25 @@ import type { WalletAdapterNetwork, WalletName } from '@solana/wallet-adapter-ba
 import {
     BaseMessageSignerWalletAdapter,
     isIosAndRedirectable,
+    isVersionedTransaction,
     scopePollingDetectionStrategy,
+    type SendTransactionOptions,
     WalletConfigError,
     WalletConnectionError,
     WalletDisconnectedError,
     WalletDisconnectionError,
+    WalletError,
     WalletLoadError,
     WalletNotConnectedError,
     WalletNotReadyError,
     WalletPublicKeyError,
     WalletReadyState,
+    WalletSendTransactionError,
     WalletSignMessageError,
     WalletSignTransactionError,
 } from '@solana/wallet-adapter-base';
 import type { Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';
-import { PublicKey } from '@solana/web3.js';
+import { type Connection, PublicKey, type TransactionSignature } from '@solana/web3.js';
 import type { default as Solflare } from '@solflare-wallet/sdk';
 
 interface SolflareWindow extends Window {
@@ -175,6 +179,38 @@ export class SolflareWalletAdapter extends BaseMessageSignerWalletAdapter {
         this.emit('disconnect');
     }
 
+    async sendTransaction<T extends Transaction | VersionedTransaction>(
+        transaction: T,
+        connection: Connection,
+        options: SendTransactionOptions = {}
+    ): Promise<TransactionSignature> {
+        try {
+            const wallet = this._wallet;
+            if (!wallet) throw new WalletNotConnectedError();
+
+            try {
+                const { signers, ...sendOptions } = options;
+
+                if (isVersionedTransaction(transaction)) {
+                    signers?.length && transaction.sign(signers);
+                } else {
+                    transaction = (await this.prepareTransaction(transaction, connection, sendOptions)) as T;
+                    signers?.length && (transaction as Transaction).partialSign(...signers);
+                }
+
+                sendOptions.preflightCommitment = sendOptions.preflightCommitment || connection.commitment;
+
+                return await wallet.signAndSendTransaction(transaction, sendOptions);
+            } catch (error: any) {
+                if (error instanceof WalletError) throw error;
+                throw new WalletSendTransactionError(error?.message, error);
+            }
+        } catch (error: any) {
+            this.emit('error', error);
+            throw error;
+        }
+    }
+
     async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {
         try {
             const wallet = this._wallet;

+ 17 - 20
pnpm-lock.yaml

@@ -1055,8 +1055,8 @@ importers:
         specifier: workspace:^
         version: link:../../core/base
       '@solflare-wallet/sdk':
-        specifier: ^1.2.1
-        version: 1.2.1(@solana/web3.js@1.77.3)
+        specifier: ^1.3.0
+        version: 1.3.0(@solana/web3.js@1.77.3)
     devDependencies:
       '@solana/web3.js':
         specifier: ^1.77.3
@@ -5508,17 +5508,6 @@ packages:
   /@popperjs/core@2.11.8:
     resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
 
-  /@project-serum/sol-wallet-adapter@0.2.0(@solana/web3.js@1.77.3):
-    resolution: {integrity: sha512-ed7wZwlDqjF88VCq7eHVO8njHqdUkBxBL8WEVOnB47ooLO4btOJt6GBdkKpKqKX86c86LiEROJclcdW8e7kIjg==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@solana/web3.js': ^1.5.0
-    dependencies:
-      '@solana/web3.js': 1.77.3
-      bs58: 4.0.1
-      eventemitter3: 4.0.7
-    dev: false
-
   /@project-serum/sol-wallet-adapter@0.2.6(@solana/web3.js@1.77.3):
     resolution: {integrity: sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==}
     engines: {node: '>=10'}
@@ -6035,16 +6024,15 @@ packages:
       - supports-color
       - utf-8-validate
 
-  /@solflare-wallet/sdk@1.2.1(@solana/web3.js@1.77.3):
-    resolution: {integrity: sha512-ESF3rGZtcVFaIkX9gv7SXUbwbfBOn53l8u9vZJme3RZv4MEY/O1v5Sj2oYXhZiJ9V0PnZfByDUj8yx55j86F+A==}
+  /@solflare-wallet/sdk@1.3.0(@solana/web3.js@1.77.3):
+    resolution: {integrity: sha512-wzHJTATtsrvPzhZJG58TkcJmsMZl6yTULnWsw1txuUOWJzol916jUndcvPSlVM3zA/WU/AUk96UCVeFUOq27Nw==}
     peerDependencies:
-      '@solana/web3.js': ^1.61.0
+      '@solana/web3.js': '*'
     dependencies:
-      '@project-serum/sol-wallet-adapter': 0.2.0(@solana/web3.js@1.77.3)
       '@solana/web3.js': 1.77.3
-      bs58: 4.0.1
-      eventemitter3: 4.0.7
-      uuid: 8.3.2
+      bs58: 5.0.0
+      eventemitter3: 5.0.1
+      uuid: 9.0.0
     dev: false
 
   /@stablelib/aead@1.0.1:
@@ -10496,6 +10484,10 @@ packages:
   /eventemitter3@4.0.7:
     resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
 
+  /eventemitter3@5.0.1:
+    resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+    dev: false
+
   /events@3.3.0:
     resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
     engines: {node: '>=0.8.x'}
@@ -18798,6 +18790,11 @@ packages:
     resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
     hasBin: true
 
+  /uuid@9.0.0:
+    resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
+    hasBin: true
+    dev: false
+
   /v8-compile-cache@2.3.0:
     resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}