diff --git a/examples/src/examples/exampleUsage.js. b/examples/src/examples/exampleUsage.js. new file mode 100644 index 0000000..b31443b --- /dev/null +++ b/examples/src/examples/exampleUsage.js. @@ -0,0 +1,24 @@ +import { signActionPayload } from '../utils/signActionPayload'; + +const actionPayload = { + actionType: 'transfer', + amount: 500, + destination: 'G7huw9ZxyV6HX...Xnb6Vhvqpk', +}; + +async function signActionExample() { + const wallet = window.solana; + + if (!wallet.isConnected) { + await wallet.connect(); + } + + try { + const signedAction = await signActionPayload(actionPayload, wallet); + console.log('Signed Action:', signedAction); + } catch (error) { + console.error('Error signing action:', error.message); + } +} + +signActionExample(); diff --git a/src/utils/verifySignedAction.js. b/src/utils/verifySignedAction.js. new file mode 100644 index 0000000..0be701c --- /dev/null +++ b/src/utils/verifySignedAction.js. @@ -0,0 +1,20 @@ +import { PublicKey } from '@solana/web3.js'; +import nacl from 'tweetnacl'; +import bs58 from 'bs58'; + +/** + * Verifies the signed action payload. + * + * @param {Object} signedAction - The signed action payload with signature and publicKey. + * @returns {boolean} True if the signature is valid, false otherwise. + */ +export function verifySignedAction(signedAction) { + const { payload, signature, publicKey } = signedAction; + const message = new TextEncoder().encode(JSON.stringify(payload)); + + return nacl.sign.detached.verify( + message, + bs58.decode(signature), + new PublicKey(publicKey).toBytes() + ); +}