Skip to content

Commit 2a6fc94

Browse files
authored
fix: solana broken examples (#683)
* fix: add missing transaction params for solana_signTransaction * feat: parse base64 and base58 requests and add signature to response
1 parent 5ea6438 commit 2a6fc94

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -857,16 +857,22 @@ export function JsonRpcContextProvider({
857857
method: DEFAULT_SOLANA_METHODS.SOL_SIGN_TRANSACTION,
858858
params: {
859859
feePayer: transaction.feePayer!.toBase58(),
860-
recentBlockhash: transaction.recentBlockhash,
861-
instructions: transaction.instructions.map((i) => ({
862-
programId: i.programId.toBase58(),
863-
data: Array.from(i.data),
864-
keys: i.keys.map((k) => ({
865-
isSigner: k.isSigner,
866-
isWritable: k.isWritable,
867-
pubkey: k.pubkey.toBase58(),
860+
recentBlockhash: transaction.recentBlockhash!,
861+
instructions: transaction.instructions.map((instruction) => ({
862+
programId: instruction.programId.toBase58(),
863+
keys: instruction.keys.map((key) => ({
864+
...key,
865+
pubkey: key.pubkey.toBase58(),
868866
})),
867+
data: bs58.encode(instruction.data),
869868
})),
869+
partialSignatures: transaction.signatures.map((sign) => ({
870+
pubkey: sign.publicKey.toBase58(),
871+
signature: bs58.encode(sign.signature!),
872+
})),
873+
transaction: transaction
874+
.serialize({ verifySignatures: false })
875+
.toString('base64'),
870876
},
871877
},
872878
});

advanced/wallets/react-wallet-v2/src/lib/SolanaLib.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ export default class SolanaLib {
4949
const transaction = this.deserialize(params.transaction)
5050
this.sign(transaction)
5151

52-
return { transaction: this.serialize(transaction) }
52+
return {
53+
transaction: this.serialize(transaction),
54+
signature: bs58.encode(transaction.signatures[0])
55+
}
5356
}
5457

5558
public async signAndSendTransaction(
@@ -80,7 +83,14 @@ export default class SolanaLib {
8083
}
8184

8285
private deserialize(transaction: string): VersionedTransaction {
83-
return VersionedTransaction.deserialize(bs58.decode(transaction))
86+
let bytes: Uint8Array
87+
try {
88+
bytes = bs58.decode(transaction)
89+
} catch {
90+
bytes = Buffer.from(transaction, 'base64')
91+
}
92+
93+
return VersionedTransaction.deserialize(bytes)
8494
}
8595

8696
private sign(transaction: VersionedTransaction) {
@@ -96,7 +106,10 @@ export namespace SolanaLib {
96106

97107
export type SignMessage = RPCRequest<{ message: string }, { signature: string }>
98108

99-
export type SignTransaction = RPCRequest<{ transaction: string }, { transaction: string }>
109+
export type SignTransaction = RPCRequest<
110+
{ transaction: string },
111+
{ transaction: string; signature: string }
112+
>
100113

101114
export type SignAndSendTransaction = RPCRequest<
102115
{ transaction: string; options?: SendOptions },

0 commit comments

Comments
 (0)