standard · account

LUKSO LSP0 ERC-725 Account Standard

LSP·0 · Account

The account contract. Owns assets, holds metadata, executes calls, accepts hooks.

LSP·0 interface solidity
// LSP0 composes ERC725X + ERC-725Y + LSP1 + LSP14 + LSP17

// ERC725X — execute arbitrary calls from the account
function execute(uint256 op, 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;

// LSP1 — universal receiver hook
function universalReceiver(bytes32 typeId, bytes memory data)
  external payable returns (bytes memory);

LSP0 is the substrate every other account-side LSP builds on. The contract carries an ERC725X execute path (so the account can call out as itself), an ERC-725Y data store (so the account carries its own metadata), and an LSP1 hook (so the account can react when value or assets arrive). Owner rotation goes through LSP14’s two-step pattern, function-selector extension goes through LSP17, and permissioned execution typically goes through LSP6.

Read LSP0 as a kit, not a monolith. Each composed standard is independently described and independently swappable. The defaults are practical; the surface is small enough to audit.

What it solves.

What it does not solve.

Anti-overselling is a feature.

  • LSP0 isn't a wallet UX. The Universal Profile Browser Extension (or any LSP-aware wallet) is what users actually interact with.
  • Bytecode is immutable. Behavior extension goes through LSP17, not in-place upgrades.
  • The account doesn't pick controllers for you. That policy is the LSP6 layer.

Companions.

Standards this composes with.

Read the source.