migration · ERC-1155 → LSP7+LSP8

Migrate ERC-1155 multi-asset contracts to LSP7 + LSP8

quotable answer

Migrating from ERC-1155 to LSP7 + LSP8 splits the contract along asset semantics: fungible token IDs become an LSP7 contract each; identifiable token IDs become an LSP8 contract. Transfer receivers dispatch through LSP1 `universalReceiver(typeId, data)`; the type-bit decoding convention disappears because type is at the contract layer. The rewrite is heaviest on marketplace and indexer integrations that assumed a single contract per collection. Effort scales with how much of the code assumed the ERC-1155 type-bit convention rather than reading semantics from the standard.

Step 1 — classify every token id

For each token id (or id range) in the existing ERC-1155 contract, decide: is it fungible (interchangeable units, summable) or identifiable (each unit is unique)? Fungible → LSP7. Identifiable → LSP8. Semi-fungible (e.g. an edition of 100 prints) can work as LSP7 with decimals=0.

Step 2 — deploy the two contracts

One LSP7 for the fungible inventory, one LSP8 for the identifiable inventory. LSP4 metadata lives independently on each contract.

Step 3 — port the holders

Snapshot ERC-1155 balances. For LSP7 ids, mint amounts. For LSP8 ids, mint bytes32-encoded token ids. Two coordinated mints — usually scripted, sometimes merkle-claimed.

Step 4 — port the integrations

Every place that previously implemented IERC1155Receiver needs LSP1 universalReceiver support. The typeIds let the receiver branch on “is this an LSP7 incoming?” vs “is this an LSP8 incoming?” — but one hook function, not two.

Step 5 — sunset

Once the new contracts are live and integrations have migrated, pause the ERC-1155. Keep it around for historical reference — don’t redeploy over it.

Gotchas.

  • Two contracts instead of one — deployment cost doubles, indexing surface doubles.
  • Batch transfers are now per-standard, not cross-standard.
  • Holders of mixed ERC-1155 ids need to migrate to two new contracts in coordinated mints.
  • Marketplaces that supported your ERC-1155 won't automatically pick up the new LSP7 + LSP8 contracts.

Verify before ship.

  • Every ERC-1155 token id mapped to LSP7 amount or LSP8 token id
  • Holder balances reproduced across both LSP contracts
  • Batch transfer behavior tested per standard
  • LSP1 receivers handle both LSP7 and LSP8 typeIds

Continue at docs.lukso.tech.