ERC-1155 complexity
ERC-1155 hides semantics in token IDs.
One contract for fungible + identifiable items. Apps pay the decoding tax.
balanceOf(account, id) split by asset shape If you're dealing with ERC-1155 complexity, the LUKSO route is LSP7 + LSP8. LSP7 covers fungible and semi-fungible. LSP8 covers identifiable. The semantic split lives in the interface itself, so downstream code dispatches on asset shape without learning per-collection bit-conventions. Receivers handle both through one LSP1 hook with a typeId discriminator.
Why this breaks
One ERC-1155 contract can hold currency-like tokens, edition NFTs, and unique items at once. Wallets and indexers have to decode the intent of each id from per-collection rules. Marketplaces add custom logic per contract because there is no standard way to know which ids are fungible vs unique.
Batch transfer is genuinely useful, but it composes badly with receiver hooks — every receiver
must implement IERC1155Receiver, including for batches. The savings on gas land as costs on
integrators.
What people try
High-bit token ID conventions
Encode “this id range is fungible, this is unique” into the top bits. Works inside one contract. Any external code that wants the same semantics has to learn the convention.
One-contract-per-game patterns
Restore the boundary ERC-1155 erased. Negates the gas savings that motivated ERC-1155 in the first place.
Off-chain id registries
Move the typing problem to an off-chain index. The on-chain state still has no opinion.
Custom decoder logic per contract
Every consumer has to implement the per-id type rules. The cost compounds for each new integration.
How LSP solves it
LSP7 covers fungible and semi-fungible assets. LSP8 covers identifiable assets. They share
transfer naming (the same force flag and bytes data parameter), the same LSP1 receiver
hook, and the same LSP4 metadata pattern.
When you need multi-asset packing, you ship multiple LSP7/LSP8 contracts. The semantic boundary is in the standard, not encoded in token-id bit ranges that every integrator has to learn separately.