Documentation Index
Fetch the complete documentation index at: https://voltaire.tevm.sh/llms.txt
Use this file to discover all available pages before exploring further.
FunctionSignature
A FunctionSignature represents a complete Ethereum function signature with metadata, including the 4-byte selector, function name, and parameter types.
Type Definition
type FunctionSignatureType = {
readonly selector: SelectorType;
readonly signature: string;
readonly name: string;
readonly inputs: readonly string[];
};
Creating Function Signatures
From Signature String
import * as FunctionSignature from '@tevm/primitives';
const sig = FunctionSignature.fromSignature('transfer(address,uint256)');
console.log(sig.name); // 'transfer'
console.log(sig.inputs); // ['address', 'uint256']
console.log(sig.signature); // 'transfer(address,uint256)'
console.log(FunctionSignature.toHex(sig)); // '0xa9059cbb'
From Selector
import * as Selector from '@tevm/primitives';
const selector = Selector.fromHex('0xa9059cbb');
const sig = FunctionSignature.from(selector);
console.log(sig.name); // '' (unknown)
console.log(sig.inputs); // [] (unknown)
Operations
Parse Signature
Extract function name and parameter types:
const { name, inputs } = FunctionSignature.parseSignature(
'swap(uint256,uint256,address,bytes)'
);
console.log(name); // 'swap'
console.log(inputs); // ['uint256', 'uint256', 'address', 'bytes']
Compare Signatures
Comparison is based on selector equality:
const sig1 = FunctionSignature.fromSignature('transfer(address,uint256)');
const sig2 = FunctionSignature.fromSignature('transfer(address,uint256)');
const equal = FunctionSignature.equals(sig1, sig2); // true
Convert to Hex
const hex = FunctionSignature.toHex(sig);
// '0xa9059cbb'
Complex Type Support
Tuples
const sig = FunctionSignature.fromSignature(
'execute((address,uint256,bytes)[])'
);
console.log(sig.name); // 'execute'
console.log(sig.inputs); // ['(address,uint256,bytes)[]']
Arrays
const sig = FunctionSignature.fromSignature(
'batchTransfer(address[],uint256[])'
);
console.log(sig.inputs); // ['address[]', 'uint256[]']
Nested Structures
const sig = FunctionSignature.fromSignature(
'complexCall((address,(uint256,bytes)[])[])'
);
console.log(sig.inputs); // ['(address,(uint256,bytes)[])[]']
Common Function Signatures
ERC-20
const transfer = FunctionSignature.fromSignature('transfer(address,uint256)');
const approve = FunctionSignature.fromSignature('approve(address,uint256)');
const balanceOf = FunctionSignature.fromSignature('balanceOf(address)');
ERC-721
const transferFrom = FunctionSignature.fromSignature(
'transferFrom(address,address,uint256)'
);
const safeTransferFrom = FunctionSignature.fromSignature(
'safeTransferFrom(address,address,uint256)'
);
Uniswap V2
const swap = FunctionSignature.fromSignature(
'swap(uint256,uint256,address,bytes)'
);
// selector: 0x022c0d9f
Use Cases
ABI Encoding
Use with ABI encoding to construct function calls:
const sig = FunctionSignature.fromSignature('transfer(address,uint256)');
const data = Abi.encodeFunctionData(sig, [recipient, amount]);
Function Routing
Build function dispatch tables:
const handlers = new Map();
handlers.set(
FunctionSignature.toHex(transferSig),
handleTransfer
);
handlers.set(
FunctionSignature.toHex(approveSig),
handleApprove
);
Contract Introspection
Identify functions from transaction data:
const selector = txData.slice(0, 4);
const sig = FunctionSignature.from(selector);
console.log(`Function: ${sig.name || 'unknown'}`);
API Reference
Constructors
from(value: FunctionSignatureLike): FunctionSignatureType - Create from various inputs
fromSignature(signature: string): FunctionSignatureType - Create from signature string
Operations
toHex(sig: FunctionSignatureType): string - Get selector as hex
equals(a: FunctionSignatureType, b: FunctionSignatureType): boolean - Compare signatures
parseSignature(signature: string): { name: string, inputs: string[] } - Parse signature string
See Also