Skip to main content

Transaction Actions

The following actions are concerned with making and retrieving information about transactions.

Transaction format.

Since the Transaction object itself is complex and involved. (Eg, needing to retrieve the most recent blockhash and formatting signatures, Solib provides a simplified transaction format.

Transfer format

export interface TransactionArgs {
to: string // base58 encoded address
feePayer: 'from' | 'to' // Will the sender or reciever pay the network fees
amountInLamports: number
}

const transactionArgs = {
to: '5C0....',
feePayer: 'from',
amountInLamports: 2000000
}

Sending transactions

Signing transactions

signTransaction signs the transaction using the Connector configured, but does not send any information to the cluster.

import { signTransaction } from '@walletconnect/solib'

const transactionSignature = await signTransaction(transactionArgs);

Sending transactions

Although sendTransaction can be used separately, it is best to use signAndSendTransaction to prevent the transaction failing due to outdated recentBlockhash since that is retrieved during transaction signing.

import { sendTransaction } from '@walletconnect/solib'

const sentTransaction = await sendTransaction(transactionSignature);

Sign and Send Transaction

signAndSendTransaction is the main function that will be used to make transactions as it will handle all steps of making, signing and sending a transaction.

import { signAndSendTransaction } from '@walletconnect/solib'

const sentTransaction = await signAndSendTransaction(transactionArgs);

Retrieving transaction information

Watch Transaction

watchTransaction watches a transaction until completion, note this function does not provide transaction information. Only an { err: null | Error} object. if err === null, then the transaction succeeded on the blockchain.

import { signAndSendTransaction, watchTransaction } from '@walletconnect/solib'

// Signature is signed and sent to the network.
const transactionSignature = await signAndSendTransaction(
'transfer',
{
to: '<PUBKEY_BASE58>' // the wallet address of the reciever,
amountInLamports: 200000,
feePayer: 'from' // sender pays for network fees
}
)

watchTransaction(transactionSignature, ({err}) => {
if (!err) {
// transaction successful on the network
}
else {
// transaction failed.
}
})

Get Transaction

getTransaction can be used to retrieve actual transaction information, all data recieved from the cluster is forwarded and nothing is omitted.

import { getTransaction } from '@walletconnect/solib'

// already successful and confirmed transaction signature.
const successfulTransactionSignature = ''

const transactionInfo = await getTransaction(successfulTransactionSignature);

Use in tandem with watchTransaction

import { signAndSendTransaction, watchTransaction, getTransaction } from '@walletconnect/solib'

// Signature is signed and sent to the network.
const transactionSignature = await signAndSendTransaction(
'transfer',
{
to: '<PUBKEY_BASE58>' // the wallet address of the reciever,
amountInLamports: 200000,
feePayer: 'from' // sender pays for network fees
}
)

watchTransaction(transactionSignature, ({err}) => {
if (!err) {
const transactionInfo = await getTransaction(transactionSignature);
}
else {
// transaction failed.
}
})

Get fee for message

Before sending a transaction, getFeeForMessage can be used to retrieve the transaction network fee.

import { getFeeForMessage } from '@walletconnect/solib'

const fee = await getFeeForMessage('transfer', {
to,
amountInLamports,
feePayer: 'from'
})