CryptoAPIsOffline: nothing is sent

Decode calldata and logs byte by byte

Paste calldata and an ABI (JSON or human-readable lines) to see each argument mapped to the exact bytes it came from. Encode arguments, compute selectors and topics, decode event logs and revert data.

A decoded function name only means the selector matches the ABI you supplied. It does not prove what the deployed contract does or that it is safe.

Transaction input / eth_call data.

3 functions, 2 events, 1 error parsed.

Kept in reports as provenance. The decoder cannot check that this ABI matches the deployed contract.

Checking for a saved draft…
Complete420 bytes

Selector 0x2eb2c2d6 matches safeBatchTransferFrom(address,address,uint256[],uint256[],bytes) in your ABI.

  • fromaddress0x1111111111111111111111111111111111111111bytes 4–36
  • toaddress0x2222222222222222222222222222222222222222bytes 36–68
  • idsuint256[]2 elementsbytes 164–260
    • 0uint2567bytes 196–228
    • 1uint2569007199254740993beyond 2^53: kept exactbytes 228–260
  • valuesuint256[]2 elementsbytes 260–356
    • 0uint2561bytes 292–324
    • 1uint256250bytes 324–356
  • databytes0xcafe2 bytesbytes 356–420
02eb2c2d6selector safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)
0x40000000000000000000000001111111111111111111111111111111111111111from: address
0x240000000000000000000000002222222222222222222222222222222222222222to: address
0x4400000000000000000000000000000000000000000000000000000000000000a0ids offset → 160
0x640000000000000000000000000000000000000000000000000000000000000100values offset → 256
0x840000000000000000000000000000000000000000000000000000000000000160data offset → 352
0xa40000000000000000000000000000000000000000000000000000000000000002ids length
0xc400000000000000000000000000000000000000000000000000000000000000070: uint256
0xe400000000000000000000000000000000000000000000000000200000000000011: uint256
0x1040000000000000000000000000000000000000000000000000000000000000002values length
0x12400000000000000000000000000000000000000000000000000000000000000010: uint256
0x14400000000000000000000000000000000000000000000000000000000000000fa1: uint256
0x1640000000000000000000000000000000000000000000000000000000000000002data length
0x184cafe000000000000000000000000000000000000000000000000000000000000data bytes +1
Checking for a saved draft…Shared ABI draft

Bounds-checked decoding

Malformed or hostile calldata can claim a string length of 2^255 bytes or an offset far beyond the payload. The decoder validates every offset, length and array count against the bytes actually present before reading or allocating, so such input produces a precise diagnostic instead of freezing the tab.

  • Offsets that point outside the payload, or back into the head area, are reported with the byte position of the offending word.
  • Dirty high bits in uint8–uint248, non-sign-extended intN, non-zero address padding and bool values other than 0 or 1 are reported as errors, matching strict decoders.
  • Trailing bytes after the last referenced field are reported rather than silently ignored.
  • Integers beyond 2^53 are kept exact from decode through display and export.

Selectors, topics and collisions

A function selector is the first 4 bytes of Keccak-256 of the canonical signature, such as transfer(address,uint256) → 0xa9059cbb. An event topic is the full 32-byte hash, such as Transfer(address,address,uint256) → 0xddf252ad…. Keccak-256 here comes from the audited @noble/hashes library; it is not the same function as FIPS SHA3-256, and the tool shows both so the difference is visible.

Four bytes collide. burn(uint256) and collate_propagate_storage(bytes16) share 0x42966c68. When a selector matches several known signatures, every candidate is shown.

Event logs

Indexed parameters live in topics, the rest in data. An indexed string, bytes, array or struct is stored as a hash, so its original value cannot be recovered from the log; the decoder says so instead of guessing. A topic count that does not match the ABI's indexed flags is reported, since ERC-20 and ERC-721 Transfer events share a signature but not a layout.

Questions

Do I need the contract ABI?

For a full decode, yes. Without one, the calldata view still splits the selector and 32-byte words and looks the selector up in a small bundled signature pack, labelled as a guess.

Which ABI formats are accepted?

Solidity JSON ABI (an array, or an artifact object with an "abi" field) and human-readable lines like "function transfer(address to, uint256 amount)". Tuples and nested arrays are supported; fixed-point types are not.

Can it decode a reverted call?

Yes. Paste revert data to decode Error(string), Panic(uint256) with its documented code meaning, or a custom error from the supplied ABI.

Is my calldata uploaded anywhere?

No. Decoding runs in your browser. Drafts are saved only in this browser's local storage, and you can export or clear them.