ERC-20 vs LSP·7 Ethereum/EVM standard comparison
ERC-20 made fungible tokens composable on EVM. LSP7 keeps the model, then adds receiver hooks, transfer context, scoped operators, and ERC-725Y-backed metadata.
Spec diff.
| ERC-20 | LSP·7 | |
|---|---|---|
| balance model | balanceOf(address) → uint256 | balanceOf(address) → uint256 |
| transfer signature | transfer(to, amount) | transfer(from, to, amount, force, data) |
| recipient notification | none | LSP1 universalReceiver on both sides |
| transfer data payload | none — workaround via wrappers | bytes calldata data — native |
| authorization | approve / allowance / transferFrom | authorizeOperator + LSP6 controller scope |
| metadata | name / symbol / decimals only | ERC-725Y under LSP4 keys |
| metadata shape | off-chain by convention | typed JSON via LSP4, VerifiableURI optional |
| interface compatibility | ERC-20 selectors — code that ABI-checks for ERC-20 dispatches | different selectors — won't accidentally satisfy ERC-20 ABI checks |
| reentrancy surface on transfer | none — no recipient call | LSP1 hook fires on recipient; standard reentrancy guards required |
How they differ structurally
ERC-20 is a balance sheet plus a transfer event. The minimum interface that made composability possible. The integration tax — receiver hooks, transfer context, approval risk — falls on everyone who builds on top.
LSP7 keeps the balance sheet and adds the surrounding system. Every transfer has a force
flag and a bytes data payload. Every transfer fires universalReceiver on sender and
recipient through LSP1. Every authorization event includes an operatorNotificationData
payload so receivers can react when operators are set or revoked. Metadata lives in ERC-725Y
under LSP4-defined keys, not in three top-level functions.
When to migrate
Migrate when the token needs receiver awareness (vaults that credit on deposit), structured metadata (governance tokens with proposal links), or account-level permission scoping (apps that should have narrow authority, not blanket allowance).
Don’t migrate when ERC-20 compatibility is the product. A wrapped reserve asset doesn’t gain from LSP7’s hooks.
Operator scope is honest
LSP7 authorizeOperator is still amount-scoped. It is not magical. The structural shift comes
from pairing it with a Universal Profile: now the controller calling authorizeOperator is
itself constrained by LSP6 permissions, allowed calls, and allowed selectors. The token
contract doesn’t have to police future drains — the account does, at a higher altitude.