LUKSO LSP8 Identifiable Digital Asset Standard
LSP·8 · Token
NFTs and identifiable items. bytes32 IDs, per-token ERC-725Y data, LSP1 hooks.
function tokenOwnerOf(bytes32 tokenId) external view returns (address);
function transfer(
address from,
address to,
bytes32 tokenId,
bool force,
bytes calldata data
) external;
// Per-token metadata via ERC-725Y-on-tokenId
function getDataForTokenId(bytes32 tokenId, bytes32 dataKey)
external view returns (bytes memory);
function setDataForTokenId(bytes32 tokenId, bytes32 dataKey, bytes calldata dataValue)
external;
LSP8 makes one structural change to ERC-721: token IDs are bytes32, not uint256. The
integer case still works — cast and proceed. The new cases (content hashes, encoded serials,
structured references) become first-class instead of side mappings.
The other meaningful add is getDataForTokenId(tokenId, key). Per-token metadata is a typed
key-value store, not a URL. Dynamic updates are setData calls; trust comes from whoever has
permission to make them (LSP6); off-chain media still works (with VerifiableURI when you want
integrity).
What it solves.
What it does not solve.
Anti-overselling is a feature.
- LSP8 doesn't make off-chain media verifiable on its own — use VerifiableURI in LSP4 when you need integrity.
- Publishes distinct function selectors from ERC-721. Code that hardcodes ERC-721's ABI won't accidentally dispatch to LSP8.
- bytes32 IDs are powerful but require schema discipline — pick the encoding once; it's part of the contract's permanent interface.
- Per-token ERC-725Y data is storage. Frequent mutation costs gas; decide which fields are mutable deliberately.
Companions.
Standards this composes with.