Core Protocol

Wallet Runtime

The Runtime consolidates app execution, signature validation, and asset authority at the user address.

3 sectionsruntime
01

App execution

executeRuntimeApp(app, data) checks the app address, wallet-local enablement, and Registry status, then delegatecalls the app in the wallet's storage and balance context.

Any address can trigger executeRuntimeApp, but that does not grant wallet-owner authority. Owner-sensitive actions must use wallet self-signatures, ERC-1271 validation, or only-self constraints.

IAccountAppRuntime
interface IAccountAppRuntime {
  event AppEnabled(address indexed account, address indexed app);
  event AppDisabled(address indexed account, address indexed app);

  function executeRuntimeApp(address app, bytes calldata data)
    external payable returns (bytes memory result);
  function enableApp(address app) external;
  function disableApp(address app) external;
  function isAppEnabled(address app) external view returns (bool);
}
02

Storage and execution lock

  • The account core and every app use separate ERC-7201 namespaces.
  • A transient-storage execution lock rejects reentrancy and nested runtime execution.
  • Token and NFT pull contexts exist only during the current transaction.
  • Delegatecall failures bubble their original error data when available.
03

Account-level calls

  • executeBatch(calls) performs ordinary calls initiated by the wallet itself.
  • executeWithSig(call, deadline, signature) lets any submitter relay a wallet-signed call.
  • ExecuteWithSig uses an account-wide incrementing nonce and binds wallet, target, value, dataHash, and deadline.