Decoding ERC-1155 Batch Transfers Without Double Counting
Expand ERC-1155 batch events into ID-and-value movements, preserve array pairing and event identity, and test malformed or repeated deliveries.

Overview
When translating these concepts into an integration, keep the scope described by the wallet history api with the result. The examples in wallet transaction history and smart contract event logs show how the same distinction affects neighbouring data questions.
An ERC-1155 TransferBatch event contains paired arrays of token IDs and values. It represents several token movements in one event, so the event ID and the movement ID are related but not identical.
Keep each ID paired with its value
Decode the ABI before processing arrays. Associate ids[i] with values[i], and retain the emitting contract and participants. The operator is not necessarily the sender or asset owner. Do not zip independently sorted arrays: changing one array’s order destroys the association between asset identity and amount.
Worked example: two movements
A batch contains IDs [7,9] and values [3,12]. Create movement zero for three units of ID 7 and movement one for twelve units of ID 9. Both reference the same transaction and log index. A durable child key can add the array position to the event identity.
Validate before expanding
Check array lengths and reject or quarantine undecodable evidence. Test duplicate delivery, a self-transfer, mint or burn participants and multiple batch events in one transaction. When a batch is reversed by a reorganisation, invalidate all derived child movements together. Keep the parent log so the expansion remains reproducible after a decoder correction.
A practical acceptance test
Decode IDs [7,9] with values [3,12], then deliberately reorder only the ID array in a malformed transformation fixture. The expected child movements should expose the mismatch. Repeat delivery and then invalidate the parent event. Both children must deduplicate and reverse together without affecting another batch at a different log index.
Questions about the topic
Frequently asked questions
Is the operator always the owner?
No. An approved operator can act for another address.
Can log index alone identify each expanded movement?
No. Add a stable child position within the batch.
Standards & technical documentation