Core helper utilities providing standardized error handling and data formatting for the Web3.js ecosystem
—
Comprehensive data formatting utilities for converting between JavaScript types and Ethereum node formats. The formatters are divided into input formatters (for preparing data to send to Ethereum nodes) and output formatters (for processing data received from nodes).
Input formatters prepare JavaScript data for transmission to Ethereum nodes, handling hex encoding, address validation, and parameter formatting.
/**
* Formats block number with default fallback to this.defaultBlock
* @param blockNumber - Block number to format or null/undefined for default
* @returns Formatted block number as hex string or predefined string
*/
function inputDefaultBlockNumberFormatter(blockNumber: string | number): string;
/**
* Formats block number to hex or predefined string
* @param blockNumber - Block number, predefined string, or 'genesis'
* @returns Hex string for numbers, original string for predefined values
*/
function inputBlockNumberFormatter(blockNumber: string | number): string | number;
/**
* Formats transaction call options
* @param options - Transaction call options object
* @returns Formatted options with hex-encoded values and validated addresses
*/
function inputCallFormatter(options: object): object;
/**
* Formats transaction options for sending
* @param options - Transaction options object
* @returns Formatted options with required 'from' field validation
*/
function inputTransactionFormatter(options: object): object;
/**
* Formats transaction input options (core transaction formatter used internally)
* @param options - Transaction options object
* @returns Formatted options with hex-encoded values and validated addresses
*/
function txInputFormatter(options: object): object;
/**
* Formats and validates Ethereum addresses, supporting IBAN format
* @param address - Ethereum address or IBAN address
* @returns Lowercase hex address with 0x prefix
* @throws Error if address is invalid or indirect IBAN
*/
function inputAddressFormatter(address: string): string;
/**
* Formats whisper post messages
* @param post - Whisper post object
* @returns Formatted post with hex-encoded numeric values and topics
*/
function inputPostFormatter(post: object): object;
/**
* Formats log filter options
* @param options - Log filter options
* @returns Formatted options with hex block numbers and topics
*/
function inputLogFormatter(options: object): object;
/**
* Formats data for signing (hex encoding)
* @param data - Data string to format for signing
* @returns Hex-encoded string or original if already hex
*/
function inputSignFormatter(data: string): string;
/**
* Formats storage keys array to hex strings
* @param keys - Array of storage keys (numbers, strings, BN, BigNumber)
* @returns Array of hex-encoded storage keys
*/
function inputStorageKeysFormatter(keys: Array): Array;
/**
* Formats block number with default fallback to this.defaultBlock
* @param blockNumber - Block number to format or null/undefined for default
* @returns Formatted block number as hex string or predefined string
*/
function inputDefaultBlockNumberFormatter(blockNumber: string | number): string;
/**
* Formats whisper post messages
* @param post - Whisper post object
* @returns Formatted post with hex-encoded numeric values and topics
*/
function inputPostFormatter(post: object): object;
/**
* Formats log filter options
* @param options - Log filter options
* @returns Formatted options with hex block numbers and topics
*/
function inputLogFormatter(options: object): object;Usage Examples:
const { formatters } = require("web3-core-helpers");
// Address formatting
const address = formatters.inputAddressFormatter("0xd46e8dd67c5d32be8058bb8eb970870f07244567");
console.log(address); // "0xd46e8dd67c5d32be8058bb8eb970870f07244567"
// Block number formatting
const blockNum = formatters.inputBlockNumberFormatter(15000000);
console.log(blockNum); // "0xe4e1c0"
const latest = formatters.inputBlockNumberFormatter("latest");
console.log(latest); // "latest"
// Transaction formatting
const txOptions = formatters.inputTransactionFormatter({
to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
value: 1000000000000000000,
gas: 21000,
from: "0x8ba1f109551bD432803012645Hac136c30c6dE3e"
});
console.log(txOptions.value); // "0xde0b6b3a7640000"
console.log(txOptions.gas); // "0x5208"
// Sign data formatting
const signData = formatters.inputSignFormatter("Hello World");
console.log(signData); // "0x48656c6c6f20576f726c64"Output formatters process data received from Ethereum nodes, converting hex values to appropriate JavaScript types and formatting addresses.
/**
* Formats big numbers to decimal strings
* @param number - Number in hex or other format
* @returns Decimal string representation
*/
function outputBigNumberFormatter(number: string | number): string;
/**
* Formats transaction objects received from nodes
* @param tx - Transaction object from node
* @param hexFormat - Optional flag to preserve hex format for numbers
* @returns Formatted transaction with converted types and checksummed addresses
*/
function outputTransactionFormatter(tx: object, hexFormat?: boolean): object;
/**
* Formats transaction receipt objects
* @param receipt - Transaction receipt from node
* @returns Formatted receipt with converted numbers and processed logs
*/
function outputTransactionReceiptFormatter(receipt: object): object;
/**
* Formats block objects received from nodes
* @param block - Block object from node
* @param hexFormat - Optional flag to preserve hex format for numbers
* @returns Formatted block with converted numbers and processed transactions
*/
function outputBlockFormatter(block: object, hexFormat?: boolean): object;
/**
* Formats log objects with generated log IDs
* @param log - Log object from node
* @returns Formatted log with converted numbers and checksummed address
*/
function outputLogFormatter(log: object): object;
/**
* Formats whisper post messages
* @param post - Whisper post object
* @returns Formatted post with converted numbers and UTF8 topics
*/
function outputPostFormatter(post: object): object;
/**
* Formats syncing status objects
* @param result - Syncing status from node
* @returns Formatted syncing status with converted numbers
*/
function outputSyncingFormatter(result: object): object;
/**
* Formats account proof objects
* @param proof - Account proof from node
* @returns Formatted proof with checksummed address and converted numbers
*/
function outputProofFormatter(proof: object): object;
/**
* Formats whisper post messages
* @param post - Whisper post object
* @returns Formatted post with converted numbers and UTF8 topics
*/
function outputPostFormatter(post: object): object;Usage Examples:
// Transaction formatting
const rawTx = {
blockNumber: "0x5bad55",
value: "0xde0b6b3a7640000",
gasPrice: "0x4a817c800",
from: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
to: "0x8ba1f109551bd432803012645hac136c30c6de3e"
};
const formattedTx = formatters.outputTransactionFormatter(rawTx);
console.log(formattedTx.blockNumber); // 6073685
console.log(formattedTx.value); // "1000000000000000000"
console.log(formattedTx.from); // "0xd46e8dd67c5d32be8058bb8eb970870f07244567" (checksummed)
// Block formatting
const rawBlock = {
number: "0x5bad55",
gasLimit: "0x1c9c380",
gasUsed: "0x5208",
timestamp: "0x55ba467c"
};
const formattedBlock = formatters.outputBlockFormatter(rawBlock);
console.log(formattedBlock.number); // 6073685
console.log(formattedBlock.gasLimit); // 30000000
// Big number formatting
const bigNum = formatters.outputBigNumberFormatter("0xde0b6b3a7640000");
console.log(bigNum); // "1000000000000000000"
// Log formatting with ID generation
const rawLog = {
blockHash: "0x1234567890abcdef",
transactionHash: "0xfedcba0987654321",
logIndex: "0x0",
address: "0xd46e8dd67c5d32be8058bb8eb970870f07244567"
};
const formattedLog = formatters.outputLogFormatter(rawLog);
console.log(formattedLog.id); // "log_a1b2c3d4" (generated ID)
console.log(formattedLog.logIndex); // 0These functions are used internally by the main formatters:
/**
* Internal function that formats transaction options (used by inputCallFormatter and inputTransactionFormatter)
* @param options - Transaction options object
* @returns Formatted options with hex-encoded values
*/
function _txInputFormatter(options: object): object;This function handles:
to fieldFormatters include validation and throw errors for invalid input:
// Address validation
try {
formatters.inputAddressFormatter("invalid-address");
} catch (error) {
console.log(error.message); // "Provided address invalid-address is invalid..."
}
// Transaction data validation
try {
formatters.inputTransactionFormatter({
data: "not-hex-data"
});
} catch (error) {
console.log(error.message); // "The data field must be HEX encoded data."
}The formatters module depends on:
Install with Tessl CLI
npx tessl i tessl/npm-web3-core-helpers