standard · substrate

Ethereum ERC-725 Standard

ERC-725 · Substrate

The ERC at the bottom of every LSP — execute calls (725X) and store typed data (725Y).

ERC·725 interface solidity
// 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.

Read the source.