Signing a Solana transaction is identical to how we sign an Ethereum transaction with the exception that we need to pass in the Solana specific RPC URL, chain ID, and method. In the example we are going to update:
chainID to solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z
rpcUrl to https://api.testnet.solana.com
method to sol_signAndConfirmTransaction
params to a base64 encoded serialized Solana transaction
Here is a short snippet of how to get the params using @solana/web3.js, for a complete example checkout this example repo:
const {Transaction,SystemProgram,LAMPORTS_PER_SOL, } =require('@solana/web3.js');let tx =newTransaction({ recentBlockhash: blockhash, feePayer: feePayerAddress, }).add(SystemProgram.transfer({ fromPubkey: fromPublicKey, toPubkey: toPublicKey, lamports:LAMPORTS_PER_SOL*0.01,// 0.01 SOL }), );// Serialize the transaction to a BufferconstserializedTransaction=tx.serialize({ requireAllSignatures:false });// Convert the serialized Buffer to a Base64 stringconstbase64Transaction=serializedTransaction.toString('base64');// Sign the transactionconstsignResponse=awaitaxios.post(`${PORTAL_MPC_CLIENT_URL}/v1/sign`, { share: share, method:'sol_signTransaction', params: base64Transaction, rpcUrl, chainId:'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z', }, { headers: { Authorization:`Bearer ${clientApiKey}` }, }, );
Below is an example curl command for signing a Solana message: