Web3 module to interact with the Ethereum blockchain and smart contracts.
67
The transaction management functionality provides complete transaction lifecycle support from creation and signing to broadcasting and confirmation monitoring.
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 configurationoptions: 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
});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);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}`);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
});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");
}Sends a transaction with automatic retry logic and error handling.
function trySendTransaction(
web3Context: Web3Context,
transaction: Transaction,
returnFormat?: DataFormat,
options?: SendTransactionOptions
): Promise<TransactionReceipt>;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;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);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-ethdocs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10