npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@fardream/confirm-solana-transaction

v1.0.1

Published

Confirm solana transaction with last valid block height.

Downloads

6

Readme

confirm-solana-transaction

Many solana client sends a transaction to the network and then wait for the status of the transaction signature to the confirm the transaction.

The classic way to do this is to check the status of the transaction signature, and see if that transaction's status matches the desired commitment level. This can be done in one shot with sendAndConfirmTransaction in the solana web3 library.

const tx = ...some..transaction;
const signature = await sendAndConfirmTransaction(connection, tx, signers, options);

During network congestions, the transaction may be dropped and the status will never return in the websocket subscription or will be null in the rpc call. However, the sendAndConfirmTransaction method doesn't check for if the transaction is dropped or not. It simply waits for 60 seconds and will throw an error if time out. However, there is not way to tell if the transaction is dropped or not.

A more robust method is to record the block hash and the lastValidBlockHeight from the getLatestBlockHash call, set the recent block hash on the transaction to that block hash, and send the transaction to the network. After transaction is sent, check what is the current valid block height. If the current valid block height is higher than the lastValidBlockHeight, the transaction has been dropped by the network and a new transaction with a different block hash can be safely retry, otherwise the transaction may still be included in a block and therefore there is still a chance that the transaction signature status can still return.

Note: if the same transaction is sent multiple times to the network, only one of the them will be executed (this is a guarantee by the network).

This library does this:

import {sendAndConfirmTransaction} from "@foonetic/confirm-solana-transaction";

const tx = ...some...transaction
const signature = await sendAndConfirmTransaction(connection, tx, signers, options, time_out);

Or if you have recorded the lastValidBlockHeight, you can simply call confirmTransaction.

sendTransaction on the solana client will automatically get the recent block hash but it doesn't expose the lastValidBlockHeight. This can be changed to

  1. get the recent block hash and last valid block height.
  2. set the block hash on the transaction, sign the transaction and serialize the data.
  3. send the serialized transaction with sendRawTransaction.