CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-web3-eth

Web3 module to interact with the Ethereum blockchain and smart contracts.

67

0.98x
Overview
Eval results
Files

transaction-management.mddocs/

Transaction Management

The transaction management functionality provides complete transaction lifecycle support from creation and signing to broadcasting and confirmation monitoring.

Transaction Sending

sendTransaction

Sends a transaction to the network. Handles gas estimation, nonce management, and signing automatically.

sendTransaction(transaction?: Transaction, returnFormat?: DataFormat, options?: SendTransactionOptions): Promise<TransactionReceipt>;

Parameters:

  • transaction: Transaction object with from, to, value, data, etc.
  • returnFormat: Output format configuration
  • options: Additional sending options (confirmations, timeouts, etc.)

Usage Example:

// Basic transaction
const receipt = await eth.sendTransaction({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x8ba1f109551bD432803012645Hac136c1c1b6c5E", 
  value: "1000000000000000000", // 1 ETH in wei
  gas: "21000"
});

// Contract interaction
const contractReceipt = await eth.sendTransaction({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x1234567890123456789012345678901234567890", // contract address
  data: "0xa9059cbb000000000000000000000000...", // encoded function call
  gas: "100000"
});

// With advanced options
const receipt = await eth.sendTransaction({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x8ba1f109551bD432803012645Hac136c1c1b6c5E",
  value: "500000000000000000",
  maxFeePerGas: "20000000000", // EIP-1559
  maxPriorityFeePerGas: "2000000000"
}, DEFAULT_RETURN_FORMAT, {
  transactionConfirmationBlocks: 3,
  transactionBlockTimeout: 100
});

sendSignedTransaction

Broadcasts a pre-signed transaction to the network.

sendSignedTransaction(transaction: Bytes, returnFormat?: DataFormat, options?: SendSignedTransactionOptions): Promise<TransactionReceipt>;

Usage Example:

// Send a pre-signed transaction
const signedTx = "0xf86c808504a817c800825208942bcda7e0...";
const receipt = await eth.sendSignedTransaction(signedTx);

Transaction Estimation and Validation

estimateGas

Estimates the gas required for a transaction or contract call.

estimateGas(transaction?: TransactionCall, blockNumber?: BlockNumberOrTag, returnFormat?: DataFormat): Promise<Numbers>;

Usage Example:

const gasEstimate = await eth.estimateGas({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x1234567890123456789012345678901234567890",
  data: "0xa9059cbb000000000000000000000000..."
});
console.log(`Estimated gas: ${gasEstimate}`);

createAccessList

Creates an access list for EIP-2930 transactions to reduce gas costs.

createAccessList(transaction?: TransactionForAccessList, blockNumber?: BlockNumberOrTag, returnFormat?: DataFormat): Promise<AccessListResult>;

Usage Example:

const accessListResult = await eth.createAccessList({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x1234567890123456789012345678901234567890",
  data: "0xa9059cbb000000000000000000000000..."
});

// Use the access list in the transaction
const receipt = await eth.sendTransaction({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x1234567890123456789012345678901234567890",
  data: "0xa9059cbb000000000000000000000000...",
  accessList: accessListResult.accessList,
  type: 1 // EIP-2930 transaction
});

Transaction Utilities

waitForTransactionReceipt

Waits for a transaction to be mined and returns its receipt.

function waitForTransactionReceipt(
  web3Context: Web3Context, 
  transactionHash: HexString32Bytes, 
  returnFormat?: DataFormat, 
  options?: TransactionReceiptOptions
): Promise<TransactionReceipt>;

Usage Example:

import { waitForTransactionReceipt } from "web3-eth";

// Send transaction and get hash
const txHash = "0xabcdef1234567890...";

// Wait for confirmation
const receipt = await waitForTransactionReceipt(eth, txHash, DEFAULT_RETURN_FORMAT, {
  transactionConfirmationBlocks: 3,
  transactionBlockTimeout: 100
});

if (receipt.status === '0x1') {
  console.log("Transaction confirmed successfully");
}

trySendTransaction

Sends a transaction with automatic retry logic and error handling.

function trySendTransaction(
  web3Context: Web3Context,
  transaction: Transaction,
  returnFormat?: DataFormat,
  options?: SendTransactionOptions
): Promise<TransactionReceipt>;

Transaction Events

Both sendTransaction and sendSignedTransaction emit events during processing:

interface SendTransactionEvents<ReturnFormat = DataFormat> {
  sending: Transaction;
  sent: Transaction;
  transactionHash: HexString32Bytes;
  receipt: TransactionReceipt;
  confirmation: { confirmations: Numbers; receipt: TransactionReceipt; latestBlockHash: HexString32Bytes };
  error: Error;
}

Usage Example:

const promiEvent = eth.sendTransaction({
  from: "0x742d35Cc6634C0532925a3b8D7389Fc3C1b6c5E",
  to: "0x8ba1f109551bD432803012645Hac136c1c1b6c5E",
  value: "1000000000000000000"
});

promiEvent.on("sending", (tx) => {
  console.log("Sending transaction...", tx);
});

promiEvent.on("transactionHash", (hash) => {
  console.log("Transaction hash:", hash);
});

promiEvent.on("confirmation", (confirmation) => {
  console.log(`Confirmation ${confirmation.confirmations}`);
});

promiEvent.on("error", (error) => {
  console.error("Transaction error:", error);
});

const receipt = await promiEvent;

Transaction Middleware

Set custom middleware to process transactions before sending.

interface TransactionMiddleware {
  processTransaction(transaction: Transaction, options?: SendTransactionOptions): Promise<Transaction>;
}

setTransactionMiddleware(transactionMiddleware: TransactionMiddleware): void;
getTransactionMiddleware(): TransactionMiddleware | undefined;

Usage Example:

// Custom middleware to add gas buffer
const gasBufferMiddleware = {
  async processTransaction(tx, options) {
    if (!tx.gas) {
      const estimated = await eth.estimateGas(tx);
      tx.gas = Math.floor(Number(estimated) * 1.2); // 20% buffer
    }
    return tx;
  }
};

eth.setTransactionMiddleware(gasBufferMiddleware);

Core Types

interface Transaction {
  from: Address;
  to?: Address;
  value?: Numbers;
  gas?: Numbers;
  gasPrice?: Numbers;
  maxFeePerGas?: Numbers;
  maxPriorityFeePerGas?: Numbers;
  data?: Bytes;
  nonce?: Numbers;
  type?: Numbers;
  accessList?: AccessList;
  chainId?: Numbers;
}

interface TransactionCall {
  from?: Address;
  to: Address;
  gas?: Numbers;
  gasPrice?: Numbers;
  maxFeePerGas?: Numbers;
  maxPriorityFeePerGas?: Numbers;
  value?: Numbers;
  data?: Bytes;
  type?: Numbers;
  accessList?: AccessList;
}

interface TransactionForAccessList {
  from?: Address;
  to?: Address;
  gas?: Numbers;
  gasPrice?: Numbers;
  maxFeePerGas?: Numbers;
  maxPriorityFeePerGas?: Numbers;
  value?: Numbers;
  data?: Bytes;
}

interface SendTransactionOptions<ResolveType = TransactionReceipt> {
  ignoreGasPricing?: boolean;
  transactionConfirmationBlocks?: Numbers;
  transactionBlockTimeout?: Numbers;
  transactionConfirmationPollingInterval?: Numbers;
  transactionReceiptPollingInterval?: Numbers;
  transactionSendTimeout?: Numbers;
  ignoreFillingGasLimit?: boolean;
  contractAbi?: AbilityType;
}

interface SendSignedTransactionOptions<ResolveType = TransactionReceipt> {
  transactionConfirmationBlocks?: Numbers;
  transactionBlockTimeout?: Numbers;
  transactionConfirmationPollingInterval?: Numbers;
  transactionReceiptPollingInterval?: Numbers;
  transactionSendTimeout?: Numbers;
}

interface AccessList {
  address: Address;
  storageKeys: HexString32Bytes[];
}

interface AccessListResult {
  accessList: AccessList[];
  gasUsed: HexString;
}

interface TransactionReceiptOptions {
  transactionConfirmationBlocks?: Numbers;
  transactionBlockTimeout?: Numbers;
  transactionReceiptPollingInterval?: Numbers;
}

Install with Tessl CLI

npx tessl i tessl/npm-web3-eth

docs

account-operations.md

blockchain-state.md

cryptographic-operations.md

event-monitoring.md

gas-fee-management.md

index.md

network-information.md

smart-contract-interaction.md

transaction-management.md

transaction-utilities.md

tile.json