Skip to main content

EOA vs. Universal Profile

An externally owned account (EOA) is one private key and one address β€” portable across every EVM chain, but with no metadata, no per-app permissions, no recovery path, and no receiver hooks. A Universal Profile is a smart contract account implementing LSP0 ERC725Account: LSP6 Key Manager for scoped controller permissions, LSP1 for asset-receipt awareness, LSP3 for on-chain profile metadata, and LSP20 for inline call verification. Where an EOA is a bare signer, a Universal Profile is an account-shaped product out of the box.

Structural comparison​

FeatureEOAUniversal Profile
Account typekey pairsmart contract (LSP0)
Identityaddress only, off-chain profile elsewhereLSP3 profile metadata + asset inventories, on-chain
Controllersexactly one private keymany, each with independently scoped LSP6 permissions
Recoveryseed phrase β€” a single point of failurepolicy expressed through controllers, devices, and trusted contracts
SigningecrecoverisValidSignature (ERC-1271, contract-native)
Gasless transactionsneeds an external forwarder / paymasternative relay execution via LSP25
Receiver hooksnoneLSP1 universalReceiver + delegate
msg.sender at target contractsthe EOA's addressthe profile contract's own address

An account, not just a signer​

A raw EOA is the minimum a chain can express: address = keccak(pubkey)[12:], one key, one signer. Everything a user-facing product needs on top β€” profile, permissions, recovery, notifications β€” has to be bolted on by the app, off-chain, per project.

A Universal Profile ships all of it as the account itself. LSP3 gives every profile a name, image, and links that any dApp can read the same way. LSP6 lets a user grant one controller "transfer this token to this pool" and another controller "update this playlist" β€” narrow, revocable, auditable, instead of one key that can do everything. LSP1 means the profile knows the moment it receives an asset and can react β€” register it, forward it, or reject it β€” without a separate indexing service.

Gasless by default, not by integration​

New users don't need to understand "gas" before they can use an app. A Universal Profile executes relayed transactions natively through LSP25 β€” no custom forwarder contract, no per-app paymaster integration, no forcing users to acquire native currency before their first interaction. That removes the entire onboarding funnel of downloading a wallet, buying crypto, and funding an address just to try a dApp.

When a Universal Profile is the right call

Any product where the account carries identity, permissions, or recovery as part of the experience should build on Universal Profiles. An EOA remains the right choice only when "one private key controls one address" is itself the feature you're building around β€” pure cross-chain signer plumbing, hardware-wallet-anchored flows.

Related reading: The EOA key-risk problem Β· Social recovery without a seed phrase Β· Wallet permission scoping Β· Benefits of the LUKSO standards