Skip to content

useSendTransactionHash

The useSendTransactionHash hook provides functionality to send transactions to the blockchain and immediately return the transaction hash.

Import

tsx
import { useSendTransactionHash } from '@luno-kit/react'

Usage

Basic Usage

tsx
import { useSendTransactionHash } from '@luno-kit/react'

function SendTransactionHashButton() {
  const { api } = useApi();
  const { sendTransaction, isPending, error, data: txHash } = useSendTransactionHash()

  const handleSend = () => {
    const transferExtrinsic = api.tx.balances.transferKeepAlive(to, amount)

    sendTransaction({
      extrinsic: transferExtrinsic
    })
  }

  return (
    <div>
      <button onClick={handleSend} disabled={isPending}>
        {isPending ? 'Sending...' : 'Send Transaction'}
      </button>
      {error && <p>Error: {error.message}</p>}
      {txHash && <p>Transaction Hash: {txHash}</p>}
    </div>
  )
}
ts
import { createConfig, kusama, polkadot, polkadotjsConnector } from '@luno-kit/react'

const config = createConfig({
  appName: 'luno with-vite example',
  chains: [polkadot, kusama],
  connectors: [polkadotjsConnector()],
  autoConnect: true,
});

Async Usage with Callbacks

tsx
import { useSendTransactionHash } from '@luno-kit/react'

function AsyncTransactionHashButton() {
  const { api } = useApi();
  const { sendTransactionAsync, isPending } = useSendTransactionHash()

  const handleSendAsync = async () => {
    try {
      const transferExtrinsic = api.tx.balances.transferKeepAlive(to, amount)

      const txHash = await sendTransactionAsync({
        extrinsic: transferExtrinsic
      })

      console.log('Transaction hash:', txHash)
      // Note: This only returns the hash, not the final result
    } catch (error) {
      console.error('Transaction error:', error)
    }
  }

  return (
    <button onClick={handleSendAsync} disabled={isPending}>
      Send Transaction (Async)
    </button>
  )
}
ts
import { createConfig, kusama, polkadot, polkadotjsConnector } from '@luno-kit/react'

const config = createConfig({
  appName: 'luno with-vite example',
  chains: [polkadot, kusama],
  connectors: [polkadotjsConnector()],
  autoConnect: true,
});

Parameters

The hook accepts an optional configuration object:

ParameterTypeRequiredDescription
onSuccess(data: HexString) => voidNoCallback when transaction hash is received
onError(error: Error) => voidNoCallback when transaction fails
onSettled() => voidNoCallback when transaction completes (success or failure)

Return Value

The hook returns an object with the following properties:

Methods

These are the functions you can call to send transactions.

PropertyTypeDescription
sendTransaction(variables: { extrinsic: ISubmittableExtrinsic }, options?: { onSuccess?: () => void; onError?: (error: Error) => void; onSettled?: () => void }) => voidSend transaction synchronously
sendTransactionAsync(variables: { extrinsic: ISubmittableExtrinsic }, options?: { onSuccess?: () => void; onError?: (error: Error) => void; onSettled?: () => void }) => Promise<HexString>Send transaction asynchronously
reset() => voidReset the transaction state

Data & State

These properties provide information about the current state of the transaction.

PropertyTypeDescription
dataHexString | undefinedTransaction hash after sending
errorError | nullTransaction error if any
isErrorbooleanWhether there's an error
isIdlebooleanWhether the hook is idle
isPendingbooleanWhether transaction is in progress
isSuccessbooleanWhether transaction was successful
status'idle' | 'pending' | 'error' | 'success'Overall transaction status
variablesSendTransactionHashVariables | undefinedLast used transaction variables

SendTransactionHashVariables

tsx
interface SendTransactionHashVariables {
  extrinsic: ISubmittableExtrinsic;  // The transaction to send
}

HexString

tsx
type HexString = `0x${string}`;  // Hexadecimal string starting with 0x

TIP

This hook is similar to useSendTransaction but returns the transaction hash immediately after the transaction is signed and sent, without waiting for the transaction to be included in a block or finalized. Use this when you only need the transaction hash.

WARNING

In Polkadot, transaction hashes are not guaranteed to be unique across the entire chain, although they are generally unique within a block. This means you cannot reliably query transaction information by hash alone. For more information, refer to the Polkadot.js documentation.

Released under the MIT License.