Vue Composables for Solana
Embedded Wallets provides a set of Vue composables for basic Solana wallet operations. These composables are designed to simplify common Solana interactions in your Vue app.
info
For advanced Solana features, you should use @solana/web3.js to interact with the Solana blockchain using the Embedded Wallets Vue composables.
- npm
- Yarn
- pnpm
- Bun
npm install @solana/web3.js
yarn add @solana/web3.js
pnpm add @solana/web3.js
bun add @solana/web3.js
Solana composables
| Composable Name | Description |
|---|---|
useSignAndSendTransaction | Sign and send a Solana transaction. |
useSignMessage | Sign a message with the Solana wallet. |
useSignTransaction | Sign a Solana transaction (without sending). |
useSolanaWallet | Access Solana wallet state and utilities. |
Composable usage examples
Get Solana wallet
<template>
<div>
<h2>Solana Wallet</h2>
<p>Connected: {{ connected ? 'Yes' : 'No' }}</p>
<p v-if="address">Address: {{ address }}</p>
</div>
</template>
<script setup>
import { useSolanaWallet } from '@web3auth/modal/vue'
const { address, connected } = useSolanaWallet()
</script>
Sign message
<template>
<div>
<h2>Sign message</h2>
<button @click="handleSignMessage" :disabled="isPending">
{{ isPending ? 'Signing...' : 'Sign message' }}
</button>
<p v-if="error">Error: {{ error.message }}</p>
</div>
</template>
<script setup>
import { useSignMessage } from '@web3auth/modal/vue'
const { signMessage, isPending, error } = useSignMessage()
const handleSignMessage = async () => {
try {
const message = new TextEncoder().encode('Hello Solana!')
const signature = await signMessage(message)
console.log('Signature:', signature)
} catch (err) {
console.error('Error signing message:', err)
}
}
</script>
Sign transaction
<template>
<div>
<h2>Sign transaction</h2>
<button @click="handleSignTransaction" :disabled="isPending">
{{ isPending ? 'Signing...' : 'Sign transaction' }}
</button>
<p v-if="error">Error: {{ error.message }}</p>
</div>
</template>
<script setup>
import { useSignTransaction } from '@web3auth/modal/vue'
import { Transaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js'
const { signTransaction, isPending, error } = useSignTransaction()
const handleSignTransaction = async () => {
try {
// Create a simple transfer transaction
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: new PublicKey('YOUR_PUBLIC_KEY'),
toPubkey: new PublicKey('DESTINATION_PUBLIC_KEY'),
lamports: 0.01 * LAMPORTS_PER_SOL,
})
)
const signedTransaction = await signTransaction(transaction)
console.log('Signed Transaction:', signedTransaction)
} catch (err) {
console.error('Error signing transaction:', err)
}
}
</script>
Sign and send transaction
<template>
<div>
<h2>Sign and Send transaction</h2>
<button @click="handleSignAndSend" :disabled="isPending">
{{ isPending ? 'Processing...' : 'Sign and Send' }}
</button>
<p v-if="error">Error: {{ error.message }}</p>
</div>
</template>
<script setup>
import { useSignAndSendTransaction } from '@web3auth/modal/vue'
import { Transaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js'
const { signAndSendTransaction, isPending, error } = useSignAndSendTransaction()
const handleSignAndSend = async () => {
try {
// Create a simple transfer transaction
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: new PublicKey('YOUR_PUBLIC_KEY'),
toPubkey: new PublicKey('DESTINATION_PUBLIC_KEY'),
lamports: 0.01 * LAMPORTS_PER_SOL,
})
)
const signature = await signAndSendTransaction(transaction)
console.log('Transaction Signature:', signature)
} catch (err) {
console.error('Error signing and sending transaction:', err)
}
}
</script>
Further code and advanced usage should be implemented using Solana's web3.js library as needed.