Skip to main content
All CollectionsHana WalletDevelopers
Hana Wallet Solana Integration Guide

Hana Wallet Solana Integration Guide

Connect your Solana dApp to Hana Wallet via Wallet Standard. Includes detection, signing, events, and full example flow.

David avatar
Written by David
Updated over a week ago

Hana Wallet implements the Wallet Standard for Solana blockchain interactions. This allows your dApp to seamlessly connect with Hana Wallet and utilize its features for signing transactions and messages.


Features

Hana Wallet's Solana provider supports:

  • Connecting to wallet accounts

  • Disconnecting from wallet accounts

  • Signing transactions (legacy and v0)

  • Signing messages

  • Listening for account change events


Integration

Detecting Hana Wallet

const wallets = window.navigator.wallets; const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

Connecting to Hana Wallet

async function connectToHanaWallet() {
try {
const wallets = window.navigator.wallets;
const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

if (!hanaWallet) {
console.error('Hana Wallet not found');
return;
}

const connectFeature = hanaWallet.features['standard:connect'];
const { accounts } = await connectFeature.connect();

console.log('Connected accounts:', accounts);
return accounts;
} catch (error) {
console.error('Failed to connect to Hana Wallet:', error);
throw error;
}
}

Signing Transactions

async function signTransaction(account, transaction) {
try {
const wallets = window.navigator.wallets;
const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

const signFeature = hanaWallet.features['solana:signTransaction'];
const signedTransactions = await signFeature.signTransaction({
account,
transaction
});

return signedTransactions[0].signedTransaction;
} catch (error) {
console.error('Failed to sign transaction:', error);
throw error;
}
}

Signing Messages

async function signMessage(account, message) {
try {
const wallets = window.navigator.wallets;
const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

const signFeature = hanaWallet.features['solana:signMessage'];
const signedMessages = await signFeature.signMessage({
account,
message
});

return {
signature: signedMessages[0].signature,
signedMessage: signedMessages[0].signedMessage
};
} catch (error) {
console.error('Failed to sign message:', error);
throw error;
}
}

Listening for Account Changes

function listenForAccountChanges(callback) {
const wallets = window.navigator.wallets;
const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

const eventsFeature = hanaWallet.features['standard:events'];
const removeListener = eventsFeature.on('change', (event) => {
if (event.accounts) {
callback(event.accounts);
}
});

return removeListener;
}

Disconnecting from Hana Wallet

async function disconnectFromHanaWallet() {
try {
const wallets = window.navigator.wallets;
const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

const disconnectFeature = hanaWallet.features['standard:disconnect'];
await disconnectFeature.disconnect();

console.log('Disconnected from Hana Wallet');
} catch (error) {
console.error('Failed to disconnect from Hana Wallet:', error);
throw error;
}
}

Supported Transaction Versions

Hana Wallet supports:

  • Legacy transactions

  • Version 0 transactions

Check supportedTransactionVersions inside the solana:signTransaction feature.


Chains

Hana Wallet currently supports:

  • Solana Mainnet (solana:mainnet)


Complete Example

async function initializeHanaWallet() {
try {
const wallets = window.navigator.wallets;
const hanaWallet = wallets.find(wallet => wallet.name === 'Hana Wallet');

if (!hanaWallet) {
throw new Error('Hana Wallet not found. Please install Hana Wallet extension.');
}

const connectFeature = hanaWallet.features['standard:connect'];
const { accounts } = await connectFeature.connect();

if (accounts.length === 0) {
throw new Error('No accounts found in Hana Wallet');
}

console.log('Connected to Hana Wallet:', accounts[0].address);

const eventsFeature = hanaWallet.features['standard:events'];
const removeListener = eventsFeature.on('change', (event) => {
console.log('Wallet accounts changed:', event.accounts);
});

return {
wallet: hanaWallet,
account: accounts[0],
removeListener
};
} catch (error) {
console.error('Failed to initialize Hana Wallet:', error);
throw error;
}
}

async function runExample() {
let walletConnection;

try {
walletConnection = await initializeHanaWallet();
const { wallet, account } = walletConnection;

const transaction = {
toString: () => 'serialized-transaction-data'
};

const signFeature = wallet.features['solana:signTransaction'];
const signedTransactions = await signFeature.signTransaction({
account,
transaction
});

console.log('Transaction signed:', signedTransactions[0].signedTransaction);

const message = new TextEncoder().encode('Hello from my dApp!');

const messageSignFeature = wallet.features['solana:signMessage'];
const signedMessages = await messageSignFeature.signMessage({
account,
message
});

console.log('Message signed:', signedMessages[0].signature);
} catch (error) {
console.error('Error in example:', error);
} finally {
if (walletConnection) {
const disconnectFeature = walletConnection.wallet.features['standard:disconnect'];
await disconnectFeature.disconnect();
walletConnection.removeListener();
console.log('Disconnected from Hana Wallet');
}
}
}

runExample();

Best Practices

  1. Error Handling: Always catch and handle user rejections or wallet issues

  2. Check Accounts: Confirm connected accounts exist before signing

  3. Transaction Versions: Use versions Hana supports

  4. Memory Management: Remove unused listeners

  5. UX: Inform users clearly of connection, signing, and errors


Troubleshooting

Common Issues

Problem

Solution

Wallet not found

Ensure Hana Wallet is installed and enabled

Signing failed

Check transaction structure and network balance

Listeners not triggering

Ensure correct setup of standard:events

Did this answer your question?