migration · ERC-1155 → LSP·7+8

Migrate ERC-1155 to LSP·7+8 on Ethereum/EVM

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.