Ethereum ERC-725 Standard
ERC-725 · Substrate
The ERC at the bottom of every LSP — execute calls (725X) and store typed data (725Y).
// ERC725X — execute a call from this contract as msg.sender
function execute(uint256 operationType, address target, uint256 value, bytes data)
external payable returns (bytes memory);
// ERC-725Y — typed key-value storage
function getData(bytes32 dataKey) external view returns (bytes memory);
function setData(bytes32 dataKey, bytes memory dataValue) external;
// Batch variants exist for both.
ERC-725 is the substrate. ERC725X gives a contract the ability to make outbound calls as itself — the foundation of any account contract. ERC-725Y gives it a typed key-value store — the foundation of every LSP that names a data key (LSP3 profile metadata, LSP4 asset metadata, LSP5 received assets, LSP6 permissions, LSP12 issued assets, LSP17 extensions).
When you read a Universal Profile, you’re calling getData(key) against ERC-725Y. When the
profile sends value, it’s calling execute(...) against ERC725X. Everything LUKSO-shaped is
ERC-725 underneath.
What it solves.
- no standard way to store on-chain metadata as typed key-value pairs
- no standard contract-as-caller primitive (vs custom forwarders)
What it does not solve.
Anti-overselling is a feature.
- ERC-725 is a *substrate*. It doesn't define any meaning — that's what LSP3, LSP4, LSP5, LSP6, etc. do on top.
- Storage costs are real. ERC-725Y data keys cost gas to set, same as any storage.
Companions.
Standards this composes with.